合成とデファジィ化 — 1 つの出力へ戻す
発火度で出力側の山をクリップし、重ね合わせ、最後に 1 つの連続値として読み出す。
26℃・68% の例では、中風の主張が 0.50、強風の主張が 0.25 です。重心法で読むと出力は約 62.05% になります。
発火度は「出力の山をどの高さで上から制限するか」を表す
前章の結果をもう一度まとめると、26℃・68% では集約後の主張は次の 2 本でした。
これは「中風の山を高さ 0.50 でクリップし、強風の山を高さ 0.25 でクリップする」と読めます。クリップ (clipping) とは、もとの三角・台形のメンバーシップ関数を、発火度より上の高さには絶対に伸ばさないという「天井を設定する」操作です。発火度が 0.50 のルールは、その出力ラベルが最大でも 0.50 までしか効かないことを意味するので、山の頂点を 0.50 で水平に切り落とした台形になります。複数ルールが同じラベルに対応していても、最終的に出力側へ残るのは 1 本のクリップ済みの山だけです。
なぜクリップなのか: 発火度はそのルールの「効きの上限」と解釈します。山のどの部分も発火度を超えて効くことはないので、山の上を水平に押さえ込むのが自然です。代わりに山全体を発火度で掛け算するスケーリング (Larsen 法) もありますが、Mamdani 方式ではクリップ (min によるカット) が標準です。
小問 4-1 — クリップと集約の確認
まずは『どの高さで山を切るか』だけを確認します。
Q1. 中風の山を切る高さが 0.35 と 0.50 の 2 本あるとき、集約後の中風の高さはいくつですか。
同じ出力ラベル同士は max でまとめるので 0.50 です。
Q2. 強風の山を切る高さが 0.25 と 0.25 の 2 本あるとき、集約後の強風の高さはいくつですか。
max(0.25, 0.25)=0.25 です。
厳密な重心法 — 連続版の定義
クリップした 2 つの山を重ね合わせた結果を、出力軸 x 上の関数 μ_agg(x) と書きます。重心法 (centroid method, COG) はこの関数の重心を 1 つの連続値として読み取る方法で、定義は次のとおりです。
u = ∫ x · μ_agg(x) dx / ∫ μ_agg(x) dx
実装では x を 0, 1, 2, …, 100 と離散化し、和に置き換えます。
u = Σ ( x · μ_agg(x) ) / Σ μ_agg(x)
厳密重心法をステップで追う — 26℃・68% の場合
本講座のシミュレータは出力軸 x = 0..100 を 1 刻みで走査し、各 x に対して次のように μ_agg(x) を求めます。
- 各出力ラベル (弱風 / 中風 / 強風) のメンバーシップ関数を
xで評価し、所属度μ_low(x), μ_med(x), μ_high(x)を出す。 - それぞれの集約高さ (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 本の最大を取って
μ_agg(x) = max(μ_low_clipped, μ_med_clipped, μ_high_clipped)。 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 の値はいくつですか。
20×0 + 50×0.50 + 85×0.25 = 46.25 です。
Q2. 分母 low + medium + high の値はいくつですか。
0 + 0.50 + 0.25 = 0.75 です。
Q3. ラベル中心近似の最終出力はいくつですか。
46.25 / 0.75 = 61.67 です。シミュレータの正確な重心法では約 62.05% になり、かなり近い値になります。