合同会社小村ソフト
第 4 章

合成とデファジィ化 — 1 つの出力へ戻す

発火度で出力側の山をクリップし、重ね合わせ、最後に 1 つの連続値として読み出す。

集約出力と重心法

26℃・68% の例では、中風の主張が 0.50、強風の主張が 0.25 です。重心法で読むと出力は約 62.05% になります。

発火度は「出力の山をどの高さで上から制限するか」を表す

前章の結果をもう一度まとめると、26℃・68% では集約後の主張は次の 2 本でした。

弱風 0.00 中風 0.50 強風 0.25

これは「中風の山を高さ 0.50 でクリップし、強風の山を高さ 0.25 でクリップする」と読めます。クリップ (clipping) とは、もとの三角・台形のメンバーシップ関数を、発火度より上の高さには絶対に伸ばさないという「天井を設定する」操作です。発火度が 0.50 のルールは、その出力ラベルが最大でも 0.50 までしか効かないことを意味するので、山の頂点を 0.50 で水平に切り落とした台形になります。複数ルールが同じラベルに対応していても、最終的に出力側へ残るのは 1 本のクリップ済みの山だけです。

なぜクリップなのか: 発火度はそのルールの「効きの上限」と解釈します。山のどの部分も発火度を超えて効くことはないので、山の上を水平に押さえ込むのが自然です。代わりに山全体を発火度で掛け算するスケーリング (Larsen 法) もありますが、Mamdani 方式ではクリップ (min によるカット) が標準です。

小問 4-1 — クリップと集約の確認

まずは『どの高さで山を切るか』だけを確認します。

Q1. 中風の山を切る高さが 0.35 と 0.50 の 2 本あるとき、集約後の中風の高さはいくつですか。

Q2. 強風の山を切る高さが 0.25 と 0.25 の 2 本あるとき、集約後の強風の高さはいくつですか。

厳密な重心法 — 連続版の定義

クリップした 2 つの山を重ね合わせた結果を、出力軸 x 上の関数 μ_agg(x) と書きます。重心法 (centroid method, COG) はこの関数の重心を 1 つの連続値として読み取る方法で、定義は次のとおりです。

u = ∫ x · μ_agg(x) dx / ∫ μ_agg(x) dx

実装では x0, 1, 2, …, 100 と離散化し、和に置き換えます。

u = Σ ( x · μ_agg(x) ) / Σ μ_agg(x)

厳密重心法をステップで追う — 26℃・68% の場合

本講座のシミュレータは出力軸 x = 0..100 を 1 刻みで走査し、各 x に対して次のように μ_agg(x) を求めます。

  1. 各出力ラベル (弱風 / 中風 / 強風) のメンバーシップ関数を x で評価し、所属度 μ_low(x), μ_med(x), μ_high(x) を出す。
  2. それぞれの集約高さ (low=0.00, medium=0.50, high=0.25) を上限とするクリップを行う:
    μ_low_clipped(x) = min(μ_low(x), 0.00) = 0
    μ_med_clipped(x) = min(μ_med(x), 0.50)
    μ_high_clipped(x) = min(μ_high(x), 0.25)
  3. 3 本の最大を取って μ_agg(x) = max(μ_low_clipped, μ_med_clipped, μ_high_clipped)
  4. x を 0〜100 まで動かしながら x · μ_agg(x)μ_agg(x) をそれぞれ積算する。

本講座の出力ラベルは 弱風 = trimf(x, 0, 20, 40)、中風 = trimf(x, 30, 50, 70)、強風 = trimf(x, 65, 85, 100) です。これを 1 刻みで集計すると、近似計算ですが次のような数値になります。

Σ μ_agg(x)        ≈ 27.45      (面積)
Σ x · μ_agg(x)    ≈ 1703.00    (1 次モーメント)
u = 1703.00 / 27.45 ≈ 62.05    (重心)

シミュレータが表示する「62.05%」はこの値です。出力軸上で「中風の台形 (高さ 0.50・x=30〜70)」と「強風の台形 (高さ 0.25・x=65〜100)」の重なる部分を含めて 1 つの図形とみなし、その重心の x 座標を読んでいるだけです。

手計算ではラベル中心近似で十分

厳密版は積分 (または 100 点の和) なので、紙の上では大変です。そこでラベル中心近似を導入します。これは、各出力ラベルの「もっとも合う点」(三角形の頂点) だけを代表点として、重心を加重平均で近似する方法です。

弱風 = 20, 中風 = 50, 強風 = 85   (各ラベルの中心点)
u ≈ (20×low + 50×medium + 85×high) / (low + medium + high)

今回の高さは low=0.00, medium=0.50, high=0.25 なので、

u ≈ (20×0 + 50×0.50 + 85×0.25) / (0 + 0.50 + 0.25)
  = 46.25 / 0.75
  = 61.67

厳密重心 62.05 に対して 61.67 と、誤差は 0.4 ポイント以内です。ラベルが対称な三角形でほぼ等間隔に並んでいる場合、ラベル中心近似は厳密重心法のよい近似になります。本講座の小問では、特に断らない限りラベル中心近似で答えるものとします。

小問 4-2 — ラベル中心近似で出力を出す

手計算では 弱風=20、中風=50、強風=85 を代表点として近似します。高さは low=0.00, medium=0.50, high=0.25 です。

Q1. 分子 20×low + 50×medium + 85×high の値はいくつですか。

Q2. 分母 low + medium + high の値はいくつですか。

Q3. ラベル中心近似の最終出力はいくつですか。

%

なぜ重心法が使いやすいのか

弱い主張も少しだけ残せる
0.10 や 0.20 のルールも完全には捨てられず、少しだけ重心を動かします。
入力が少し変わっても出力が少しずつ動く
境界の近くでも、急に 1 本だけが勝つのではなく、重心が滑らかにずれていきます。