情報学部 菅沼ホーム SE目次 索引

ファジイ

    1. 1.ファジイ集合
    2. 2.ファジィ集合の性質
    3. 3.ファジイ推論
    4. 4.ファジイ推論と内挿
1.ファジイ集合

  集合に関する説明の際述べましたように,集合においては,あるものが与えられたとき,それが集合の要素か否かを一意に判断できなくてはいけません.例えば,以下の示すものは,集合のように見えても集合ではありません.
E = {x | x は浜松に近い市町村} 
F = {x | x は小さい整数} 		
しかし,ファジィ集合fuzzy set )では,上のようなものを一種の集合として扱うことができます.

  ファジイ集合の定義に入る前に,通常の集合(クリスプ集合と呼ぶ)を別の形で定義しておきます.

[定義] X を全体集合,E をその部分集合とする.次のように X 上で定義される関数

χE: X → {0, 1} ( 0 または 1 )

を X の部分集合 E の定義関数といい,次のような値を持つ.

χE(x) = 1  x ∈ E
   = 0  x ∈/  E

また,逆に,集合 E は,

E = {x | χE(x) = 1}

と表すことができる.

  次に,ファジイ集合の定義を上げておきます.

[定義] ファジィ集合  全体集合(台集合と呼ぶ) X の要素 x がファジィ集合 A に含まれると思われる度合いをグレード hA(x) で表す.ここで,hA は,

hA: X → [0, 1] ( 0 ~ 1 の値)

のように,X から [0 , 1] への関数(写像)であり,ファジィ集合 A のメンバーシップ関数と呼ばれる.

  以上の定義から明らかなように,ファジイ集合におけるメンバーシップ関数は,クリスプ集合の定義関数の値域を {0, 1} から [0, 1] へ拡張したものになっています.つまり,クリスプ集合も一種のファジイ集合であるが,そのメンバーシップ関数が,0 または 1 という値しか取らない特殊な関数(定義関数)であるといえます.

  ファジイ集合の例として,例えば,以下のようなものが考えられます.
E = {x | x は浜松に近い市町村} 
F = {x | x 小さい整数} 		
  ただし,ファジイ集合では,上の記述だけでは不十分です.メンバーシップ関数を定義してやる必要があります.メンバーシップ関数の定義方法に特別な規則があるわけではありません.基本的には,メンバーシップ関数としての性質を備えていさえすれば,どのように定義しても構いません.例えば,上記のファジイ集合 E に対して,以下に示すいずれのメンバーシップ関数を使用しても構いません.一般に,ファジイ集合を使用する目的,計算時間等によって決まってきます.
2.ファジィ集合の性質

[定義] 包含関係

A ⊂ B ⇔ hA(x) ≦ hB(x), for ∀x

A = B ⇔ hA(x) = hB(x), for ∀x
     ⇔ A ⊂ B,かつ,B ⊂ A

[定義] 和集合共通集合

A ∪ B ⇔ hA∪B(x) = hA(x) ∨ hB(x)
             ≡ max {hA(x), hB(x)}

A ∩ B ⇔ hA∩B(x) = hA(x) ∧ hB(x)
             ≡ min {hA(x), hB(x)}

[定義] 補集合

B = Ac ⇔ hB(x) = 1 - hA(x)

  集合と同じように,以下に示すような性質があります.ただし,X を全体集合としたとき,排中律,矛盾律は成立しない,つまり,
A ∪ Ac ≠ X
A ∩ Ac ≠ φ		
であることに,注意してください.この点は,下図を見れば明らかだと思います.なお,図においては,A ∪ Ac や A ∩ Ac に対応するメンバーシップ関数を,分かりやすいように,A や Ac に対応するメンバーシップ関数と重ならないように描いています.

  1. 可換律
    A ∪ B = B ∪ A
    A ∩ B = B ∩ A			
  2. 結合律
    A ∪ ( B ∪ C ) = ( A ∪ B ) ∪ C
    A ∩ ( B ∩ C ) = ( A ∩ B ) ∩ C			
  3. 分配律
    A ∪ ( B ∩ C ) = ( A ∪ B ) ∩ ( A ∪ C)
    A ∩ ( B ∪ C ) = ( A ∩ B ) ∪ ( A ∩ C)			
  4. 二重否定律
    (Ac)c = A			
  5. ド・モルガン律
    ( A ∪ B )c = Ac ∩ Bc
    ( A ∩ B )c = Ac ∪ Bc			

3.ファジイ推論 → ( C/C++ によるプログラム例) JavaScript 版では,画面上で実行することが可能です.テキストエリア内のデータの意味に関しては,C++,または,Java のプログラムに対する説明を参照してください.なお,他の言語( PHP,Ruby,Python,C#,VB )によるプログラム例に関しては,「プログラミング言語の落とし穴」第 9 章の「ファジイ推論」をご覧ください.

  ファジイ集合を使用した推論方法(ファジイ推論)には,様々なものが存在します.ここでは,ファジイ制御において利用される推論方法の一つについて簡単に説明します.

  あるシステムを制御するために,以下に示すような n 個の規則が存在したとします.
Ri: if x1 = Ai1 and x2 = Ai2 then y = Bi  i = 1, 2, ・・・, n		
ここで,Aij は,ファジイ集合とします.この例では,then の前にある変数は 2 つだけですが,2 つ以上であっても構いません.各規則のメンバーシップ関数は,
hAi1∩Ai2∩Bi(x1, x2, y) = hAi1(x1) ∧ hAi2(x2) ∧ hBi(y)		
とします.また,n 個の制御規則全体 R は,
R = R1 ∪ ・・・ ∪ Rn		
となります.従って,x1 = x10, x2 = x20 のとき,推論結果 B0 は,以下のようになります.
hB0(y) = hA11∩A12∩B1(x10, x20, y) ∨ hA21∩A22∩B2(x10, x20, y) ∨ ・・・ ∨ hAn1∩An2∩Bn(x10, x20, y)
   = ( hA11(x10) ∧ (hA12(x20) ∧ hB1(y) )( hA21(x10) ∧ hA22(x20) ∧ hB2(y) ) ∨ ・・・ ∨ ( hAn1(x10) ∧ hAn2(x20) ∧ hBn(y) )
   = ( ω1 ∧ hB1(y) )( ω2 ∧ hB2(y) ) ∨ ・・・ ∨ ( ωn ∧ hBn(y) )  (1)		
ただし,
ωi = hAi1(x10) ∧ hAi2(x20)  (2)		
とします.このように,B0 は,メンバーシップ関数が hB0(y) となるファジイ集合となりますが,システムを制御する場合,具体的な設定値が決まらないと制御できません.そこで,一般的には,このメンバーシップ関数の重心,
y0 = ∫hB0(y) y dy / ∫hB0(y) dy		
をもって設定すべき値とします.また,(1) 式において,場合によっては,∧演算の代わりに通常の乗算,また,∨演算の代わりに通常の加算が使用されることもあります.

  以上の推論を,変数の数が 2 で,かつ,規則が 2 つの場合について説明します.以下で行う説明を図示したのが,次に示す図です.
  各規則を具体的に書くと以下のようになります.
R1: if x1 = A11 and x2 = A12 then y = B1
R2: if x1 = A21 and x2 = A22 then y = B2		
x1 = x10, x2 = x20 (制御すべき対象における現時点の圧力,温度など)に対して,まず,左辺のメンバーシップ関数との交点を調べます.(2) 式より,A11 と A12 との交点の内,小さい方が ω1,また,A21 と A22 との交点の内,小さい方が ω2 となります.そして,各 ωi によって Bi をカット(斜線の部分)し,それらの論理和を取ったものが結果となります( hB0(y) ).実際には,この斜線部の重心( y0 )が制御に使用される設定値(制御機器に加えられる電圧,電流など)となります.

  また,∧演算を通常の乗算に変更して推論を行った場合は,以下の図のようになります.

4.ファジイ推論と内挿

  今,2 つの規則,
R1: if x が,ほぼ 3(A1) then y は,ほぼ 5(B1)
R2: if x が,ほぼ 6(A2) then y は,ほぼ 7(B2
が存在したとします.図示すれば,以下のようになります.
  このようなとき,x = 4 のとき,y の値はいくつになるでしょうか.線形内挿によると,y = 5.667 という結果が得られますが,先に示した方法で推論すると,y = 5.7 という結果が得られます.3 ~ 6 の x の値に対して実際に推論を行うと下図のような結果になります.線形内挿のような直線にはなりませんが,それに非常に近い形になります.実際,∧演算の代わりに通常の乗算,∨演算の代わりに通常の加算を使用し,かつ,適当な条件が満たされると,ファジイ推論の結果と線形内挿の結果が一致します.
  この結果からも明らかなように,ファジイ推論は,内挿方法の一種として見ることもできます.しかし,then の前の変数の数が少ない場合は,線形内挿等によっても結果を推論することは容易ですが,変数の数が多くなると大変なことになります.その点,ファジイ推論においては,変数の数が変化してもほとんど同じ手続きで処理が可能です.

情報学部 菅沼ホーム SE目次 索引