![]() |
状態機械の出力 |
|
目次 |
状態機械 (X,S,f) を考えます。 また、集合 Y と、S からY への写像 g を別に考えましょう。 Y を出力集合(a set of outputs)といい、g を出力関数(output function) といいます。Y はその名の通り、状態機械から出力される出力の種類を表わします。 出力は状態を加工して作られると考えます。その加工の仕方がgで表わせるのです。 5つ組(X,S,f,Y,g)を出力をもつ状態機械(state machine with output)または Moore(ムーア)型の状態機械(Moore type state machine)、といいます。 出力をもつ状態機械の例を見ていきましょう。 例1 前章の最後の例(例5)にあった、自動販売機を考えましょう。その内部状態は (k1,k2,k3,k4,k5,n,w,x) のように7つ組で表わせました。 今、この自動販売機に、各缶が無くなったら、「売り切れ」という表示を付けたいと します。その為に5つのランプが必要です。それらのON,OFFは1、0で表わせます ので、(L1,L2,L3,L4,L5)の5つの数(それぞれは1または0)の組がこの出力を表わします。 従ってYは、{0,1}×{0,1}×{0,1}×{0,1}×{0,1} という5個の集合の直積に なります。また出力関数、g は、 g((k1,k2,k3,k4,k5,n,w,x))=(L1,L2,L3,L4,L5) のように書けるはずですが、ここに、L1は次の式を満たします。 L1=1 ......k1=0のとき =0 ......その他のとき L2,L3,L4,L5についても同様です。 あるいは δ0(x)=1 ......x=0のとき =0 ......その他のとき という関数δ0を導入すれば g((k1,k2,k3,k4,k5,n,w,x))=(δ0(k1),δ0(k2),δ0(k3),δ0(k4),δ0(k5)) とシンプルに書くこともできます。gが状態集合Sから出力集合Yへの写像になっている ことを理解してください。 例2 やはり前章にあったお猿のタンバリン人形(例3)について考えましょう。もしタンバリンが 叩かれた瞬間に、お猿の帽子の上のランプが点くようにするにはどうしたらいいでしょうか? ランプは一つだけですから、Y={0,1} となります。叩かれた瞬間の内部状態は(1,0) でしたから(前章例3で説明済み)、 g((x,y))=1 ......x=1 and y=0 のとき =0 ......その他のとき という出力関数を考えればいいことになります。 注: 出力は内部状態のみで決まるようにすることが原則です。例えば上のタンバリン の例で、お猿の腕が動いているときのみランプをつけようとすれば、内部状態だけからは 出力を決められないのです(内部状態は両手の間隔の長さと往きか帰りかの情報しか 持っていません。動いているときでも止まっているときでも同じ状態になりえます)。 従ってこのようなときは、入力の情報(スイッチの入力xがonかoffか)を出力のために 利用すればいいのです。一般に出力関数gを、X×S から Y への写像、と考えるとき、 (X,S,f,Y,g)をMealy(ミーリー)型の状態機械といいます。 しかしMoore型だけを考えればMealy型を考えなくてすみます。その理由は 内部状態に変数xを付け加えて、元の内部状態をsとしたとき(x,s)を新しい状態と 考えます。そして元の状態遷移関数をfとしたとき、新しい遷移関数f’を f’((x0,(x,s))) = (x0,f(s)) とすれば、Moore型でMealy型と同じ出力を出すことができます。 タンバリンの例ですと、(1,(cos θ,sin θ)) というのは動いている状態、 (0,(cos θ,sin θ))というのは止まっている状態になります。従って出力関数はg g((x,(cos θ,sin θ)) =1 ...x=1,cos θ=1 and sin θ=0 のとき =0 ...その他のとき とすれば動いているときだけ叩いた瞬間に点灯するランプの出力が得られるのです。 |