• 検索結果がありません。

ファジィ制御用 プログラミング言語の 開発とその応用

N/A
N/A
Protected

Academic year: 2021

シェア "ファジィ制御用 プログラミング言語の 開発とその応用"

Copied!
8
0
0

読み込み中.... (全文を見る)

全文

(1)

ファジ ィ制御用 プ ログ ラ ミング言語 の 開発とその応用

古 川 万 寿 夫   三 浦 健 史   松 田 孝 史 ( 平成 6 年 1 0月 26 日 受理)

The Programming Language for Fuzzy Control and It's Application

By Masuo Furukawa Takeshi Miura and Takashi Matsuda

Wed e s i gne dt h epr o gr a mml ngl a ng ua g ef o rf uz z yc o nt r o lu s l ngmi c r opr o c e s s o r .Thi s l a ng ua g ep em i t st ode s c r ib ei f ‑ t he nr ul ei n t ot hepr o gr a mf o r f uz z yc o n t r o l .Thi sl a ng ua g ei s e a s yt ound e r s t a ndf orf uz z yc o nt r o le ng l ne e r .Wede ve l o p edt heFu zz yt oCt r a ns l a t orwhi c h t r a ns l a t e st hi spr o gr a mml ngl a ng u a g ei n t o C l a n g u a ge .Thepr o gr a m g e ne r a t e db yt he t r a ns l a t o ri sc o mpi l e db yCc o mpi l e rt oa ppl yt ot a r g e tf orf uz z yc o nt r o l .

1. は じ め に

1 9 65 年にカ リフォルニア大学のザデー教授 ( LA.Zade h) によって, 「 ファジィ集合」が 提唱 された ( 1 ).ファジィ集合 は境界があいまいな集合であ り,人間の主観的判断や あい まいさを定量的に取 り扱 うために提案 された.

当時は,科学に主観性 を導入 したとして批判 されたが ,1 97 0 年代後半か ら人工知能やエ キスパー トシステムの研究が さかんにな り,現実問題に含 まれ る主観性や あいまい さにも 目が向けられ るようになってきた. 1 98 0 年にはデンマークのシュ ミッ ト社 によるセメン ト キル ンのファジィ制御が実用化 され ( 2 ),1 987 年 には仙台の地下鉄の 自動運転 にファジィ 制御が用い られ る( 3 ) な ど,ファジィ制御の有用性が示 された.

ファジィ制御は 「もし,制御対象 X が A の状態な らば,出力 Y を B にせ よ.」のよ うな, 直感的に理解ができるi f〜t he n ‑ルール を用いて行 う制御である.現在,ほ とん どのファ ジイ制御は,マイクロプ ロセ ッサを用いて行われている. ファジィ制御の長所のひ とつは, 制御則 を直感的に理解できることである.ところが,ファジィ制御を C 言語な どの汎用プ ログラミング言語で実現す る と,プログラムを一 目見ただけでは制御則 を直感的に理解で きないこと,汎用言語に関す る知識が必要となること,ファジィ推論のアル ゴ リズムをプ ログラムにすべて記述 しなければならないので開発 に時間がかか ることな どの不利な点が

*平成 6 年 6 月第 1 0 回ファジィシステムシンポジウムにて発表

* *電気工学科 講師

* * *京都大学工学部 在学中

* * * *九J ) 廿工業大学工学部 在学中

(2)

3 4 古川万寿夫 ・三浦健史 ・松田孝史

ある.

もし ,i f〜t he n ‑ルール形式でプログラミングできる言語があれば,ファジィ制御をお こな うためのプ ログラムを短時間で開発することができ,かつ直感的に理解 しやすいプロ グラムを作ることができる.

本研究では,マイクロプロセ ッサによるファジィ制御のプログラムを i f〜t he n‑ ・ ルール で記述できるファジイ制御用プログラミング言語を設計 した.このプログラミング言語で 記述 した ソースプログラムをC 言語に変換す る トランス レータを yacc を用いて試作 し た.そ して, トランス レータの出力 した C 言語 ソースプログラムを市販のCコンパイラで コンパイル し,オブジェク トプログラムを生成す ることができた.

2. マイクロプロセッサを用いたファジィ制御

現在,ほとん どのファジィ制御は,マイクロプロセ ッサを用いて行われている.ファ ジィ制御をマイク′ ロプロセ ッサを用いておこな う場合,C 言語などの汎用言語を用いてプ ログラミングをする.

一般にパ ソ=. ンでは,実行プログラムをハー ドディスクもしくはフロッピーディスクで 起動 し制御をお とな う.ワンボー ドマイコンの場合は,実行プログラムを ROM 化 して制 御 を夷現する.このようにパ ソコンとワンボー ドマイコンではプログラムの格納方法が異 なるが,パ ソコンや ワンボー ドマイコンを用いた制御はマイクロプロセ ッサを用いた制御 であるとい う点では同じである.

マイクロプロセ ッサを用いたファジィ制御のインターフェイスは ,A/D 変換器 と D/

A 変換器が用い られることが多い. A/D 変換器は,センサからのデータをディジタル値 に変換 してマイクロプロセ ッサ‑入力する.一方 ,D/A 変換器は,マイクロプロセ ッサ か らの出力をアナログ値に変換 して出力する.

マイクロプロセ ッサは ,A/D 変換器からのデータを入力 し,ファジィ推論をお こな う そ して,ファジィ推論により決められた制御量を D/A 変換器‑出力 し,アクチュエー タ を制御する.

このことか ら,ファジィ制御をおこな うプ ログラムは,ファジィ推論に必要な i f〜t he n

‑ルールやメンバーシップ関数の設定だけでなく ,A/D 変換器 と D/A 変換器の最大入 出力債,そ して Ⅰ / 0ポー トのア ドレスなどのインターフェイスのパラメータも設定できな ければならない.

本プログラミング言語は ,i f〜t he n ‑ルール とメンバーシップ関数のほかに,最大入出 力値および Ⅰ / 0ポー トのア ドレス甲設定ができる.

3. ファジィ制御用プログラミング言語

3‑1 仕 様

以下に,本プログラミング言語の仕様を示す.

・ 推論方式は PA F‑ MI N 合成法

・ 非ファジイ化は面積重心法

・ メンバーシップ関数は三角型が使 用できる

・ 入出力の変数は合わせて最大 5 個

表 1 予約語

入出力設定部

ハ◆ ‑シ . J 7 ' i f 〜t he n. ‑ 関数設定部 ルール設定部

・i n p ut‑. me m be rs hi p ‑ ・r ul e o ut put l a bel i f

f s l e ft t he n

po rt ‑ce nt e r is

(3)

まで

/+入出力設定

知 事 / ラベルの数は最大 7 個まで i n p ut(

t e J Z l p e

ratu

r e : f s = 40,p o rt = O x 7 0d 6;

予約語 とまった く同 じ名前の変教 ) や ラベルは使 えない

・ 変数や ラベルの長 さは最長 32 文 字まで

・ 表 1 に予約語 を示す J

' '/ * ' 'と ' '* / " で囲むことで注釈 行を記述できる

3‑2 妃述形式

プ ログラム 記述形式の説明のため,気温 を入力 とし, ダイ アル値 を出力 とす るエア コンのファジィ制御 を考えることにす る.

図 1 にこの ファジィ制御 を本プ ログラミ ング言語で記述 した 1 入力 1 出力 ファジィ 制御 の ソースプ ログラムを示す .. 本プ ログ ラミング言語 の ソースプ ログラムは,入出 力設定部,メンバー シ ップ関数設定部お よ

び if〜 then ‑ル」ル設定部の三つで構成す

る.以下に,各設定部 の記述形式について 述べる.

(1)入出力設定部

o ut p t ) tt l

di al: f S = 2 0,po rt =0 Ⅹ 7 0 d O;

)

/

*

メンバーシップ関数設定部

* /

D e E n be rs hi p ( i n p ut【

t e 【 n pe r at u re(

l a bel = P B : l ef t =3 4 , ce nt e r = 40 , ri g ht = 4 0 1 a be l = P M : 1 ef t =2 7 , ce nt e r ‑ ‑ 3 4, ri g ht = 4 0 1 a b el = P S: l ef t =2 0 , c e nt e r =27 , ri g ht =3 4 l a bel = Z R: l e f t = 13 , c e nt e r =20 . ri g ht =2 7 1 a bel = NS: l e f t =6 , c e nt e r=1 3 , ri g ht =2 0 l a bel = N M : 1 e f t =0 , c e nt e r =6 , ri g ht =1 3 l a bel = NB: l e f t =0 , c e nt e r =0, ri g ht =6

]

o ut p ut【

di al(

l a bel = P B : l e f t =1 6 . c c nt e r =20 , ri g ht = 2 0 1 a bel = P M : l e ft =1 3 . c e nt e r =1 6 , ri g ht = 2 0 l a b el = PS: l ef t =1 0 , c e nt e r =1 3 , ri g ht =1 6 l a b el = ZR: l ef t =7 . ce nt e r =1 0 , ri g ht =1 3 l a bel = NS: l ef t =4 , ce nt e r=7 , ri g ht =1 0 l a bel = N M : l e f t =0 , c e nt e r =4. ri g ht =7 1 a bel = NB: 1 e f t =O , c e nt e r =0, ri g ht =4

)

]

/*i ∫ ‑t he n

ルール設定部*/

入 出力 設 定 部 で は,入 出力変 数 の定義 ,r ul e. ! 入出力倍 の最大値 の設定お よび入出力 ポー

トのア ドレスの設定 をお こな う.図 1 の入 出力設定部 は,入力 変数 名 が temperature , 出力変数名が dial になっている.

こ こ で 用 い て い る 予 約 語 は ・ ' ' )

input 叩, 対 output 竹, 〟 fs 竹 , 〟 port ' 'の 四つである." input" は入力の設定部であ

iftezz)peratl︼reisPBthendialis

NB;

ifteznperatureisPMthendialis

NN;

if , temperatureisPSthendialisNS・; iftemperatureisZRthendialisZR; iftemperatureisNSthendialisPS; iftemperatureisNNthendialisPM,I iftemperatureisNBthendialisPB; 図 1 ェアコンのファジィ制御プ占グラム

ることを , ''output ''は出力の設定部であることを宣言する . '' fs" は , "fullscale" の略で,入出力値の最大値を設定する. ''port" は ,入出力ポートのアドレスを指定する. (2)メンバーシップ関数設定部 メンバーシップ関数設定部では,ラベルの定義と各ラベルに対するメンバーシップ関数 の形状を記述する . 図 1 のメンバーシップ関数設定部は,入出力設定部で定義した temperature,dial の変数に対してそれぞれ 7 つのメンバーシップ関数を割り付けた場合 である . ここでは , ''membership" , ''1abel" , " lef t"," center" , " right" という五つ の予約語が使われている . " membership" は , メンバーシップ関数の設定部を明示するた めの宣言である . " label" はラベルの定義をし , " left '' ,‑ ' 'cente r"そし で'right" は ,三角型メンバーシップ関数の形状を設定する. (3) if〜then‑ ルール設定部 if〜then ・・・ルール設定部では,ファ ジィ制御の制御別を if〜then・ ‑形式で記述する.

(4)

3 6 古川万寿夫 ・三浦健史 ・松田孝史

こ こで使 わ れ る予 約 語 は , " rule " , "

if" , ' ' then' '," is ' '," and" の五つで あ る." rule" は if〜 then・ ‑ルール設定部である ことを明示す るための宣言である. ' ' if ' 'は制 御則 の始ま りを," then" は前件部 と後件部の 区切 りをあらわす." and ' 'は前件部や後件部に 複数の and 条件 を列挙するときに用いる.

図 2 F u z z yt oC トランスレータ 4ニ トランス レ‑ タ F u z z yt oC

本研究では,本プ ログラミング言語 をC 言語 に変換す る トランス レー タ Fuzzy to C を試作 し た.この トランス レー タの出力す るC 言語プ ロ グラムを市販 のCコンパイラでオブジェク トプ ログラムに翻訳 し,実機制御 に用いた. ここで は,試作 した Fuzzy to C トランス レー タについ て述べる.

トランス レー タの構成 を図 2 に示す . Fuzzy t o cトランス レー タは,字句解析部,構文解析 部,デー タ抽 出部そ してプ ログラムジェネ レー タの四つからできている.

(1)字句解析部

字句解析部 は, ソースプ ログラムか ら予 約語や変数,数字な どを分離 し トー クンに 変換する.

(2) 構文解析部

#i ncl u d o く st di o.h〉

# d o f i n o ̲d z ̲

# d o f i n o ̲t ma x ̲

#do fi mo ̲t r A i r L

#d of i nB ̲C n l a X ̲

#do f i ne ̲c hi n ̲

#d of i r L O ̲nO E B f ̲ t y po d ofst r uc tI

0. 0 . 0 0. 0 . 0

i mt mi n.

co nt e r , ba Z' , ) bO l n bo r;

d o u bl eNy al uo( me Abo r事 d at a,d o u bl eA ) I d o u bl

o

a

.

b , C . co mt o r:

i mt A8X , hi m;

i f( xくd at 8‑〉 mi n H d at a‑〉 maxくx ) r et u r n ( 0 . 0);

ce E t t e r=d at a ‑ 〉 ce r L te r;

haX = d at a ‑〉 ma x:

ni n= d at 8 ‑〉 mi r t ; i f( A) = ce nt e r )

r et u m ( ( m ax ‑ ∫) /(

h

a 又‑C C nt e r) ):

ol s o

ret u r r L( ( I ‑ mi r L ) /( c e E l t e r ‑ hi r L ) );

I

y oi d附i h( v oi d ) I

he mb e rme mlLno hf 」 ≡ ( 1 3 4, 4 0 , 41 ) .

L 27 , 3 4 , 4 0) .

( 20 , 27 , 3 4 ) .

† 1 3. 2 0 , 27 ) ,

16 . 1 3 , 20) . 10.6,1 3 )

,

1.0.61日

he nbe rA l e m2L

n

o n f ̲ ]= (

1 1 6, 20. 21 1

,

1 1 3 ,1 6. 2 0 ) , 1 1 0 , 1 3 .1 6 1 .

17 , 1 0 ,1 3 I . 14 , 7 .1 0 I .

10

,

4, 7

) . ト 1 , 0 .4 日;

d o u bl o g r ad oLno E b f 」 ; d o ubl e t e n. ma x. ni n, a re a, d ̲aro a ,

J E l O he r L t .C e nt e r , YO r kl , yo r k 2. 7o r k 3;

i nt i;

f o r( t e h= lt J D i n ̲; t e mく = ‑t max ̲: t e l n + + ) f f o r( i = 0; i く ̲no mL ; i + +)

g r ad el i ]=A l y al ue(

&血

e hl【 i ] .t e n);

a re a= 0. 0;

mo me nt = 0 . 0;

fo r( yo r k1 ‑ ‑ ̲c hi n ̲‑ , yo r kl く 三 一c ha X ̲' , YO r kl + I ̲d x ̲)I n ax=0;

f o r( i = 0; i く ̲mo mL ; i + +H

yo r k 2= h I y al ue(

&m

e m 2【 i 】 , yo r kl ):

i f( yo r k 2く g rad e【 i ]) Yo r k3 = Yo r k 2:

01 5e

yo r k3 =g r ad e【 i 】;

i ∫( Yo r k3 〉 maX) ma ェ = To r k3;

) d ̲ar e a 三 Da X;

a r e a + =d ̲ ar e a;

hO I T t e nt += da ro a* YO r kl;

I i f( ar e a! = 0)

c e r L t e r =nO he mt /ar e a;

p ri nt

f

(

'

%d : % l f ¥ r L ' ,( i nt ) t e n, C e nte r );

構文解析部 は, ソースプ ログラムを解析 ) )

図 3 ェアコンファジィ制御のCプログラム

(5)

して文法に合致 しているか調べる.

(3) データ抽出部

デー タ抽 出部は,プ ログラムジェネ レータが C プログラムを生成す るのに必要な データを,構造体や配列に階層的に順序よく格納する.

(4) プログラムジェネ レータ

プログラムジェネ レータは,制御用のC プログラムを作 り出す部分である.

5. 汎用言語 との比較

ファジィ制御をお こな うプログラムを汎用言語であるC 言語で記述 した場合 と,本プ ロ グラミング言語で記述 した場合について比較評価す る.

図 1 と同等のファジィ制御をする C プ ログラムを記述すると,図 3 のように 7 3 ステ ップ となった.C 言語で記述 したプログラムの特徴は,一 目見ただけでは制御則が理解できな いこと,変数が多 くなるとプ ログラムが さらに複雑 になることである.本プログラミング 言語の場合は図 1 か ら 37 ステ ップであることがわかる ( コメン ト行を除く).本プ ログラ ミング言語では制御則が多くなるとそれだけステ ップ数が増大す るが ,i f〜t he n ‑形式の 記述なのでC 言語の場合に比べ理解 しやすいと言 える.

このことか ら本プログラミング言語を用いた方が,分か りやすいプログラムを短時間で 開発することができるといえる.

6 . 倒立振子制御への応用

本プログラミング言語の応用 として倒 立振子 制御 をお こなった. ここでは,倒立振子の実験 装置お よび制御用の ソースプログラムそ してそ の結果について述べる.,

6‑1 実験装置

実験のため製作 した倒立振子系を,図 4 に示 す.簡単化のため角度 1 入力,モータ電圧 1 出 力のファジィ制御 とした.

6‑2 ソースプログラム

制御 に用いた ソースプ ログラムを図 5 に示す.

メンバーシップ関数 は,前件部 ・後件部 ともに 等間隔に割 り当てられた三角型 とした.

図 4 倒 立振子制御系

i n p utI

e l t t gl e : fs = 25 6,po rt = O z7 0d 6 ; I

o u t p uti

mot o r : f s = 25 6,po rt = Oz 7 0d O ; I

he hb

o

r

ship i

i n put【

a ngl e(

l a bel : P B: l oft = 21 3 , c e r L t e r = 25 5. ri g ht = 25 5;

l a bel = P N : l eft = 1 71 ,c e E t t e r = 21 3, ri g ht = 25 5;

1 8 bel 三 P S: l eft : 1 2 8, c e

r

t t e r =1 71 . ri g ht 三 21 3;

l a bol = ZR: lef t = 85

.

c

erL

t B r =1 28, ri g ht =1 71;

1 8 bol = NS: l e ft :43 . c o E t t e r =85 , ri g ht =1 28;

l a bel = N N : left= 0, c e nt o r =43 , ri g ht =85;

l a bel = N B : left= 0, ce nt e r = 0, ri g ht =4 3; )

o ut p ut 【

mot o r (

l a bel = P B : l e f t = 21

3.

c e nt e r = 25 5 . ri g ht 三 25 5;

1 8 bel = P M: l e ft =

1

7l . c e nt e r = 21 3, ri g ht = 25 5;

l a bel = PS: l e ft : 1 2 8, c e r L t e r =1 71 . ri g ht = 21 3;

1 8 b e l = Z R : l e f t : 8 5 , c e r L t e r = 1 2 8 , r i g h t = 1 7 1 ;

l a b e l = N S : l e f t : 4 3 . c e E t t e r = 8 5 , r i g h t = 1 2 8 ;

l 8 bel = NM : l ef t : 0

,

c e F L t e r =43 , ri g ht =85;

l a b el = N 8 : l eft = 0, ce mt e r = 0, ri g ht =43; )

】 ) r ul oI

i f an gl oi sP Bt he nmot o ri sP B ; i f an gl ei sP Nt he nmot o ri sP M ; i f ar L gl ei sP St he t lnOt O ri sPS;

l f an gl oi sZ Rt he r tmot o ri sZ R;

l f 8n gl oi sNSt ho r Lmo t o ri sNS ; i f ang l ol sNh It he r Lmo t o rl s州 ; i f ang l ol sN8t he nRo t o rl sN B ; I

図 5 倒立振子のファジィ制御 プログラム

(6)

3 8 古川万寿夫 ・三浦健史 ・松田孝史

6‑3 結 果

F u z z yt oC トランス レー タが出力 した倒 立振子 ファジィ制御 の C プ ログラムを図 6 に 示す.この C プ ログラムを T u r b oCV e r2 . 0 でコンパイル した結果,・ オブジェク トプログ ラ ムの大 き さは 2 7 4 8 バ イ トとな った .推 論速 度 は ,P C 9 8 01 R A2 0 M Hz ( C P U を Cy ri x 製 c x 4 8 6 D L C , F P U を C y ri x 製 8 3 D 8 7 に改造)を使用 した場合 l l m s であった.

このオブジェク トプ ログラムで実機 の制御 を行 った.振子を手で持 ちなが ら直立 させた 状態か ら左 または右 に傾 ける と,台車 は振子を直立 させ るよ うに台車は動いた. しか し, 手 を放す と振子の倒立状態を保つ ことができなかった.その原因は,入力変数が角度 しか 用いていないこと,メンバーシップ関数の調整ができていなかったことであると考える.

7. L 結 論

本研究では,マイ クロプ ロセ ッサに よるファジィ制御のプログラムを i f 〜t h e n ‑ルール 形式で記述できるファジイ制御用プログラミング言語を設計 した. このプ ログラミング言 語で記述 した ソースプ ログラムを C 言語に変換す る トランス レー タ F u z z yt oC を yacc

を用いて試作 した.そ して, トランス レータの出力 した C 言語 ソースプログラムを市販 の C コンパイラでコンパイル し,オブジェク トプログラムを生成す ることができた.

応用 として,倒立振子制御 のプ ログラムをプ ログラミング言語で記述 し制御 を試みた.

その結果,直感的にわか りやすいプログラムが記述できることがわかった.

参 考 文 献

( 1 ) L . A . Z a d e h: F u z z yS e t s , I N F O R M A T I O NA N D C O N T R O L , V o l . 8 , p p . 3 3 8 ‑ 3 5 3( 1 9 6 5 )

( 2 ) E . H . Ma n l d a ni: A p pl i c at i o nso fF uz z yAl g o ri t h m sf o rC o n t r olo f Si m pl eD y n a mi c Pl a nt ,P r o c .土 E E ,γ ol .1 21 , N o .1 2 , p p. 1 5 8 5 ‑1 5 8 8( 1 9 7 4 )

( 3 ) 安信誠二 :フ ァジ ィ推論 を利 用 した列車 自動運転,情報処理 ,γ ol . 3 0 ,N o . 8 , p p . 9 7 0 ‑ 9 7 5( 1 9 8 9 )

#i E t Cl ud oく st d i o . h〉

#i ACl ud oく do s . h〉

#d efi ne l e f t 0

#d e fi no ce nt e r I

‡d efi ne ri g ht 2

#d e fi no n u J n be r 3

voi d y al ue( i n暮xl ,i mt J : 2.d o u bl e+ a. do ubl e*b) I

+a=

l . 0/( ェ 2‑ xl );

*b=‑(+a)

書 ス1;

)

do ubl ei n ‑

y

al( i t l ta rg u he nt .i nti r Ld at aH【 4】 ,i m td at a) I

i n t x;

d o u bl o a. b;

i f( d at aくi n ̲d at al a rgun e n t ]l l e f t ]II i n ̲d at al a rg u J n e nt 】【 ri g ht ] く d at a ) rot u r n( 0 . 0):

よ=( d at aくi n ̲d at a【 a rg u me n t ]【 ce mt e r] ) ?i n ̲d at al a rg u 血e nt

【 l ef t ]: i n ̲d at al arg u me nt ]【 ri g ht ];

V al uo( ェ,i n ̲d at a【 a rg u me n t ]

l

ce mt e r] ,

&a

, &b):

r e t um ( d at a * a+ b):

I

yoi do ut ̲v at( i ntarg u me r L t ,i r L tO ut ̲d at a【 】【 4] , do u bl eg r ad e ,i ntf s ,d o u bl eo ut[ 】【 2 5 6] ) I

i m t i , s mall ,l ar g e:

d o u bl e xl . x 2, al , 82 , bI , b 2' ,

(7)

Y 8l ue( o uLd at al a rg u he r L t ]【 l eft 】 . o ut ̲d at al dr g

u

n e nt 】【 ce nt e r ]

.A

al , &bl );

zl =( g r a d ㊤ ‑ bl ) /al;

Y al uo( o ut ̲d at a[ ar g un e mt 】【 ri g ht ] ,o uLd at 8【 a r g u me nt 】【 ce nt e r]

,

&a 2 , Ab2);

x 2 =( g r ad e ‑b 2) / 82;

s m al l =( 0く o ut ̲d 8t al a rg u nや r L t 】【 l ef t] ) ?o ut ̲d at a

a

rgu

n e r L t ]【 l of t 】: 0;

1 8 rg O =( o ut ̲d at a【 a rg u me nt 】【 ri g ht ] くf s) ?o ut ̲d a t a【 ar g U J n e nt]【 ri g ht ]: f s;

f o r( i =s T n al

l:

i くI ar g oH++ H i f( ( d o u bl

o

)i く xl H

i f( o ut【 o ut ̲d at a【 ar

g

ⅧO nt 】

nu 九be r 】 】【 i 】 く al +i + bl H

o ut〔 out ̲d at al ar g un e r L t 】

r L u mbo r]]l i ] =( al ●i + bl くg r ad e) ? al +i + bl: gr ad e;

) )

ol soi f( ( do u bl o )l 〉 = x 2H

i f( o ut〔 o ut ̲d a t a【 ar g u me nt ]【 r t u mbe r ] ]l i 】 く 8 2 ◆i + b 2 日

o ut〔 out ̲d at al arg u J n e mt ]

l

h u mbe r】】【 i 】 =( 8 2 *i + b 2くg r ad e) ? a 2+i + b 2: g r ad e;

) )

el sei f( o ut〔 o ut ̲d at al a r g u me r t t]

r

L un be r] ]l i ] く g r ad e) o u t〔 o ut ̲d at a

l

8 rg ume n t 】【 n t mbe r ] ]l i ] =g r a do' , I

I

unsi g r t e dc h arg c ha r( yoi d) I

A H= 6;

D L = Oxf f;

ge z t i nt e r r u pt( O x 2 1 );

ro t ur m̲AL;

)

voi dmai n( y ci d ) I

st ati ci nti r L jun c日【 4】 =1

21 3 , 25 5. 25 6 , 0 . 1 71 , 21 3. 255 . 0 , 1 28,1 71 , 21 3 , 0 ,

】85 ,1 2 8.1 71 . 0 . 4 3, 85 .1 28 , 0 , 0, 43 . 85 . 0 ,

‑I . 0, 43 . 0 ,

)

; st ati ci nto ut ̲f u ncl ][ 4] :i

21 3. 255 , 25 6 , 0 , 1 71 , 21 3, 25 5 , 0 , 1 28,1 71 . 21 3 . 0 . 85 .1 2 8,1 71 . 0 , 43 , 85 ,1 2 8. 0, 0 .43 . 85 , 0 ,

‑1 , 0. 4 3 , 0 , ) ; st a ti cl o ngi r L ti n ̲po rt【 ]【 2]=t

st ati cl o E t gi nto ut ̲po rtl ][ 2] =〈

st at i ci nti n ̲r ul e ‑d at al ] ‑ I(

st ati ci r t to ut ̲r ul e ̲d at al ] =t

25 6, 28 88 6

, I;

25 6, 2 888 0 , );

0 1 2 3 4 5 6 1J O 1 2 3 4 5 6

(8)

4 0

s t ati ci r L ti n ̲r ul e ̲co u ntl ] =1

古川万寿夫 ・三浦健史 ・松田孝史

st ati ci mtouLr ul e ̲c o u r L tH=t

l1‑l11I

II

111‑111

1 ヽ‑.

d o u bl eg r a de , I. Y , X Y:

d o u bl oo u t【 1 ]【 25 6】;

i nti .j .i n p ut ̲d a t a,o ut p ut ̲ar g uE D e r L t ,i r t put【 1 】;

i r L ti n ̲s

t

u n . o ut ̲s

um

; i E t tO ut p ut;

