ファジィ集合のはなし(7)
前回は分解定理と拡張原理を扱い、そこからファジィな数同士の足し算を見ました。
かなり面倒でしたね。詳細は前回の記事を見てください。
さて、今回は、あまりに面倒なファジィ数の足し算をもう少し簡単にやれないか考えます。
前回、分解定理や拡張原理で見たように、メンバーシップ関数は最終的に元$${z}$$での$${\alpha}$$レベルを比較し、最も大きいもの(上限)を選びます。
ここで大小判定する際の変数はあくまで$${z}$$であり、演算に入れる$${x,y}$$ではありません。
つまり、 $${x,y}$$を具体的にコレ、コレと決めなくても良いということです。
離散的な場合が一番わかりやすいんですが、結局元の総当たりをしていますから、べつに先に$${x,y}$$を選んでやらずとも良さそう、ともいえます。
先んじて等しい$${\alpha}$$を持つ元を調べ上げても一緒じゃないか、とまでいうとちょっと飛躍が過ぎますが、これからやろうとすることはまさにそれです。
さらに突き詰めると、分解定理が$${\alpha}$$カットから作られる、その元には最大最小(上限下限)があるので、いわばレベルが$${\alpha}$$の区間を計算してやればいい。そうなると、区間の両端だけで演算すれば良いはずです。
まあ試しにやってみましょう。前回出した例で行きます。
「2ぐらいの数」として、元とメンバーシップ関数を以下のように対応させます。
$$
\begin{matrix}0&1&2&3&4\\0.2&0.5&1&0.5&0.2\end{matrix}
$$
同様に「6ぐらいの数」を、
$$
\begin{matrix}4&5&6&7&8\\0.4&0.8&1&0.8&0.4\end{matrix}
$$
さて、和でやってみましょう。
例えば$${0.2}$$カットは、それぞれ
$$
\begin{matrix}\tilde{2}&|&0&1&2&3&4\\\tilde{6}&|&4&5&6&7&8\end{matrix}
$$
なので端と端の演算とは、$${(0,4)}$$と$${(4,8)}$$のことです。
注意してほしいのは、$${\alpha}$$カット6$${\mu(x)\geq\alpha}$$なる$${x}$$なので、$${\alpha=0.2}$$となる元を持たない$${\tilde{6}}$$でもちゃんと元、具体的には$${4,5,6,7,8}$$を持ちます。
もう一つくらい例をみましょう。
$${0.4}$$カットでは、
$$
\begin{matrix}\tilde{2}&|&&1&2&3&\\\tilde{6}&|&4&5&6&7&8\end{matrix}
$$
です。この場合の端と端は$${(1,4),(3,8)}$$です。
このように、今調べたい$${\alpha}$$カットの両端を使い演算すれば、結果の$${\alpha}$$カットの両端の数字がわかります。
つまり、演算結果の $${\alpha}$$カットが作れるので、そこから演算結果のメンバーシップ関数が分解定理から構築できます。
以上の推論、とくに飛躍が激しいのは以下の二つかなと思います。
・$${z=f^{-1}(x,y),(x,y)}$$ではなく等しい$${\alpha}$$同士の、演算だけ見ても結果は同じ?
・$${\alpha}$$カットの全元を見なくとも$${\alpha}$$カットの上限下限だけ調べれば良い?
後者に関してはファジィ数の定義に「凸ファジィ集合であること」というのがあるので、$${\alpha}$$カットは必ず一つの「範囲」におさまることから正当化できそうです。
凸じゃなくても、それぞれの区間の上下限を調べればなんとかなるかもしれませんけどね。
問題は前者なのですが、min演算で返されるのは必ず演算されるモノ$${A,B}$$どちらかのメンバーシップ関数値ですから、
・その結果が注目する$${\alpha}$$に等しいならそれを採用
・そうでない別の結果、$${\beta(< \alpha)}$$になるなら、$${\beta}$$レベルの探索時に使用
と決めてしまえば良いかと思います。
以上は特に区間演算と呼ぶようです。
ただもちろん区間演算では$${-,\div}$$に注意を要します。
この二つの演算は右端どうし、左端どうし、では結果が両端にはなりません。右と左、左と右で演算する必要があります。
例えば
$$
\begin{matrix}\tilde{2}&|&&1&2&3&\\\tilde{6}&|&4&5&6&7&8\end{matrix}
$$
これだと、$${f(1,4)=1-4=-3}$$より $${f(1,8)=1-8=-7}$$の方が小さいですし、$${f(3,8)=3-8=-5}$$より $${f(3,4)=3-4=-1}$$の方が大きくなります。
新たな演算を導入する場合は、もちろんここを気にする必要があるので、始めはちゃんと拡張原理から計算するべきな気もします。うえ、めんどくさい。
何はともあれ、普通の算数でやるような四則演算はファジィ数の演算に移すことができそうです。
ということはなんとなく体を成しているように思えますが、メンバーシップ関数が元に付属している以上、単純な体とは概念が異なります。
ここで出てきた体は、「たい」と読みます。
体とは何かというと、大雑把に言って四則演算が無理なくできる集合と演算で、時々はやる$${\div0}$$問題を回避するように定義がされます。
よーするに、中学一年生までで慣れ親しむ計算が全てできるってことです。
群環体と見ていると、群から環に向けては世界の広がりを感じるのですが、体はもう少し生活寄りに制限をつけたようで、個人的にはあまり興味が湧かないんですけどね。
とはいえガロアの話とか、面白いことはたくさんあるんですが、そういうのはそういうのを話したい人が既にごまんといるでしょうから、そういう記事やYouTubeでも見てわかった気になってください。
裃のnoteはね、結果を見せて「わぁすごいでしょ、タメになりましたか?」じゃなくて、泥の中を這って「捕まえたゾ」ってやる記事ですから。
君も一緒に沼に棲もうよ。ダメにしてやるよ。
話がそれましたが、ファジィ数の演算、体っぽく考えるにしては、ちょっとメンバーシップ関数の存在が厄介です。
体の要素にメンバーシップ関数が紐づいていますし、そもそも要素が集合なのもどことなく気持ちが悪い。
気持ちが悪いかどうかは抜きにして、メンバーシップ関数を内包した体を考えられないか、なのですが、それも一筋縄では行きません。
と言いますのも、各ファジィ数に対して同一形状のメンバーシップ関数を定義したところで、演算後のメンバーシップ関数はもとのメンバーシップ関数とは異なったものになるからです。
例えば「2ぐらいの数」はこれまで同様、
$$
\begin{matrix}0&1&2&3&4\\0.2&0.5&1&0.5&0.2\end{matrix}
$$
として、「6ぐらいの数」を
$$
\begin{array}{}\begin{matrix}4&5&6&7&8\\0.2&0.5&1&0.5&0.2\end{matrix}\end{array}
$$
として、同じ形状のメンバーシップ関数にします。この時和の結果は
$$
\begin{array}{}\begin{matrix}4&5&6&7&8&9&10&11&12\\0.2&0.2&0.5&0.5&1&0.5&0.5&0.2&0.2\end{matrix}\end{array}
$$
になります。ちょっと幅が増えてます。
ということは、ファジィ数の体(群、環)を作るにしても、そこに内包すべきメンバーシップ関数は唯一ではなく無数に必要、メンバーシップ関数そのものも演算の過程によって変わるから不定、ファジィだということになります。
実はメンバーシップ関数そのものもファジィなものにしてしまうファジィ集合もありまして、そういうのはタイプ2-ファジィ集合といいます。
タイプ2があるなら当然その先もありまして、タイプ$${n}$$ファジィ集合と一般化されてます。
この一般化をやったのが、元々のファジィ集合を作り出したザデー(Zadeh)本人というのがなんともまたすごいですね。
22/10/06追記
上で、さも「タイプ2なら計算の不定性も織り込んだメンバーシップ関数が作れる」的なことを言っていましたが、それは違います。
というか私の勘違いです。
のちのちタイプ2-ファジィ集合についても触れますが、メンバーシップ関数そのものがファジィなものになるとは言っても、メンバーシップ関数の形状は外から与えられる物なので、演算によってどの形を取るか選択する余地はありません。
上で言ったようなことを実現するには所属度$${\mu}$$をある程度演算と同時にいじってやる必要がありそうですが、演算の定義の上ではそれができないと思います。
例えば拡張原理ならsup-minを取るだけで、$${\mu}$$そのものの比較しか許されていないわけで、$${\mu^2}$$みたいなことは許されていないわけです。
次回はちょっと話の趣向を変えて、拡張原理と分解定理の話をしようと思います。
タイプ2ファジィはまたいつか。
この記事が気に入ったらサポートをしてみませんか?