SoftComputing lab.
 
Googleでサイト内検索:

Fuzzy Theory
ファジィ理論
Neural Network
ニューラルネットワーク
Chaos
カオス
Artifical Intelligence <AI>
人工知能
Genetic Algorithm <GA>
遺伝的アルゴリズム
お勧めの本

ファジィ制御

なぜファジィ制御を用いるのか

現在では、様々なところでファジィ制御が使われています。家電製品から、プラントの制御、地下鉄の自動運転まで様々な応用がされています。では、なぜ「ファジィ制御」を使うのでしょう。

このように書くと誤解を招くかもしれませんが、一般にファジィ制御が大きな成果をあげているものの多くは、今まで人間が行っていたことを新たに自動化するといったものです。では、従来の制御ではこれらのことができないのかというと、多くの場合そんなことはありません。ファジィ制御の特色は、IF−THEN形式で記述されたルールにより、推論を行うことで制御を行うことです。この形式の利点は、人間の経験的な知識を表現しやすいことです。つまり、ファジィ制御の最大の利点は、人間が経験的な知識で操作するようなことを(比較的)簡単に自動化できることではないでしょうか。この点は、人工知能の研究の成果であるエキスパートシステムと似ています。

もう一つの特色として、あいまいさを扱えるため、きめの細かい操作が可能になります。つまり、一つのルールでも、比較的広い範囲に対応した操作ができるのです。ファジィ制御では、この特色を生かしてお互いに範囲が重なり合うようにルールを設定します。こうすることで、複数のルールがお互いを補完するような関係を作れるため、たくさんあるルールのうちの一つが多少まずくても、他のルールがその分を補って結果として正しい出力を出すことができるのです。また、時間がたって制御したい対象が老朽化などのため、初めに作ったときと多少違った挙動をするようになっても、同じ理由で、ある程度は追従して制御することができます。

それでは、先程少し出てきたように、従来の制御で同じことをするにはどうしたらいいでしょうか。従来の制御では、制御対象に応じて制御器(コントローラ)を設計して、式として求めてやる必要があります。しかし、人間の経験的知識というものは普通、「こういう場合には、こうする」といったような知識の集まりなので、この知識を分析して重複しているところや矛盾しているところを直して、定式化する必要があります。また、ルールの種類によっては定式かができないような場合もあります。このような場合には、全く別なアプローチから、制御対象を分析していかなくてはなりません。このような作業には、大変な時間と労力がかかります。つまり、コストが高くついてしまうわけです。

ファジィ制御の考え方

ファジィ制御は前節で紹介したファジィ推論により制御を行います。センサからの情報を前件部とし、出力される制御量(操作量)を後件部とします。そして、各ルールでそれぞれ出力された制御量の重心をとって、実際の制御量とします(これを非ファジィ化と言います)。つまり、演算自体は前節の図5.3で示したような演算を行っているわけです。ただし、演算方法は、計算量の問題などから、代数積−加算重心法や、簡略化推論法が用いられることも多いです。

感覚的に説明すると、用意されているルールごとに最適な出力を求め、その値の重心(平均値と考えるとわかりやすいかもしれません)をとることで制御を行います。一つのルールを一人の専門家と考えると、すべての専門家の意見を聞いてその中でうまく折り合いをつけて答えを求めているような感じです。

ファジィ制御の最大の特徴はなんといっても、対象のモデル化を行っていないことではないでしょうか。つまり、応答さえわかれば、対象が完全なブラックボックスでも制御できるということです。しかし、その応答の基本的な挙動がわからなければIF−THENルールを生成することはできませんから、全く予想もできない対象を制御することはやはり難しいのではないでしょうか。

ファジィ制御の方法

それでは、実際にシミュレーションを行った例に沿って説明していきたいと思います。

まず、例題を説明します。この例では、図6.1(a)のようなRLC回路の出力電圧(コンデンサの電圧)の制御を行っています。この回路は全く制御を行わない場合は図6.1(b)のような出力になります。制御の目的は素早く、定常状態に持っていくことです。


RLC回路
図6.1 RLC回路

制御をしていないRLC回路の応答
図6.2 制御をしていないRLC回路の応答

それでは制御の手法ですが、出力電圧を早く1Vに持っていくために、ファジィコントローラが現在の出力電圧を測定し、IF−THENルールと照らし合わせて、RLC回路への入力電圧を操作することで制御しています。つまり、フィードバック制御の形をとるわけです。理想的な操作としては、はじめは出力は0Vですから、大きめの電圧を入力し、1V(目標)に近づいてきたら入力電圧を下げてやればいいわけです。また、もし出力電圧が目標値をオーバーしたら入力電圧を1Vよりも小さくして、出力電圧を下げてやります。

以上のような動きをするファジィコントローラのIF−THENルールを作ります。ファジィ制御のIF−THENルールは表6.1に示す形で与えられます。


出力電圧の変化率
NBNSZOPSPB



NB

PB

NS

PS
NS
ZOPBPSZONSNB
PSPS
NS

PB

NB

表6.1 IF−THENルール表

では、この表について説明します。(記号の意味についてはあとから説明します)

この表は、たくさんのIF−THENルールをまとめて表示しています。見方としては、各行に出力電圧の大きさ、各列に出力電圧の変化率をとって、その交差点が前件部の二つの条件における後件部を表します。例えば、1行3列のところでは、

IF 出力電圧がNBで出力電圧の変化率がZO THEN 入力電圧をPBにする

となります。表の空欄になっている場所は対応するルールが無いことを表します。つまり、この表では全部で11個のルールがあらわされています。表はすべての場所が埋まってはいませんが、これは、作ってもあまり意味を成さないようなルールを省いているためです。(ただし、これは制作者の主観で決めたため、必ずそうだとはいえません)つまり、出力電圧がNBで出力電圧の変化率もNBという状態は考えられないのでそのような場合のルールは省いても問題ないということです。

つぎに、表にある記号について説明しておきます。NB,NS,ZO,PS,PBとありますが、これは大きさを表しています。NはNegative(負)、PはPositive(正)、BはBig(大きい)、SはSmall(小さい)を表します。つまり、NBなら負の方向で大きい、PSなら正の方向で小さいとなります。また、ZOはZero(零)のことです。


測定値と記号の関係
図6.3 測定値と記号の関係

IF−THENルールで推論を行うために、NBやZOなどを図6.4のようにファジィ集合として決定しておきます。


各ファジィ集合
図6.4 各ファジィ集合

図6.4に示すように、後件部のファジィ集合には計算を簡単にするために特殊なものを使っています。これは、ファジィ推論の簡略化推論法で用いられるもので、厚みが全くなく、高さ(グレード)の概念だけを持つファジィ集合でシングルトンといいます。簡略化推論法でも基本的にはMin-Max法と同じように推論を行います。違うのは最後に重心を求めるときです。はじめに前件部に関してMin演算を行います。二つの前件部のうち小さいほうのグレードをとるわけです。次に、後件部の集合を前件部で求まったグレードの高さで切ってやります。つまり、前件部で求まったグレードの大きさのシングルトンが後件部で生成されるわけです。これで、一つのルールに関する推論は完了です。同じようにして、すべてのルールに関してシングルトンを求めていきます。すべてのシングルトンのグレード値が求まったら、今度は重心を求めるわけですが、ここで、複数のルールが同じシングルトンを指定しています。ZO以外はルール一覧表に2つないし3つあります。そこで、これを先に統合するわけですが、ここではMax演算が用いられます。例えば、PBは一覧表に2回出てきますが、二つのルールから求まったPBのうち大きいほうを採用し、小さいほうはそのまま切り捨ててしまうわけです。この作業を終えると、NBからPBまで5つのシングルトンについて一個づつのグレード値が残るわけです。そこで今度はこの重心をとってやります。重心を求める式は以下のようになります。

簡略化推論法

ここで、h1〜h5はそれぞれのグレード値を示します。これだけでは、わかりにくいので実際に一つ例をだしてみたいと思います。

ある状態[出力電圧0.8V、変化率0.5]について求めてみます。ルールの表を見ると、この状態では図6.4に示したファジィ集合より、出力電圧についてはNS=0.4とZO=0.6が求まります。次に変化率についてはZO=0.5とPS=0.5が求まります。また、その他の前件部はすべて0となるため、これを含む推論結果はすべて0となり考えなくてよいでしょう。つまり、解を求めるために推論を行う必要のあるルールは
 IF NS and ZO THEN PS
 IF ZO and ZO THEN ZO
 IF ZO and PS THEN NS
の3つになります。したがってここから推論結果はPS=0.4、ZO=0.5、NS=0.5となり、この重心は
(0.2*0 + 0.6*0.5 + 1.0*0.5 + 1.4*0.4 + 1.8*0)/(0 + 0.5 + 0.5 + 0.4 + 0)=0.9714
となります。したがって、この状態では回路に0.9714Vの入力電圧をかけるように指示されます。


簡略化推論の計算例
図6.5 簡略化推論の計算例

これで、一通りの説明は終わりました。制御を行うにはサンプリング時間ごとに推論を行い、回路への入力電圧を随時変更していくことで制御を行っています。この例における制御のシミュレーションの結果を図6.6に示しておきます。また、シミュレーションに用いたプログラムのソースを公開しておきますのでよかったら参考にしてみてください。


シミュレーション結果
図6.6 シミュレーション結果

ソースのダウンロード(rlcfuzzy.lzh/1.19KB)

このソースは Borland C++ で書かれています。当然DOSプログラムです。急いで作ったので、かなり稚拙なプログラムですが一応ちゃんと動作します。実行すると制御結果の時系列データを生成します。サンプリング時間は0.02(sec)で10(sec)までシミュレーションしています。それから、グラフの表示されているエクセルファイルも用意しました。こちらはちょっとファイルサイズが大きめです。

エクセルファイルのダウンロード(rlcxls.lzh/20.4KB)

興味のある方はダウンロードしてみてください。

1999/08/24