ファジィ集合のはなし(9)
前回は本筋を離れて拡張原理と分解定理を眺めていろいろ考えました。
今回はファジィ集合で定義された「大体の数:ファジィ数」の計算をもうちょっと楽しみたいと思います。
ファジィ数の計算ルールは以上の記事に書いてますが、二つ読むのが面倒という方のために簡単に申し上げますと、
1.演算$${A\circ B}$$の結果が$${z}$$になるような$${x\in A,y\in B}$$の組み合わせ全てに対し、メンバーシップ関数の小さい方の値を記録。
式でいうと$${\min(\mu_A(x),\mu_B(y))=\alpha}$$をやります。
2.それぞれの$${z}$$で$${\alpha}$$の値を比較して、最も大きい $${\alpha}$$を$${\mu_{A\circ B}}$$に定める。
式でいうと、$${\sup[\min(\mu_A(x),\mu_B(y))]}$$をやる。
以上が正統派な拡張原理を用いた方法です。
ただこれは面倒なので、もう少し簡便な手法として、区間演算というものがあります。
区間演算はその名の通りです。
1.メンバーシップ関数が$${\alpha}$$となる最大の元と最小の元をそれぞれ$${A,B}$$から持ってくる。
2.この両端を使って結果$${A\circ B}$$のメンバーシップ関数が$${\alpha}$$になる区間を定める。
四則演算なんかは分かりやすくて、下限どうしの和は結果の下限。上限どうしの和は結果の上限になると言えるでしょう。
$$
\begin{array}{}A+Bの\alphaレベル:[x_小+y_小,x_大+y_大]\\A-Bの\alphaレベル:[x_小-y_大,x_大-y_小]\\A\times Bの\alphaレベル:[x_小\times y_小,x_大\times y_大]\\A\div Bの\alphaレベル:[x_小\div y_大,x_大\div y_小]\end{array}
$$
で、問題なのはこのファジィ数演算、適用範囲がどこなのかということ。
どうだと思います? 整数全域でいけるでしょうか?
まあこうやって問いかけている以上、無理なんですけどね。
はい、この区間演算、正の数のみに適用されます。ただ、完全にダメかというとそういうわけでもなく、積商がダメということ。
ダメならダメで代替策はないのか、拡張原理からちゃんとやれば大丈夫なのか。
こういった疑問を今回見ていきます。
区間演算の考え方そのものがダメというわけではありません。
というのも、区間演算は分解定理の逆をやっているので、凸ファジィ集合と定められたファジィ数なら成り立つはずです。
凸ファジィ集合ってのは大雑把にいって、メンバーシップ関数が2つコブを持つことがない、極大が1個以下のものです。
高さ$${\alpha}$$でカットした時の切り口がどこでも1区間ともいえます。
ではどこで怪しくなるかというと、負の数に足を踏み入れる時です。というのも、負の数の積と商は数の大小関係が反転します。
例えば$${\alpha}$$レベルの範囲がそれぞれ$${[-2,3],[-4,5]}$$とすると、上下限の積演算の組み合わせは4通りあります。それぞれ、
$$
\begin{array}{}小小&:&-2&\times&-4&=&8\\小大&:&-2&\times&5&=&-10\\大小&:&3&\times&-4&=&-12\\大大&:&3&\times&5&=&15\end{array}
$$
このように、下限どうしの演算が下限になるとは限らないわけです。
同じことは割り算にも言えます。
$$
\begin{array}{}小小&:&-2&\div&-4&=&0.5\\小大&:&-2&\div&5&=&-0.4\\大小&:&3&\div&-4&=&-0.75\\大大&:&3&\div&5&=&0.6\end{array}
$$
一方、和と差は大丈夫です。
$$
\begin{array}{}小小&:&-2&+&(-4)&=&-6\\小大&:&-2&+&5&=&3\\大小&:&3&+&(-4)&=&-1\\大大&:&3&+&5&=&8\\\hline小小&:&-2&-&(-4)&=&2\\小大&:&-2&-&5&=&-7\\大小&:&3&-&(-4)&=&7\\大大&:&3&-&5&=&-2\end{array}
$$
さて、かくして正負の数が入り混じる場合でも、ちゃんと下限と上限を吟味して区間演算を作れば正負の数の混合もまだなんとかなりそうです。
では0を含む場合はどうなるのでしょう?
積や商はちょっと厄介なことになっているはずです。
0を含む場合は以下の二つが考えられます。
・0を核としたファジィ数
・0は核ではないが要素として持つファジィ数
いわゆる0は前者です。ということは、少なくとも前者について除算はうまくいかないはずです。
後者はうまくいくかな、と思えますが、0を踏んでしまう場合はうまく行きません。
ひとまず$${y=0}$$としましょう。$${xy=x\times0=0}$$が$${z}$$なので、min演算までで、
$$
\min\bigl(\mu_A(x),\mu_B(0)\bigr)=\begin{cases}\mu_A(x)&(\mu_A(x)\leq\mu_B(0))\\\mu_B(0)&(\mu_A(x) > \mu_B(0))\end{cases}
$$
で、結果$${z=0}$$となるすべての$${(x,y)}$$に対してこの結果を比較しますが、これすなわちすべての$${x}$$で比較することなので、結果は$${\mu_B(0)}$$になるはずです。
念のため補足すると、結果が$${\mu_A(x)}$$となるには$${\mu_B(0)< \mu_A(x)}$$が必要ですが、そもそもminの時点で$${\mu_A(x)}$$が選択されるには$${\mu_A(x)< \mu_B(0)}$$が必要なため、矛盾する、起こり得ないということです。
結果、積については$${\mu_{A\times B}(0)=\mu_B(0)}$$となります。
これ、0を核として持つファジィ数、「だいたい0」で演算すると、$${\mu_{A\times 0}(0)=\mu_0(0)=1}$$になるということです。
つまり、なんらかのファジィ数に「だいたい0」をかけると結果も「だいたい0」になるということです。
ゆるゆるではありますが、0としての役割をちゃんと果たしてくれていそうです。
では除算はというと、こればかりは難しい。クリティカルに$${\dfrac{x}{0}}$$はできません。そうなる$${z}$$がそもそも用意できません。
こういうわけで、要素に0を持つファジィ数での除算は、要素0を除いて定義する必要がありそうです。
そうはいっても、$${y}$$は0にとても近づくことができますから、除算には何かその影響が出ていそうです。
それをみる前に、連続なメンバーシップ関数を持つファジィ数を視覚化してみようと思います。
そのためには区間演算の両端を関数として図示できればよさそうですから、メンバーシップ関数の逆関数を用意できればいいはずです。
$$
x=\mu_A^{-1}(\alpha),\;y=\mu_B^{-1}(\alpha)
$$
こんな$${x,y}$$について演算をすることで$${z=f(x,y)}$$が得られますから、
$$
z=f\bigl( \mu_A^{-1}(\alpha),\mu_B^{-1}(\alpha) \bigr)=\mu_{A\circ B}^{-1}(\alpha)
$$
と、$${z}$$のメンバーシップ(逆)関数の候補が現れます。
具体的な関数で見てみましょう。
「だいたい$${A}$$」というファジィ集合のメンバーシップ関数を
$$
\mu_A(x)=e^{-(x-A)^2}
$$
と定めます。
このとき逆関数は、
$$
x=\pm\sqrt{-\log{\alpha}}+A
$$
となります。
例えば積演算はこの逆関数どうしをかければ良いはずです。
$$
\begin{array}{}z&=&\bigl(\pm\sqrt{-\log{\alpha}}+A\bigr)\bigl(\pm\sqrt{-\log{\alpha}}+B\bigr)\end{array}
$$
これが$${\alpha}$$カットの両端と考えます。
もちろん、$${\pm}$$の存在がありますので、作れる"端候補"は四つあるはずです。
実際にこれで、「だいたい1」と「だいたい2」の積を作ってみますと、こんなグラフが得られます。
最終的には一番外に張っている、$${z}$$に対して$${\alpha}$$の大きなものを選ぶ(つまりsupをやっている)こもになるので、こんなふうに、0を境にして関数が変わることが予想されます。
無論正の数だけ考えるならこういうことは起こりませんが、負の数を認めたところでそこまで違和感はないのかなと思います。
一方割り算は、「だいたい1」割る「だいたい2」で、
こうなります。
一見するとなんでもないのですが、よーくみましょう。特に$${y}$$軸。なんか上の方にいません?
これ、$${z}$$が増えると赤線が復活します。
これが緑線を越してしまうのか、それともある程度の値に漸近するのか気になります。
この形からして、なんとなく漸近すると予想できますが、物は試しということでチェックしてみましょう。
ちょっと話が込み入ります。
まず、一般的な話として、演算に用いる$${x,y}$$を決めたら、我々はそれぞれのメンバーシップ関数を比較してminを取ります。
そしてこの時に、同じ$${\alpha}$$をもつ元$${x,y}$$を指定することで$${\mu_z(\alpha)}$$を決めていることに注意します。
これすなわち、数式上では以下をやるということです。
$$
e^{-(x-A)^2}=e^{-(y-B)^2},\;z=f(x,y)
$$
前者を変形すると、
$$
x-A=\pm(y-B)
$$
です。このこのとき$${z=f(x,y)=x\div y}$$とすると、$${x=yz}$$なので、
$$
\begin{array}{}(z\mp 1) y&=&A\mp B\\
y&=&\dfrac{A\mp B}{z\mp 1}\end{array}
$$
となります。もちろん$${z=\mp 1}$$には注意しておきます。
この式はある$${z}$$に対して、$${\mu_A(x)=\mu_B(y)\;\;(=\alpha)}$$となる$${x,y}$$を与えるものですので、この結果をあらためて$${\mu_B(y)}$$に代入すれば、$${z}$$でのメンバーシップ関数値(の候補)が求まります。
ここで(候補)と書いているのは、$${y}$$のとりうる値が二つある可能性、$${y=\dfrac{A\mp B}{z\mp 1}}$$の$${\mp}$$に起因しています。
最終的にどっちを採用するかは、supを取ることになります。
例えば、$${A=1,B=2,z=2}$$を取ります。
すると、
$$
\begin{array}{}y&=&\dfrac{1\mp 2}{2\mp 1}&=&-1,1\\x&=&yz&=&-2,2\end{array}
$$
この時$${\mu_2(y)}$$は、
$$
\begin{array}{}(x,y)=(-2,-1)&:&e^{-(-2-1)^2}=e^{-(-1-2)^2}\\&=&e^{-9}=0.0001234…\\(x,y)=(2,1)&:&e^{-(2-1)^2}=e^{-(1-2)^2}\\&=&e^{-1}=0.3678794…\end{array}
$$
というわけで、$${\mu_z(2)=e^{-1}=0.3678794…}$$を取ることが予想されます。
グラフに書いてみる(桃色の線)と、
ちゃんと$${z=2}$$の時の値になっていそうです。
というわけで、これを悪用して$${z\to\infty}$$を考えてみます。
$$
y=\dfrac{1}{1-z},\dfrac{3}{1+z}
$$
さて、なので、極限としては微小な$${\delta}$$でも使って、
$$
y=-\delta,+\delta
$$
になるということです。
こいつを代入してみると、
$$
e^{-(\pm\delta-2)^2}\to e^{-4}=0.01832…
$$
このように、ちゃんと漸近する値が求まります。
これ、どういうことなんでしょうね。
なかなか普通の数(クリスプな数)だと考え難い結果です。だって、「だいたい1」割る「だいたい2」は2%程度の大きさで「いくつにもなりうる」って解答されることになるんです。
しかし、式として不思議でも、とっている値を考えれば、0近傍のどんな数も「だいたい2」に含まれているんですから、「1÷0.1も、1÷0.01も、まあだいたい1÷2か」と考えれば、さもありなんな結果かもしれません。
以上のように、ファジィだとしても積商、とくに割り算ではやっぱり0近傍は近づかないのが吉ということがわかりました。
また、注意深く関数を見ていただけると、やっぱり演算前後でメンバーシップ関数の形が変化することもわかります。
とくに、今回あげたガウス分布のメンバーシップ関数、こいつは核になる数を軸にして対称な関数なのですが、積や商のメンバーシップ関数は非対称になってしまいました。
つまり、以前お話ししたように、ファジィ数を体(たい)として扱うには無数のメンバーシップ関数も同時に組み込まないといけないのは確かなようです。
演算前後のメンバーシップ関数の挙動はなかなか面白いので、次回もう少し演算で遊んでみようと思います。