o ut po rt b( o ut ̲po r tl 0]l l ] .1 28);

o ut po rt b( i r u) o rtl 0]l l ] . 0);

p ri nt f( ' p us h' q'ke yi fy o uya ntt oq u

i

t YE t ' );

W hi l e( gc h a r( ) ! = ' q' &&g c h a r( )

!

= '

Q

' H

yhi l o( ( i n po rt b( 0又 7 0d O) 1 0 x O8日= 0);

i np u t【 0】 =i m p o rt b( i n 」〉 o r t【 0]【 1 1 ):

i f( i t LPO rtl 0][ 0] (i r L P utl 0] H

pri ntf( 'i n p utda t ai 8O utOfr ar L gO! ■ );

o ut po r t b( o u Lpo rt【 01【 1 1 ,1 28);

○ Xl t( 1 );

)

o ut p o rt b( i n ̲po rt【 0 1【 1 】 . 0);

i r

L

S u m=o ut ̲S u m= 0;

f o r( i = 0; i く1; i ++)

r o r( j ニ 0; jく o u t 」⊃ o rt【 i 】【 0】; j + +) o utl i ]l j ] = 0;

r

o r( i = 0: i

7

;i++)I

g r ad e =1 . 0;

f o r( j = 0; jく i n ̲r u l e ̲co u nt【 i ]; j + +)l

i np ut ̲d at a=i r L P ut【 i r L ju nc【 i n Jul o ̲d at a【 i n ̲s u n】 】

h

u

h

b

er】】;

x =i r L ̲Y al( i r L ̲r ul o ̲d at al i E

LSuA+

+

]

,i n ̲f unc ,i E t p ut ̲dat a );

i f( xく g r ad e )g rad e = J : ; )

f o r( i : 0; j( o u t ̲r ul e ̲c o untl i ]; i + +)I

o ut put ̲a rg

uJ

t e r L t =o ut ̲f u ncl o ut ̲r ul o ̲d at a〔 o ut ̲

S

ut ]]

h

u Abo r ]:

o ut ̲v al( o ut ̲r ul o ̲d at al o ut ̲s

uJn+

+

]

. o u t Ju nc , g r a d e

,

o ut ̲po rtl o ut p ut ̲a

r

g

u

me nt 】【 0】 , o ut )

;

)

)

!

o r( i 三〇; i く1; i +十日 Y = XY = 0 . 0:

f o r( j = 0; i( o uLp o rtt i ][ 0]: i + +)I XY+:( ( i +

I

) +o utl i ]l j ]);

Y +=o ut【 i ] 【 j 】;

I i f( Y = = 0日

p ri nt f( ' t he r ei sE l °rul et ofi tyi t t tt h ei n p utd at a.

Y

n

〝);

pri

rL

t f( ' pl e as ec he c kt herul e s! Yn' );

o ut po rt b( o ut 」) o rモ【 0】【 1 ] ,1 28);

e xi t( 1 );

I

o ut pu t =( i n t )( XY / Y ‑1 . 0);

o ut p o r t b( o u Lpo r t【 i 】【 1 〕 . o ut p ut );

) I

o ut p ort b( o ut ̲po rt[ 0〕【 1 ] ,1 2 8);

図 6 Fuzzy to C トランス レータが出力 した倒立振子のCプログラム

参照

関連したドキュメント

プログラミングのための言語や手法は数多く存在し,その中の一つに,

次のような分類の仕方もあります。 これは、プログラムをコンピュータが実行できる形に変換する方式

図 1: エデ ィター emacs の実行方法.hoge.c という C

Waquema(Web-aided Question Master) は,入力された ソースコードからプログラミング言語の問題を自動生成 し,図 3

C 言語プログラミング学習における 制御文を中心とした要約生成ツールの提案 2016SE045 栗田裕生 2016SE083 富田佑太郎

(1)にかかわJJず,耽与望のアセンブラコーーチヤ ン

まず,申請者は研究の背景として次の点を指摘している.近年,コンピュータを組み込

FRACTRAN 言語のチューリング完全性を通じて,一般化 3x+1 問題(コラッツ予想)が決定不能問題で