有限オートマトン(ゆうげんオートマトン、英: finite automaton)または有限状態機械(ゆうげんじょうたいきかい、()英: finite state machine, FSM)とは、有限個の状態と遷移と動作の組み合わせからなる数学的に抽象化された「ふるまいのモデル」である。デジタル回路やプログラムの設計で使われることがあり、ある一連の状態をとったときどのように論理が流れるかを調べることができる。有限個の「状態」のうち1つの状態をとる。ある時点では1つの状態しかとらず、それをその時点の「現在状態」と呼ぶ。何らかのイベントや条件によってある状態から別の状態へと移行し、それを「遷移」と呼ぶ。それぞれの現在状態から遷移しうる状態と、遷移のきっかけとなる条件を列挙することで定義される。
有限オートマトンは様々な問題に応用でき、半導体設計の自動化、通信プロトコル設計、構文解析などの工学面での応用がある。生物学や人工知能研究では状態機械(群)を使って神経系をモデル化し、言語学では自然言語の文法をモデル化したりする。 状態[注 1]は、システムの振る舞いのノードであり、システム内で遷移[注 2]を実行するトリガーを待っている。一般に状態は、同じトリガーに対してシステムの反応が常に同じではない場合に導入される。例えば、カーラジオのシステムでは、特定のラジオ局の放送を聴いている状態で「次へ」というトリガーは次のラジオ局(の放送受信)への移行を意味する。しかし、CDプレーヤーのシステムでは、「次へ」は次のトラックへの移行を意味する。これらは、同じトリガーであっても現在状態によって異なる動作を引き起こす。一部の有限オートマトンの表現では、次のように動作[注 3]と状態を対応付けることもある。 遷移[注 6]は、条件が満たされたときまたはイベントを受信したときに実行される動作の集合である。 有限オートマトンについてその振る舞いを直接的に、状態をノード(節)とし遷移をエッジ(辺あるいは矢印)とした、ネットワーク構造(グラフ理論・グラフ (データ構造) )の図にしたものが状態遷移図である。 有限オートマトンについて、その遷移規則(関数)を表にしたものが状態遷移表である。現在の状態(例えばB)と入力(例えばY)の交差するところに次の状態(例えばC)を示す。以下にごく単純な一例を示す。 状態遷移表現在状態 → 統一モデリング言語(UML)には状態機械(ステートマシン)を記述するための豊富な意味論と記法がある。UMLの状態遷移図は従来の有限オートマトンの主な利点を踏襲しつつ、その欠点を克服している。大きな拡張としては、状態の階層化や直交状態の導入があり、動作の記法も拡張されている。ミーリ・マシンもムーア・マシンも記述できる。ミーリ・マシンのように状態だけでなく、イベント(入力)をきっかけとして遷移するようにも書けるし、ムーア・マシンのように遷移ではなく状態と開始動作や終了動作を対応付けることもできる。 仕様及び記述言語(SDL) はITUの標準規格であり、遷移の際の以下のような動作を表す記号を定義している。 SDLには、Abstract Data Types と呼ばれる基本データ型、動作言語、有限状態機械を実行可能にするための実行意味論を埋め込む。 有限オートマトンには他にも様々な表現方法があり、例えば図3もその一種である。 ここで示しているような反応性システムの設計だけでなく、有限オートマトンは電気工学、言語学、計算機科学、哲学、生物学、数学、論理学など様々な領域で利用される。有限オートマトンはオートマトン理論や計算理論で研究される一種のオートマトンである。情報工学や計算機科学では、アプリケーションの動作のモデリング、デジタルシステムのハードウェア設計、ソフトウェア工学、コンパイラ設計、通信プロトコルの設計、計算と言語に関する研究などで幅広く活用されている。 有限オートマトンは二種類に分類される。アクセプタ / リコグナイザとトランスデューサである。 このタイプの有限オートマトンは入力を受容(accept)したり、理解(recognize)して、外界に結果を知らせるために状態(state)を使用する。つまり、最終的に受容状態になったかどうかで「はい」または「いいえ」のいずれかを出力として返す。FSMの全状態は受容状態かそうでないかのいずれかである。全入力を処理したとき状態が受容状態なら、その入力は受容されたことになり、さもなくば拒絶 / 却下されたことになる。基本的に入力は記号(または文字)であり、動作(action)は使用されない。図4 に示した例は "nice" という単語を受容する有限オートマトンを示している。この場合、6番だけが受容状態である。 この機械は言語を定義するものとして説明することもできる。その言語とは、その機械が受容する全ての単語から構成され、それ以外の単語を全く含まないもので、そのような言語をその機械が「受容 / 受理」すると称する。定義から、FSM が受理する言語は正規言語であり、逆にある言語を受理する FSM が存在する場合、その言語を正規言語と称する。 初期状態は、一般にどこからも矢印で指されていない状態である[1]。 受容状態は、その機械が手続きを成功裡に完了させた状態である。通常、二重丸で表現される。 図5の決定性有限オートマトン (DFA) は2進数の入力が偶数個の 0 を含むときに受容することを示している。S1 は初期状態でもあり、受容状態でもある。この機械は入力数列に"0"が偶数個含まれるときのみ正しく終了したと判定され、0個も偶数なので"0"が全く含まれない数字列も受容される。このDFAが受容する文字列の例としては、ε(空文字列)、1、11、00、010、1010、10110、などなどがある。 トランスデューサ(変換機、transducer)は、与えられた入力と動作を伴う状態(両方または一方)に基づいて出力を生成する。このタイプの有限オートマトンは計算言語学の分野や制御などに使われる。また、トランスデューサは二種類に分類される。 実際には、これらを混合したモデルがよく使用される。 ムーア・モデルとミーリ・モデルの違いの詳細は、実施例も含めて外部サイトの ⇒"Moore or Mealy model?"にある(ただし英語)。 さらなる分類方法として、決定性有限オートマトン (DFA) と非決定性有限オートマトン (NFA, GNFA) がある。決定性有限オートマトンでは、各状態の考えられる全ての入力について一意に次の状態が決定される。
概念と用語
開始[注 4]動作: その状態に入るときに行う動作
終了[注 5]動作: その状態から出るときに行う動作
表現図1 UML状態遷移図の例図2 SDL ステートマシン図の例図3 単純な有限オートマトンの例
状態遷移図詳細は「状態遷移図」を参照
状態遷移表
入力 ↓状態A状態B状態C
入力X.........
入力Y...状態C...
入力Z.........
UMLステートマシン
SDLステートマシン
イベント送信
イベント受信
タイマ開始
タイマキャンセル
別の並行動作するステートマシンを開始
判断
他の状態図
用途
分類図4 アクセプタFSM: "nice"を語句解析する図5 受容状態の例。この有限オートマトンは入力数列内の"0"の個数が偶数個かどうかを判断する。S1は0が偶数個のときの受容状態である。
アクセプタ / リコグナイザ
初期状態 / 開始状態
受容状態 / 受理状態
トランスデューサ図6 トランスデューサFSM: ムーア・モデルの例図7 トランスデューサFSM: ミーリ・モデルの例
ムーア・マシン
この有限オートマトンは開始動作のみを使用する。すなわち、出力は状態にのみ依存する。ムーア・モデルの利点はふるまいを単純化できることである。図6の例はエレベーターの扉についてのムーア・マシンを示している。この有限オートマトンは「開放命令」と「閉鎖命令」というふたつの命令を理解し、それによって状態が変化する。「開放途中」状態にある開始動作(E:)は扉の開くところを監視し始めることを示し、「閉鎖途中」状態にある開始動作(E:)は扉の閉じるところを監視し始めることを意味する。「開放」と「閉鎖」状態は動作を伴わないが、これらは外界(つまり他のオートマトン)に扉が開いているとか閉まっているといった状況を知らせる意味を持つ。
ミーリ・マシン
この有限オートマトンは入力動作のみを使用する。すなわち、出力は入力と状態に依存する。ミーリ・モデルは状態の数を減らす作用がある。図7の例はムーア・マシンの例と同じものをミーリ・マシンで実装したものを示している(実装された有限オートマトンのふるまいは実行モデルに依存する。例えば仮想有限状態機械
決定性
Size:41 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef