第3週目: ファジィ論理と推論,など. - 安信誠二 - 筑波大学

知的制御システム 講義資料
知的制御システム
第3週目
安信誠二
筑波大学大学院
システム情報工学研究科
SIC-3-1
1993-2014 (c) [email protected]
1/24
知的制御システム 講義資料
課題2
(1)入力のファジィ集合 XisL, XisH, YisL, YisH
出力のファジィ集合 ZisP, ZisN を定義せよ。
定義域は、 -10 ~ +10
(2)2入力(x,y)、1出力(z)、の2つのIf-Then ルールを設定せよ。
例えば、 If XisL and YisH then ZisN
If XisH and YisL then ZisP
(3)入力x、yを実数値とし、論理積、論理積、論理和で出力を合成、
により出力Zのファジィ集合を求めよ。
重心法により、出力Zの代表値zを求めよ。
(4)入力変数を変化させ、入力x、yと出力zの関係を示せ。
SIC-3-2
1993-2014 (c) [email protected]
2/24
知的制御システム 講義資料
ファジィ直積の例
And 論理積
水温が高い and 圧力が低い:
x is H and y is L
1.0
μL(y)
0.0
Y
μH(x)
X
H x L
SIC-3-3
1993-2014 (c) [email protected]
3/24
知的制御システム 講義資料
ファジィ集合の円筒的拡張
• 水温が高い: x is H
=[x:0,100,10]<0.0, 0.0, 0.0, 0.0, 0.1, 0.3, 0.5, 0.8, 1.0, 1.0, 0.8>
=[水温]< ... >
1.0
Y
0.0
μH(x)
X
• 圧力が低い: y is L
(a)μH×Y(x,y)
=[y:1,4,4]<0.5, 1.0, 0.7, 0.2, 0.0>
=[圧力]< ... >
1.0
0.0
μL(y)
Y
X
(b)μX×L(x,y)
1993-2014 (c) [email protected]
SIC-3-4
4/24
知的制御システム 講義資料
Aggregation[合成]
論理和
複数のファジィ関係の論理和
• もし,電圧xが10v位なら,温度は50度位.
• もし,電圧xが15v位なら,温度は70度位.
1.0
B1
B2
Y
0.0
A2
A1
X
(a)2項ファジィ関係の3次元表示
R2
R1
Y
Y
R2
1.0
0.75
0.5
0.25
0.0
R1
R1 ∪R2
X
(b)2項ファジィ関係の平面表示
1993-2014 (c) [email protected]
X
(c)2つの2項ファジィ関係の論理和
SIC-3-5
5/24
知的制御システム 講義資料
ファジィ関係式の演算(B'=A'○R)
前提2:
A'(x)=∫X μA'(x) / x
前提1:
R =
結論:
A → B
=
∫X*Y μA(x)∧μB(y) / (x,y)
1.0
μA(x)
μB(y)
μB'(y)
Y
0.0
μA'(x)
R
X
B'= A'○R
= ∫Y μB'(y) / y
=
∫Y maxx{ min(μ A'(x) / x, μ R(x,y) } / y
And論理積- Implication[含意]論理積
1993-2014 (c) [email protected]
SIC-3-6
6/24
知的制御システム 講義資料
ファジィ関係式の演算(B'=A'○R)
もし,トマトが赤ければ,熟している.
トマトが少し赤い.
トマトは,やや熟している.
1.0
μB(y)
μB'(y)
μA(x)
Y
0.0
μA'(x)
R
X
1.0
x is A
0.0
r
X
1.0
y is B
推論結果
μo(y)
0.0
Y
結論 y is B'
推論入力 x is A'
ファジィ推論の実行例
And論理積- Implication[含意]論理積- Defuzzification重心法
SIC-3-7
1993-2014 (c) [email protected]
7/24
知的制御システム 講義資料
ファジィ推論
2値論理
P
P→Q
Q
x = 3
x=2
if x=3 then y=6
y=6
y=?
「x=2の入力に対してyが判らない」
ファジィ推論だと
~P’
x= about 2
~P → ~Q
if x=about 3 then y=about 6
~Q’
y= 6の近く
=> 近似推論が可能
SIC-3-8
1993-2014 (c) [email protected]
8/24
知的制御システム 講義資料
関係 y=f(x)
関数による記述
ファジィ関係
If 約 x1 then 約 y1
If 約 x2 then 約 y2
:
Y
Y
y=f(x)
yo
約yo
xi
X
約Xi
X
SIC-3-9
1993-2014 (c) [email protected]
9/24
知的制御システム 講義資料
And論理積-Implication[含意]論理積
- Aggregation[合成]論理和- Defuzzification重心法-ファジィ推論
推論入力:x 1 is A1'
If x1 is A11 and x2 is A21 then y is B1.
推論入力:x2 is A2'
0.0
μo(y)
If x1 is A12 and x2 is A22 then y is B2.
If部
1.0
推論結果
x 1 is A11
1.0
X1 0.0
And method : min
(Or method : max)
Implication : min
Aggregation : max
Defuzzification :
centrid
then部
x 2 is A21
y is B1
1.0
論理積 r1 論理積
X2
0.0
Y
1.0
推論結果
μo(y)
論理和
1.0
x 1 is A12
1.0
x 2 is A22
論理積 r2
0.0
X1 0.0
推論入力:x 1 is A1'
X2
推論入力:x2 is A2'
y is B2
1.0
0.0
論理積
0.0
Y
非ファジィ化
Y
Y = 1.5
SIC-3-10
1993-2014 (c) [email protected]
10/24
知的制御システム 講義資料
And論理積-Implication[含意]代数積
- Aggregation[合成]論理和- Defuzzification重心法-ファジィ推論
If部
x 1 is
y
x 2 is A21
A11
1.0
1.0
0.0
then部
X1
is
B1
1.0
代数積
r1
論理積
0.0
X2
推論結果
μo(y)
0.0
Y
1.0
論理和
x 2 is A22
x 1 is A12
1.0
y is
1.0
B2
1.0
0.0
Y
論理積 r2
0.0
X1
0.0
推論入力:x 1 is A1' 推論入力:x2
1993-2014 (c) [email protected]
X2
0.0
is A2'
代数積
Y
SIC-3-11
11/24
知的制御システム 講義資料
再2-4
ファジィ制御の概念
車間距離
走行速度
[ブレーキ操作]
前の車にぶつからないように,ブレーキをかける.
走行速度
車間距離
ファジィ推論[無限値論理]
1.もし,車間距離が小さく,走行速度が大きいならば,
ブレーキを強く.
大きい
小さい
強く
1
1
ブレーキ力
1
μ
μ
μ
非ファジィ化 10
ブレーキ力5.2
0
0
0
0 ブレーキ力
10
0 速度100Km/h
0 距離 100m
0
時間→
2.もし,車間距離が大きく,走行速度が小さいならば, μ1
ブレーキを弱く.
0
小さい
10
0
大きい
弱く
・ファジィ判断
1
1
1
ブレーキ力
μ
μ
→滑らか
μ
・人間的演算
0
0
00
10
0
100Km/h
0 距離 100m
速度
・少ないルール
ブレーキ力
SIC-2-12
1993-2014 (c) [email protected]
12/24
知的制御システム 講義資料
課題2(Matlab)(1-1)
課題2は,ファジィ推論の定義と実行です.
Matlab から,
>> fuzzy
と入力し,ファジィ知識エディタ(FIS Editor)を起動する。
すぐに、ファイルを閉じる。そのとき、ファイル名 ics.fis で格納
ファジィ知識:ics.fis
ができる。
(中身は、骨格だけ。)
テキストとして、中身を確認
SIC-3-13
1993-2014 (c) [email protected]
13/24
知的制御システム 講義資料
課題2(Matlab)(1-2 )
>> fuzzy ics.fis
と入力し,ファジィ知識 ics.fis を編集する。
課題2では,2入力1出力なので,[編集]-[Add Variable]で入力を増やす。
Nameを、 input-X、 input-Y、 output-Z と変更し、各集合の。定義域
を、所定の値に、変更する。例として、-10~+10 としておく。
input-X [-10.0, +10.0]
input-Y [-10.0, +10.0]
output-Z [-10.0, +10.0]
とし,
XisL, XisH,
YisL, YisH,
ZisP, ZisN
のファジィ集合
を定義する.
形状Typeは、
trimf(三角形)
のままで良い。
SIC-3-14
1993-2014 (c) [email protected]
14/24
知的制御システム 講義資料
課題2(Matlab)(2)
[編集]-[Rules]で、input-X , input-Y, output-Z を選択し、ルールを定義する。
If XisL and YisH then ZisN
If XisH and YisL then ZisP
(or は、使わない。)
SIC-3-15
1993-2014 (c) [email protected]
15/24
知的制御システム 講義資料
課題2(Matlab)(3-1)
(3)入力x、yを実数値とし、論理積、論理積、論理和で出力を合成、により出力Z
のファジィ集合を求めよ。重心法により、出力Zの代表値zを求めよ。
[標準設定だが、推論方法を確認する。]
And method : min
(Or method : max)
Implication : min
Aggregation : max
Defuzzification :
centrid
以上を再度ics.fisに、
格納し、テキストとして
内容を確認せよ。
推論知識は、
これだけ、こんなに、
ある。
SIC-3-16
1993-2014 (c) [email protected]
16/24
知的制御システム 講義資料
課題2(Matlab)(4-1)
(4)入力変数を変化させ、入力x、yと出力zの関係を示せ。
[View]-[Rules] で、入力変数を変化させ、推論結果を確認する。
SIC-3-17
1993-2014 (c) [email protected]
17/24
知的制御システム 講義資料
課題2(Matlab)(4-2)
(4)入力変数を変化させ、入力x、yと出力zの関係を示せ。
[View]-[Surface] で、推論結果を確認する。視点を変え、確認する。
SIC-3-18
1993-2014 (c) [email protected]
18/24
知的制御システム 講義資料
課題2(Matlab)(補足)
今回は、ファジィ知識を記述し、計算機で、2つの入力に対して、
推論結果が得られることを確認する。
知識の内容、推論の方法は、次の課題。
下記により、作成した知識を用いて推論結果を得ることが出来る。
readfis, evalfis 等の関数は、help で確認すること。
% Rgo.m: 知識をワークスペースに格納し
% ファジィ推論結果を得る。
icsKE = readfis('ics_.fis');
disp('ics_.fisファジィ知識を知識をワークスペースicsKEへ格納しました。');
input_x1=2; input_x2=3;
input_x1
input_x2
disp('input_x1, input_x2 からの推論結果は、');
output_z = evalfis([input_x1, input_x2],icsKE );
output_z
1993-2014 (c) [email protected]
SIC-3-19
19/24
知的制御システム 講義資料
View>Surfaceの結果
fuzzy ics.fis
help readfis
help evalfis
help gensurf
kefuzzy = readfis('ics');
gensurf(kefuzzy)
output-Z
Figureのコピーで拡張メタファイルとする。
pptにて、文字の拡大、線の補強など可能。
さらに、EPSとして、TeX論文に使用可能。
3
2
1
0
-1
-2
-3
10
5
スクリーンのビットマップ
1993-2014 (c) [email protected]
0
入力-Y
-5
0
5
10
input-X
Figureコピー>拡張メタファイル> ppt
SIC-3-20
=>epsファイル
-10 -10 -5
20/24
知的制御システム 講義資料
help fuzzy (1)
Fuzzy Logic Toolbox
Version 2.2.6 (R2007b) 02-Aug-2007
Fuzzy Logic Toolbox
Version 2.1.3 (R14) 05-May-2004
GUI エディタ
anfisedit findclusterfuzzy
mfedit
ruleedit ruleview surfview -
ANFIS 訓練と検証用のUIツール
クラスタリング UI ツール
基本のFISエディタ
メンバシップ関数エディタ
ルールエディタと文法の使い方
ルールビューアとファジィ推論ダイアグラム
出力サーフェスビューア
メンバシップ関数
dsigmf
- 2つのシグモイドメンバシップ関数の差
gauss2mf - 2つのガウス曲線を合わせたメンバシップ関数
gaussmf
- ガウス曲線メンバシップ関数
gbellmf
- 一般化されたベル曲線メンバシップ関数
pimf
- π型曲線メンバシップ関数
psigmf
- 2つのシグモイドメンバシップ関数の積
smf
- S型曲線メンバシップ関数
sigmf
- シグモイド曲線メンバシップ関数
trapmf
- 台形メンバシップ関数
trimf
- 三角形メンバシップ関数
zmf
- Z型曲線メンバシップ関数
コマンドラインFIS関数
addmf
- メンバシップ関数をFISに追加
addrule
- ルールを FIS に追加
addvar
- 変数を FIS に追加
defuzz
- メンバシップ関数の非ファジィ化
evalfis
- ファジィ推論計算の実行
evalmf
- 基本的なメンバシップ関数計算
gensurf
- FIS 出力サーフェスの計算
getfis
- ファジィシステムプロパティの取得
mf2mf
- 関数間でのパラメータの変換
newfis
- 新しい FIS の作成
parsrule
- ファジィルールの文法説明
plotfis
- FIS の入力-出力ダイアグラムの表示
plotmf
- 1つの変数に依存するすべてのメンバシップ関数の表示
readfis
- ディスクから FIS の読み込み
rmmf
- メンバシップ関数を FIS から削除
rmvar
- 変数を FIS から削除
setfis
- ファジィシステムプロパティの設定
showfis
- 注釈付きで FIS の表示
showrule
- FIS ルールの表示
writefis
- FIS をディスクに保存
•アドバンスト手法
•その他の関数
•GUI補助関数
SIC-3-21
1993-2014 (c) [email protected]
21/24
知的制御システム 講義資料
help fuzzy (2)
fuzzy は、ディレクトリと関数の両方です。
FUZZY 基本的な FIS エディタ
FISエディタは、ファジィ推論システムに関する高水準の情報表示を行います。
最上部にあるのは、各入力と出力が明確にラベル付けされたシステムの
ダイアグラムです。入力、あるいは、出力ボックス上をダブルクリックすると、
Membership Function Editor を起動することができます。ダイアグラム中央の
ファジィルールボックスをダブルクリックすると、Rule Editor を起動します。
ダイアグラムの真下にあるのは、カレントの FIS名を表示するテキスト
フィールドです。ウィンドウの左下にあるのは、ファジィ含意過程で使用する
種々の関数を設定することができる一連のポップアップメニューです。また、
右下にあるのは、カレントの変数に関する情報を出力するフィールドです。
カレント変数を決定するには、入力、または、出力ボックスの1つをクリック
します。
参考 mfedit, ruleedit, ruleview, surfview, anfisedit.
1993-2014 (c) [email protected]
SIC-3-22
22/24
知的制御システム 講義資料
MatlabのFuzzy toolBox の活用<21Yasu_FuzzySet.zipを展開>1
これらのファイルは、MATLABのFuzzy ToolBox の中身を理解し、活用するために提示。
p1go.m: % sfc.fis ルールを自分で表示
f2go.m: % ファジィ知識 sfc.fis を、所定の構造体sfcRに格納し、
Yasu_FisRulePrint :ファジィルールをprintの自作関数、
Yasu_FisRes2i1o :ファジィ推論の自作関数
Yasu_FuReIn:メンバシップ値を求める関数
で、求め、さらに、meshz関数で、3次元表示。
---------------------------自作関数: Yasu_** は、MATLABで準備してある関数と混同しないよう安信のYasu_を付けた。
(なんでも良いが、特異な名前が良い。workなどはダメ。)
実システムへの適用では、c言語で、同様の演算を行う。
アルゴリズムの確認用試作などには、MATLABが便利。
SIC-3-23
1993-2014 (c) [email protected]
23/24
知的制御システム 講義資料
fk2i1o.fis
課題2のfisファイル例
% 以下をmファイル ics.fis として保存し,
% fuzzy ics.fis で実行。
[System]
Name='ics'
Type='mamdani'
Version=2.0
NumInputs=2
NumOutputs=1
NumRules=2
AndMethod='min'
OrMethod='max'
ImpMethod='min'
AggMethod='max'
DefuzzMethod='centroid'
[Input1]
Name='input-X'
Range=[-10 10]
NumMFs=2
MF1='XisL':'trapmf',[-28 -12 -8 5]
MF2='XisH':'trapmf',[-5 8 12 28]
[Input2]
Name='input-Y'
Range=[-10 10]
NumMFs=2
MF1='YisL':'trapmf',[-28 -12 -8 5]
MF2='YisH':'trapmf',[-4 8 12 28]
[Output1]
Name='output-Z'
Range=[-10 10]
NumMFs=2
MF1='ZisN':'trapmf',[-28 -12 -5 8]
MF2='ZisP':'trapmf',[-8 5 12 28]
[Rules]
1 2, 1 (1) : 1
2 1, 2 (1) : 1
1993-2014 (c) [email protected]
SIC-3-24
24/24