(57)【要約】【課題】処理負担を増加させることなく、割込プラン実行後に中断したゴールを達成するプランを再開することのできるプラン実行装置を提供する。【解決手段】プラン実行装置であって、割込ゴールを取得した場合に、実行中のプランの実行を中断し、実行中プラン保持手段１６４に保持されているプランを中断中プラン保持手段１６６に退避させ、かつプラン作成手段１５０により作成された割込プランを実行中プラン保持手段１６４に保持させるプラン実行制御手段１６０と、実行内容に基づいて中断中プラン保持手段１６６が保持しているプランの内容を更新するプラン更新手段１２０と、割込プランの実行を完了した場合に、中断中プラン保持手段１６６のプランを実行中プラン保持手段１６４に移動し、実行中プラン保持手段１６４に保持されているプランの実行を再開するプラン再開制御手段１２０とを備えた。【選択図】        図１
2007048094.tif 000002
【特許請求の範囲】
【請求項１】
ある目的を示すゴールを達成するプランを実行するプラン実行装置であって、
前記ゴールを達成可能なプランを保持する実行中プラン保持手段と、
前記実行中プラン保持手段に保持されている前記プランを実行するプラン実行手段と、
前記プラン実行手段が実行を中断したプランを保持する中断中プラン保持手段と、
前記プラン実行手段が前記プランを実行中に、割り込みにより前記ゴールに優先して達成すべき割込ゴールを取得するゴール取得手段と、
前記ゴール取得手段が取得した前記割込ゴールに基づいて、当該割込ゴールを達成するために実行すべき割込プランを作成するプラン作成手段と、
前記ゴール取得手段が前記割込ゴールを取得した場合に、前記プラン実行手段が実行中のプランの実行を中断し、前記実行中プラン保持手段に保持されているプランを前記中断中プラン保持手段に退避させ、かつ前記プラン作成手段により作成された前記割込プランを前記実行中プラン保持手段に保持させるプラン実行制御手段と、
前記プラン実行手段が前記割込プランを実行した場合に、実行内容に基づいて前記中断中プラン保持手段が保持しているプランの内容を更新するプラン更新手段と、
前記プラン実行手段が前記割込プランの実行を完了した場合に、前記中断中プラン保持手段に保持されている更新後のプランを前記実行中プラン保持手段に移動させた後、前記実行中プラン保持手段に保持されている前記プランの実行を再開するプラン再開制御手段と
を備えたことを特徴とするプラン実行装置。
【請求項２】
前記実行中プラン保持手段は、同一のゴールを達成可能な複数のプランを保持し、
前記プラン実行手段は、前記実行中プラン保持手段が保持している複数のプランのうちあるプランを実行し、
前記プラン実行制御手段は、前記プラン実行手段が実行中のプランの実行が中断された場合に、前記実行中プラン保持手段に保持されている複数のプランを前記中断中プラン保持手段に退避させ、
前記プラン更新手段は、前記プラン実行手段が前記割込プランを実行した場合に、実行内容に基づいて、前記中断中プラン保持手段が保持している複数のプランそれぞれの内容を更新し、
前記プラン再開制御手段は、前記プラン実行手段が前記割込プランの実行を完了した場合に、前記中断中プラン保持手段に保持されている、更新後の複数のプランを前記実行中プラン保持手段に移動させた後、前記実行中プラン保持手段に保持されている前記複数のプランのうちあるプランの実行を再開することを特徴とする請求項１に記載のプラン実行装置。
【請求項３】
前記実行中プラン保持手段が保持している複数のプランそれぞれの実行コストに基づいて、前記複数のプランのうちから前記プラン実行手段が実行すべきプランを選択するプラン選択手段をさらに備え、
前記プラン実行手段は、前記プラン選択手段によって選択された前記プランを実行することを特徴とする請求項２に記載のプラン実行装置。
【請求項４】
前記プラン更新手段は、前記プラン実行手段が前記実行中プラン保持手段に保持されている複数のプランのうちあるプランを実行した場合に、実行内容に基づいて前記実行中プラン保持手段が保持している複数のプランそれぞれを更新することを特徴とする請求項２または３に記載のプラン実行装置。
【請求項５】
前記プランおよび前記割込プランは、それぞれ前記プラン実行手段における実行単位であるアクションを複数含み、
前記プラン実行手段は、前記割込プランを前記アクション単位で実行し、
前記プラン更新手段は、前記中断中プラン保持手段が保持している前記プランに含まれるアクションのうち最初に実行されるべきアクションである先頭アクションと、前記プラン実行手段により実行された前記割込プランの前記アクションとが同一である場合に、前記中断中プラン保持手段が保持している前記プランから前記先頭アクションを削除することを特徴とする請求項１から４のいずれか一項に記載のプラン実行装置。
【請求項６】
前記プラン更新手段が前記中断中プラン保持手段が保持している前記プランから前記先頭アクションを削除した場合に、削除後の前記プランから少なくとも次の先頭アクションを生成するアクション生成手段と、
前記アクション生成手段が生成した前記アクションを実行するための条件であって、かつ前記対象オブジェクトの状態に関する条件である実行前条件を、前記アクション生成手段によって生成された前記アクションに付与する実行前条件付与手段と、
前記プランの実行の対象となる対象オブジェクトの状態を示す状態情報を保持する状態情報保持手段と
をさらに備え、
前記プラン更新手段は、前記状態情報保持手段が保持する前記状態情報が前記実行前条件付与手段によって付与された前記実行前条件を満たさない場合に、前記実行前条件が付与された前記アクションを含むプランを前記中断中プラン保持手段から削除することを特徴とする請求項５に記載のプラン実行装置。
【請求項７】
前記実行中プラン保持手段は、前記プラン作成手段により同一の前記割り込みゴールに基づいて作成された複数の割込プランを保持し、
前記プラン更新手段は、前記プラン実行手段が前記割込プランを前記アクション単位で実行すると、前記実行中プラン保持手段が保持している前記割込プランのうち、前記プラン実行手段により実行された割込プラン以外の割込プランに含まれる先頭アクションと、前記プラン実行手段により実行された前記割込プランのアクションとが同一である場合に、前記実行中プラン保持手段が保持している前記割込プランのうち、前記プラン実行手段により実行された割込プラン以外の前記割込プランから前記先頭アクションを削除することを特徴とする請求項５または６に記載のプラン実行装置。
【請求項８】
前記アクション生成手段は、前記プラン更新手段が前記実行中プラン保持手段が保持している前記割込プランから前記先頭アクションを削除した場合に、削除後の前記割込プランから少なくとも次の先頭アクションを生成し、
前記実行前条件付与手段は、前記アクション生成手段が前記割込プランから生成した前記アクションの前記実行前条件を、前記割込プランから生成した前記アクションに付与し、
前記プラン更新手段は、前記状態情報保持手段が保持する前記状態情報が前記実行前条件付与手段によって付与された前記実行前条件を満たさない場合に、前記実行前条件が付与された前記アクションを含む前記割込プランを前記実行中プラン保持手段から削除することを特徴とする請求項７に記載のプラン実行装置。
【請求項９】
前記アクション生成手段は、前記状態情報保持手段が保持している前記状態情報に基づいて、前記アクションを生成することを特徴とする請求項６から８のいずれか一項に記載のプラン実行装置。
【請求項１０】
前記アクションの実行による効果を示す実行効果を、前記アクションに付与する実行効果付与手段と、
前記プラン実行手段が前記アクションを実行する度に、前記アクションに付与された前記実行効果に基づいて、前記状態情報保持手段が保持する前記状態情報を更新する状態情報更新手段と
をさらに備え、
前記プラン更新手段は、前記状態情報更新手段により更新された後の前記状態情報が前記実行前条件を満たすか否かを判断することを特徴とする請求項６から９のいずれか一項に記載のプラン実行装置。
【請求項１１】
前記プランおよび前記割込プランは、それぞれ前記アクション実行手段における実行単位であるアクションを複数含み、
前記プラン実行手段は、前記割込プランをアクション単位で実行し、
前記プラン更新手段は、前記プラン実行手段が前記アクションの実行に失敗した場合に、前記中断中プラン保持手段が保持している前記プランに含まれるアクションのうち最初に実行されるべきアクションである先頭アクションと、前記プラン実行手段が実行に失敗した前記割込プランの前記アクションとが同一である場合に、前記中断中プラン保持手段が保持している前記プランであって、前記割込プランの前記アクションと同一の前記先頭アクションを含む前記プランを削除することを特徴とする請求項１から４のいずれか一項に記載のプラン実行装置。
【請求項１２】
前記実行中プラン保持手段は、前記プラン作成手段により同一の前記割り込みゴールに基づいて作成された複数の割込プランを保持し、
前記プラン更新手段は、前記プラン実行手段が前記アクションの実行に失敗した場合に、前記実行中プラン保持手段が保持している前記割込プランに含まれる前記先頭アクションと、前記プラン実行手段が実行に失敗した前記割込プランのアクションとが同一である場合に、前記実行中プラン保持手段が保持している前記割込プランであって、前記割込プランの前記アクションと同一の前記先頭アクションを含む前記割込プランを削除することを特徴とする請求項１１に記載のプラン実行装置。
【請求項１３】
ある目的を示すゴールを達成するプランを実行するプラン実行方法であって、
前記ゴールを達成可能なプランを保持する実行中プラン保持手段に保持されている前記プランを実行するプラン実行ステップと、
前記プラン実行ステップにおいて前記プランを実行中に、割り込みにより前記ゴールに優先して達成すべき割込ゴールを取得するゴール取得ステップと、
前記ゴール取得ステップにおいて取得した前記割込ゴールに基づいて、当該割込ゴールを達成するために実行すべき割込プランを作成するプラン作成ステップと、
前記ゴール取得ステップにおいて前記割込ゴールを取得した場合に、実行中のプランの実行を中断し、前記実行中プラン保持手段に保持されているプランを前記中断中プラン保持手段に退避させ、かつ前記プラン作成ステップにおいて作成された前記割込プランを前記実行中プラン保持手段に保持させるプラン実行制御ステップと、
前記割込プランを実行した場合に、実行内容に基づいて前記中断中プラン保持手段が保持しているプランの内容を更新するプラン更新ステップと、
前記割込プランの実行を完了した場合に、前記中断中プラン保持手段に保持されている更新後のプランを前記実行中プラン保持手段に移動させた後、前記実行中プラン保持手段に保持されている前記プランの実行を再開するプラン再開制御ステップと
を有することを特徴とするプラン実行方法。
【請求項１４】
ある目的を示すゴールを達成するプランを実行するプラン実行処理をコンピュータに実行させるプラン実行プログラムであって、
前記ゴールを達成可能なプランを保持する実行中プラン保持手段に保持されている前記プランを実行するプラン実行ステップと、
前記プラン実行ステップにおいて前記プランを実行中に、割り込みにより前記ゴールに優先して達成すべき割込ゴールを取得するゴール取得ステップと、
前記ゴール取得ステップにおいて取得した前記割込ゴールに基づいて、当該割込ゴールを達成するために実行すべき割込プランを作成するプラン作成ステップと、
前記ゴール取得ステップにおいて前記割込ゴールを取得した場合に、実行中のプランの実行を中断し、前記実行中プラン保持手段に保持されているプランを前記中断中プラン保持手段に退避させ、かつ前記プラン作成ステップにおいて作成された前記割込プランを前記実行中プラン保持手段に保持させるプラン実行制御ステップと、
前記割込プランを実行した場合に、実行内容に基づいて前記中断中プラン保持手段が保持しているプランの内容を更新するプラン更新ステップと、
前記割込プランの実行を完了した場合に、前記中断中プラン保持手段に保持されている更新後のプランを前記実行中プラン保持手段に移動させた後、前記実行中プラン保持手段に保持されている前記プランの実行を再開するプラン再開制御ステップと
を有することを特徴とするプラン実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プラン実行装置、プラン実行方法およびプラン実行プログラムに関するものである。
【背景技術】
【０００２】
従来、あるタスク列であるプランを実行中に、他のプランの割り込みが行われる場合がある。この場合に、割込プランの実行を管理する方法としてスケジューリング方式が知られている。このスケジューリング方式としては、例えば、複数の割り込みがあった場合には、これらの優先順序をつけるものが知られている（例えば、「特許文献１」参照）。
【０００３】
さらにある達成すべき目的であるゴールを達成するためのプランを実行しているときに、割り込みにより他のプランを実行した場合であっても、ゴールが達成されるようなプランニングが望まれている。
【０００４】
【特許文献１】特開平０６−１８７１７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、割り込みにより他のプランを実行した後で、ゴールが達成されるようなプランを再度プランニングした場合には、割り込みにより実行したプランを含むプランを作成してしまう可能性がある。
【０００６】
この問題に対応するためには、実行済みのプランの履歴を保持することが考えられるが、履歴を保持する処理が必要であり、また、実行済みのプランを実行するのを避けるためのルールを作成する必要があり、処理量が増加するという問題があった。
【０００７】
本発明は、上記に鑑みてなされたものであって、処理負担を増加させることなく、あるゴールを達成するためのプランを中断し、他の割込プランを実行した後でゴールを達成するプランを再開することのできるプラン実行装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、ある目的を示すゴールを達成するプランを実行するプラン実行装置であって、前記ゴールを達成可能なプランを保持する実行中プラン保持手段と、前記実行中プラン保持手段に保持されている前記プランを実行するプラン実行手段と、前記プラン実行手段が実行を中断したプランを保持する中断中プラン保持手段と、前記プラン実行手段が前記プランを実行中に、割り込みにより前記ゴールに優先して達成すべき割込ゴールを取得するゴール取得手段と、前記ゴール取得手段が取得した前記割込ゴールに基づいて、当該割込ゴールを達成するために実行すべき割込プランを作成するプラン作成手段と、前記ゴール取得手段が前記割込ゴールを取得した場合に、前記プラン実行手段が実行中のプランの実行を中断し、前記実行中プラン保持手段に保持されているプランを前記中断中プラン保持手段に退避させ、かつ前記プラン作成手段により作成された前記割込プランを前記実行中プラン保持手段に保持させるプラン実行制御手段と、前記プラン実行手段が前記割込プランを実行した場合に、実行内容に基づいて前記中断中プラン保持手段が保持しているプランの内容を更新するプラン更新手段と、前記プラン実行手段が前記割込プランの実行を完了した場合に、前記中断中プラン保持手段に保持されている更新後のプランを前記実行中プラン保持手段に移動させた後、前記実行中プラン保持手段に保持されている前記プランの実行を再開するプラン再開制御手段とを備えたことを特徴とする。
【発明の効果】
【０００９】
本発明にかかるプラン実行装置は、プランを実行すると実行内容に応じて、実行中のプランだけでなく中断中プラン保持手段に保持されているプランも更新するので、中断中プラン保持手段に保持されているプランを再開する際には、既に実行されたプランの内容を反映した適切なプランを実行することができるという効果を奏する。
【発明を実施するための最良の形態】
【００１０】
以下に、本発明にかかるプラン実行装置、プラン実行方法およびプラン実行プログラムの実施の形態を図面に基づいて詳細に説明する。なお、この実施の形態によりこの発明が限定されるものではない。
【００１１】
図１は、本実施の形態にかかるプラン作成装置を備えた移動ロボット１０の機能構成を示す図である。
【００１２】
移動ロボット１０は、ゴール受付部１００と、ゴール保持部１１０と、実行管理部１２０と、信念ＤＢ１３０と、プラン作成用知識ＤＢ１４０と、プラン作成部１５０と、プランＤＢ制御部１６０と、アクション実行部１７０とを備えている。
【００１３】
ゴール受付部１００は、ゴールを取得する。ゴール受付部１００はさらに、ゴールを通常ゴールとするか割込ゴールとするかの指定を受け付ける。ここでゴールとは、実行完了したいタスクまたは達成したい状態のことである。なお、他の例としては、達成したい目標状態であってもよい。また、割込ゴールとは、割り込みにより達成されるゴールであり、通常ゴールとは、割込ゴール以外のゴール、すなわちゴールの取得順に処理されるべきゴールである。
【００１４】
ゴール保持部１１０は、割込ゴール待ち行列１１２と、通常ゴール待ち行列１１４とを有している。割込ゴール待ち行列１１２は、ゴール受付部１００が取得した割込ゴールを取得順に保持している。通常ゴール待ち行列１１４は、ゴール受付部１００が取得した通常ゴールを取得順に保持している。
【００１５】
信念ＤＢ１３０は、信念情報を格納している。ここで、信念情報とは、処理の対象となる移動ロボット１０の状態に関する情報や、処理の前提となる状況など動的に更新される情報である。ロボット１０の状態に関する情報としては、例えば、ロボットが階段にいる場合には、ロボットの存在位置が階段であることを示す情報である。この情報により、階段以外の場所で実行されるべきタスクは、実行できないことがわかる。
【００１６】
また、処理の前提となる状況としては、例えば、現在時刻、現在日時などがある。例えば、「おはようございます」と音声出力するというタスクは、午前中以外の時間帯には適さない。現在時刻を示す信念に基づけば、「おはようございます」と音声出力するというタスクを実行するか否かを判断することができる。
【００１７】
信念ＤＢ１３０はさらに、移動ロボット１０の移動対象とする領域のトポロジカル地図を格納している。このように、信念ＤＢ１３０は、信念情報として、移動ロボット１０の処理状態や、外部状態に関する情報を保持している。
【００１８】
プラン作成部１５０は、割込ゴール待ち行列１１２または通常ゴール待ち行列１１４の先頭のゴールに対応するプランを作成する。ここで、図２を参照しつつ、プランおよびアクションについて詳述する。
【００１９】
図２は、プランとアクションの関係を示す図である。プランは、タスクの実行順序を表すものである。例えば、全順序プラン「Ｔａｓｋ１，Ｔａｓｋ２，Ｔａｓｋ３」は、図２に示すように、まず「Ｔａｓｋ１」というタスクを実行し、次に「Ｔａｓｋ２」というタスクを実行し、最後に「Ｔａｓｋ３」というタスクを実行することを表す。
【００２０】
本実施の形態においては、アクション実行部１７０が実行可能なタスクをアクションと称する。すなわち、アクションとはアクション実行部１７０の実行単位の処理である。プランは、複数のアクションを有している。また、本実施の形態においては、全順序プランのことをプランと称する。
【００２１】
プランには、具体的プランと抽象的プランがある。ここで、具体的プランとは、アクションの実行順序のみを表すプランのことである。抽象的プランとは、アクションでないタスクが存在するプランである。移動ロボット１０は、抽象的プランを具体的プランに分解して実行する。
【００２２】
プラン作成用知識ＤＢ１４０は、プラン作成部１５０がプランを作成するときに参照すべき情報であるプラン作成用知識を格納している。具体的には、プランに含めるべきアクションを格納している。さらに、各アクションに対応付けて、実行前条件および実行効果を格納している。実行前条件および実行効果については後述する。
【００２３】
プランＤＢ制御部１６０は実行中プランＤＢ１６４および中断中プランＤＢ１６６を制御する。実行中プランＤＢ１６４は、実行対象のプランを格納する。中断中プランＤＢ１６６は、中断中のプランを格納する。
【００２４】
具体的には、プランの実行、中断および再開を管理する。また、プランの内容を更新する。また複数のプランが格納されている場合には、複数のプランの中から実行すべきプランを選択する。さらに、プランからアクションを生成する。
【００２５】
アクション実行部１７０は、実行中プランＤＢ１６４に格納されているプランに出現するアクションを実行する。すなわちプランに含まれるアクションの順番にしたがって、複数のアクションを順に実行する。
【００２６】
実行管理部１２０は、ゴール保持部１１０、信念ＤＢ１３０、プラン作成部１５０、プランＤＢ制御部１６０およびアクション実行部１７０を管理する。例えば、アクション実行部１７０によるアクションの実行が完了すると、信念ＤＢ１３０の情報を、アクション実行後の状態に更新する。
【００２７】
図３は、信念ＤＢ１３０に格納されているトポロジカル地図を模式的に示す図である。このトポロジカル地図は、移動ロボット１０が移動する領域の地図である。地図上の点（ノード）：ｎｏｄｅ１， ｎｏｄｅ２， ｎｏｄｅ３， ｎｏｄｅ４， ｎｏｄｅ５， ｎｏｄｅ６の相対座標は、それぞれ、(０，２０)， (１０，２０)， (０，１０)， (１０，１０)， (０，０)， (１０，０)である。
【００２８】
この信念情報は、具体的には以下の記述として信念ＤＢ１３０に格納されている。
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ１，０，２０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ２，１０，２０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ３，０，１０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ４，１０，１０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ５，０，０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ６，１０，０)).
【００２９】
また、展示物：ｅｘｈｉｂｉｔｉｏｎ１、ｅｘｈｉｂｉｔｉｏｎ２、ｅｘｈｉｂｉｔｉｏｎ３およびｅｘｈｉｂｉｔｉｏｎ４はそれぞれ、ｎｏｄｅ１、ｎｏｄｅ２、ｎｏｄｅ３、ｎｏｄｅ４にある。このような信念情報は、具体的には、以下の記述として信念ＤＢ１３０に格納されている。
ｂｅｌｉｅｆ(ｌｏｃａｔｉｏｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｎｏｄｅ１)).
ｂｅｌｉｅｆ(ｌｏｃａｔｉｏｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｎｏｄｅ２)).
ｂｅｌｉｅｆ(ｌｏｃａｔｉｏｎ(ｅｘｈｉｂｉｔｉｏｎ３，ｎｏｄｅ３)).
ｂｅｌｉｅｆ(ｌｏｃａｔｉｏｎ(ｅｘｈｉｂｉｔｉｏｎ４，ｎｏｄｅ４)).
【００３０】
さらに、展示物：ｅｘｈｉｂｉｔｉｏｎ１、ｅｘｈｉｂｉｔｉｏｎ２、ｅｘｈｉｂｉｔｉｏｎ３、ｅｘｈｉｂｉｔｉｏｎ４とトイレ：ｔｏｉｌｅｔに関する説明として、「これは世界初の日本語ワープロです。」、「これはロボット操作用のソフトウェアです。」、「これはロボット操作用のコンピュータです。」、「これは駒をまわすロボットです。」が与えられている。このような信念情報は、具体的には、以下の記述として信念ＤＢ１３０に格納されている。
ｂｅｌｉｅｆ(ｃｏｎｔｅｎｔｓ(ｅｘｈｉｂｉｔｉｏｎ１，' これは世界初の日本語ワープロです。')).
ｂｅｌｉｅｆ(ｃｏｎｔｅｎｔｓ(ｅｘｈｉｂｉｔｉｏｎ２，' これはロボット操作用のソフトウェアです。')).
ｂｅｌｉｅｆ(ｃｏｎｔｅｎｔｓ(ｅｘｈｉｂｉｔｉｏｎ３，' これはロボット操作用のコンピュータです。')).
ｂｅｌｉｅｆ(ｃｏｎｔｅｎｔｓ(ｅｘｈｉｂｉｔｉｏｎ４，' これは駒をまわすロボットです。')).
【００３１】
ｎｏｄｅ１からｎｏｄｅ２は移動可能であり、かつ、ｎｏｄｅ２からｎｏｄｅ１へも移動可能である。この信念情報は、具体的には、以下の記述として信念ＤＢ１３０に格納されている。
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ１，ｎｏｄｅ２)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ２，ｎｏｄｅ１)).
【００３２】
同様にノード間の接続関係は以下のように記述され、信念ＤＢ１３０に格納されている。
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ１，ｎｏｄｅ３)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ３，ｎｏｄｅ１)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ２，ｎｏｄｅ４)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ４，ｎｏｄｅ２)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ３，ｎｏｄｅ４)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ４，ｎｏｄｅ３)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ３，ｎｏｄｅ５)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ５，ｎｏｄｅ３)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ４，ｎｏｄｅ６)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ６，ｎｏｄｅ４)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ５，ｎｏｄｅ６)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ６，ｎｏｄｅ５)).
【００３３】
初期状態での移動ロボット１０の位置はｎｏｄｅ６であるとする。この信念情報は、具体的には以下の記述として信念ＤＢ１３０に格納されている。
ｂｅｌｉｅｆ(ａｔ(ｎｏｄｅ６)).
ここで、ａｔ(ｎｏｄｅ６)は、ｎｏｄｅ６から移動ロボット１０が移動してしまうと成り立たなくなる。すなわち、ａｔ(_)の真偽値は動的に変化する。ここで「_」は、無名変数であり、いずれの値が代入されてもよいことを示している。このように真偽値が動的に変化することをあわせて、具体的には、以下の記述が信念ＤＢ１３０に格納されている。
ｄｙ(ａｔ(_)).
【００３４】
初期状態での移動ロボット１０は人：ｔａｒｏと一緒にいるとする。この信念情報は、具体的には以下の記述として信念ＤＢ１３０に格納されている。
ｂｅｌｉｅｆ(ｗｉｔｈ(ｔａｒｏ)).
ここで、ｗｉｔｈ(ｔａｒｏ)は、移動ロボット１０からｔａｒｏが離れてしてしまうと成り立たなくなる。そこで、信念ＤＢ１３０において以下の記述が宣言されている。
ｄｙ(ｗｉｔｈ(_)).
【００３５】
さらに、以下に示す信念が格納されている。
ｐｉｃｋ(Ｓｅｌｅｃｔｅｄ，ＬｉｓｔＲｅｓｔ，Ｌｉｓｔ)
これはリスト：Ｌｉｓｔの要素を１つ選択し、その要素をＳｅｌｅｃｔｅｄとしたときのＬｉｓｔの残りのリストはＬｉｓｔＲｅｓｔであることを示す。ただし、Ｓｅｌｅｃｔｅｄは変数で、ＬｉｓｔＲｅｓｔとＬｉｓｔはリストの変数である。
【００３６】
このような記述（ｐｉｃｋ(Ｓｅｌｅｃｔｅｄ，ＬｉｓｔＲｅｓｔ，Ｌｉｓｔ)）は、具体的には以下の記述として信念ＤＢ１３０に格納される。
ｂｅｌｉｅｆ(ｐｉｃｋ(Ｈ，Ｔ，[Ｈ|Ｔ])).
ｂｅｌｉｅｆ(ｐｉｃｋ(Ｘ，[Ｈ|Ｒｅｓｔ]，[Ｈ|Ｔ])，[
ｐｉｃｋ(Ｘ，Ｒｅｓｔ，Ｔ)
]).
これは、ｐｉｃｋ(Ｈ，Ｔ，[Ｈ|Ｔ])が常に成り立ち、ｐｉｃｋ(Ｘ，Ｒｅｓｔ，Ｔ)が成り立つならば、ｐｉｃｋ(Ｘ，[Ｈ|Ｒｅｓｔ]，[Ｈ|Ｔ])も成り立つということを表している。
【００３７】
図４は、プラン作成用知識ＤＢ１４０が格納しているプラン作成用知識を模式的に示す図である。プラン作成用知識は、具体的には、プランに含めるべきアクションである。さらに、アクションに付与される実行前条件と実行効果とが格納されている。ここで、実行前条件とは、アクションを実行する直前に成立している必要のある条件のことである。また、実行効果とは、アクション実行直後から継続的に成立する状態や性質等である。同じアクションでも、そのアクションを含むプランが異なるために、実行前条件が異なる場合がある。そこで、本実施の形態においては、プランに含まれる各アクションの実行前条件と実行効果を明示的にプラン内部に記録することとする。
【００３８】
図４に示すアクション「ＡからＢに移動」に対しては、実行前条件として「現在位置はＡ」が記録されている。また、実行効果として「現在位置はＡでなくなる」、「実行位置はＢになる」が記録されている。
【００３９】
また、アクション「ＢからＣに移動」に対しては、実行前条件として「現在位置はＢ」が記録されている。また、実行効果として「現在位置はＢでなくなる」、「実行位置はＣになる」が記録されている。
【００４０】
以上の内容は、具体的には、以下の記述としてプラン作成用知識ＤＢ１４０に記録される。
[ｐｒｅｃｏｎｄ（[ａｔ（ａ）]，[  ]），
ｍｏｖｅ（ａ， ｂ），
ｅｆｆｅｃｔ（[ｔｅｒｍｉｎａｔｅｓ（ａｔ（ａ））， ｉｎｉｔｉａｔｅｓ（ａｔ（ｂ））]）
ｐｒｅｃｏｎｄ（[ａｔ（ｂ）] ，[  ]），
ｍｏｖｅ（ｂ， ｃ），
ｅｆｆｅｃｔ（[ｔｅｒｍｉｎａｔｅｓ（ａｔ（ｂ））， ｉｎｉｔｉａｔｅｓ（ａｔ（ｃ））]）]
ここで、「ｍｏｖｅ（ａ， ｂ）」は、ａ地点からｂ地点まで移動するアクションを表している。「ｐｒｅｃｏｎｄ（[ａｔ（ａ）] ，[  ]）」は、アクション「ｍｏｖｅ（ａ， ｂ）」の実行前条件を示している。ここで、「ａｔ（ａ）」は、ａ地点にいることを表している。
【００４１】
また、「ｅｆｆｅｃｔ（[ｔｅｒｍｉｎａｔｅｓ（ａｔ（ａ））， ｉｎｉｔｉａｔｅｓ（ａｔ（ｂ））]）」は、アクション「ｍｏｖｅ（ａ， ｂ）」に対する実行効果を表している。「ｔｅｒｍｉｎａｔｅｓ（ａｔ（ａ））」は、現在位置がａ地点でなくなることを表している。また、「ｉｎｉｔｉａｔｅｓ（ａｔ（ｂ））」は、現在位置がｂ地点になることを表している。
【００４２】
同様に、「ｍｏｖｅ（ｂ， ｃ）」は、ｂ地点からｃ地点まで移動するアクションを表している。「ｐｒｅｃｏｎｄ（[ａｔ（ｂ）] ，[  ]）」は、アクション「ｍｏｖｅ（ｂ， ｃ）」の実行前条件を表している。また、「ｅｆｆｅｃｔ（[ｔｅｒｍｉｎａｔｅｓ（ａｔ（ｂ））， ｉｎｉｔｉａｔｅｓ（ａｔ（ｃ））]）」は、実行効果を表している。
【００４３】
例えば、テキストを読むというアクションには、実行前条件および実行効果は存在しない。このように、実行前条件および実行効果が存在しない場合には、以下の記述がプラン作成用知識ＤＢ１４０に格納される。
ａｃｔｉｏｎ（ｓｐｅａｋ（Ｔｅｘｔ），[
]，[
]）．
なお、この記述は、読むという動作の対象を「テキスト」とした場合のアクションを表すが、「ｓｐｅａｋ（Ｔｅｘｔ）」の「Ｔｅｘｔ」は、変数であり任意の文字列を代入することにより、この文字列を読む動作となる。
【００４４】
また、現在のノードから他のノードを経由することなく、直接移動可能なノードに移動するというアクションは、以下のように記述される。
ａｃｔｉｏｎ（ｇｏｔｏＮｅｘｔＮｏｄｅ（ＮｅｘｔＮｏｄｅ），[
ａｔ（ＣｕｒｒｅｎｔＮｏｄｅ），
ｃｏｎｎｅｃｔｓ（ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ）
]，[
ｔｅｒｍｉｎａｔｅｓ（ａｔ（ＣｕｒｒｅｎｔＮｏｄｅ）），
ｉｎｉｔｉａｔｅｓ（ａｔ（ＮｅｘｔＮｏｄｅ））
]）．
ここで、「ｇｏｔｏＮｅｘｔＮｏｄｅ（ＮｅｘｔＮｏｄｅ）」は、アクションを表している。また、「ＣｕｒｒｅｎｔＮｏｄｅ」は、現在いるノードを表している。ここで、ＣｕｒｒｅｎｔＮｏｄｅは変数である。ＮｅｘｔＮｏｄｅは、移動先のノードを表している。ここで、ＮｅｘｔＮｏｄｅは、変数である。
【００４５】
「ａｔ（ＣｕｒｒｅｎｔＮｏｄｅ）」は実行前条件である。現在のノードが、ＣｕｒｒｅｎｔＮｏｄｅであることを表している。また、「ｃｏｎｎｅｃｔｓ（ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ）」も実行前条件である。ＣｕｒｒｅｎｔＮｏｄｅからＮｅｘｔＮｏｄｅへ直接移動可能であることを表している。このアクションの効果「ｔｅｒｍｉｎａｔｅｓ（ａｔ（ＣｕｒｒｅｎｔＮｏｄｅ）），ｉｎｉｔｉａｔｅｓ（ａｔ（ＮｅｘｔＮｏｄｅ））」は、現在位置がＣｕｒｒｅｎｔＮｏｄｅからＮｅｘｔＮｏｄｅに変化することを表している。
【００４６】
また例えば、ｃｈａｎｇｅＧｏａｌ(Ｇｏａｌ)は、実行中のアクションの実行を終了し、かわりにゴール：Ｇｏａｌ（Ｇｏａｌは変数）を実行するというアクションを表している。すなわち、実行中のプランをすべて実行中プランＤＢ１６４から削除し、Ｇｏａｌというタスクのためのプランに置き換えるというアクションを表している。なお、このアクションに対する実行前条件および実行効果は存在しないので、以下の記述が信念ＤＢ１３０に格納される。
ａｃｔｉｏｎ(ｃｈａｎｇｅＧｏａｌ(Ｇｏａｌ)，[
]，[
]).
【００４７】
また、信念ＤＢ１３０においては、アクションでないタスクの分解方法の定義が格納されている。「ノード：Ｎｏｄｅからノード:Ｎｏｄｅに移動する」というタスク：
ｇｏｔｏＮｏｄｅＷｉｄｅ(Ｎｏｄｅ，Ｎｏｄｅ)
には、実行前条件および実行効果が存在せず、以下のように記述される。
ｈｔｎ(ｇｏｔｏＮｏｄｅＷｉｄｅ(Ｎｏｄｅ，Ｎｏｄｅ)，[
]，[
]).
ここで、Ｎｏｄｅは変数である。
【００４８】
「ノード：ＳｔａｒｔＮｏｄｅからノード：ＧｏａｌＮｏｄｅに移動する」というタスク：
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)
は、以下に示す複数のタスクを実行することにより、実行が達成される。すなわち、まず「現在いるノード：ＳｔａｒｔＮｏｄｅから隣のノード：ＮｅｘｔＮｏｄｅに移動する」というタスク：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ＳｔａｒｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)
を実行する。次に、「隣のノード：ＮｅｘｔＮｏｄｅから目的地のノード：ＧｏａｌＮｏｄｅに移動する」というタスク：
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＮｅｘｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)
を実行する。なお、ここで、ＳｔａｒｔＮｏｄｅ、ＮｅｘｔＮｏｄｅおよびＧｏａｌＮｏｄｅは、変数である。これは、以下のように記述される。
ｈｔｎ(ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)，[
]，[
ｇｏｔｏＮｅｘｔＮｏｄｅ(ＳｔａｒｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＮｅｘｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)
]).
【００４９】
また、「対象物：Ｏｂｊｅｃｔに関する説明をする」というタスク：
ｅｘｐｌａｉｎ(Ｏｂｊｅｃｔ，Ｐｅｒｓｏｎ)
は、以下に示す４つの実行前条件（実行前条件１、実行前条件２、実行前条件３および実行前条件４）が成り立つ場合に、「文字列：Ｔｅｘｔを音声出力する」というタスク：
ｓｐｅａｋ(Ｔｅｘｔ)
を実行することにより実行が達成される。なおここで、Ｏｂｊｅｃｔ、ＮｏｄｅおよびＴｅｘｔは、変数である。
実行前条件１は、現在位置がノード：Ｎｏｄｅであることであり、以下のように記述される。
ａｔ(Ｎｏｄｅ)
実行前条件２は、対象物：Ｏｂｊｅｃｔの位置が現在位置のノード：Ｎｏｄｅであることであり、以下のように記述される。
ｌｏｃａｔｉｏｎ(Ｏｂｊｅｃｔ，Ｎｏｄｅ) 
実行前条件３は、ロボットが人：Ｐｅｒｓｏｎと一緒にいることであり、以下のように記述される。
ｗｉｔｈ(Ｐｅｒｓｏｎ) 
実行前条件４は、対象物：Ｏｂｊｅｃｔの説明文がＴｅｘｔであることであり、以下のように記述される。
ｃｏｎｔｅｎｔｓ(Ｏｂｊｅｃｔ，Ｔｅｘｔ) 
以上の内容は、以下のように記述される。
ｈｔｎ(ｅｘｐｌａｉｎ(Ｏｂｊｅｃｔ，Ｐｅｒｓｏｎ)，[
ａｔ(Ｎｏｄｅ)，
ｌｏｃａｔｉｏｎ(Ｏｂｊｅｃｔ，Ｎｏｄｅ)，
ｗｉｔｈ(Ｐｅｒｓｏｎ)，
ｃｏｎｔｅｎｔｓ(Ｏｂｊｅｃｔ，Ｔｅｘｔ)
]，[
ｓｐｅａｋ(Ｔｅｘｔ)
]).
【００５０】
また、「対象物：Ｅｘｈｉｂｉｔｉｏｎの前に、人：Ｐｅｒｓｏｎを連れて行き、その対象物の説明をする」というタスク：
ｓｈｏｗ(Ｅｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)
は、以下に示す２つの実行前条件（実行前条件１および実行前条件２）が成り立つ場合に、「対象物：Ｅｘｈｉｂｉｔｉｏｎのあるノード：ＧｏａｌＮｏｄｅに行く」というタスク：
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)
を実行し、さらにその後「その対象物：Ｅｘｈｉｂｈｉｔｉｏｎに関して、人：Ｐｅｒｓｏｎに説明する」というタスク：
ｅｘｐｌａｉｎ(Ｅｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)
を実行することにより、実行が達成される。なおここで、ｅｘｈｉｂｉｔｉｏｎ、Ｐｅｒｓｏｎ、ＳｔａｒｔＮｏｄｅおよびＧｏａｌＮｏｄｅは、変数である。
実行前条件１は、現在いるノードがＳｔａｒｔＮｏｄｅであることであり、以下のように記述される。
ａｔ(ｓｔａｒｔＮｏｄｅ) 
また、実行前条件２は、対象物：Ｅｘｈｉｂｉｔｉｏｎがある場所がＧｏａｌＮｏｄｅであることであり、以下のように記述される。
ｌｏｃａｔｉｏｎ(Ｅｘｈｉｂｉｔｉｏｎ，ＧｏａｌＮｏｄｅ) 
以上の内容は、以下のように記述される。
ｈｔｎ(ｓｈｏｗ(Ｅｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)，[
ａｔ(ＳｔａｒｔＮｏｄｅ)，
ｌｏｃａｔｉｏｎ(Ｅｘｈｉｂｉｔｉｏｎ，ＧｏａｌＮｏｄｅ)
]，[
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)，
ｅｘｐｌａｉｎ(Ｅｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)
]).
【００５１】
また、ｓｈｏｗＡｒｏｕｎｄ(Ｏｂｊｅｃｔｓ，Ｐｅｒｓｏｎ)というタスクは、０個以上の対象物のリスト：Ｏｂｊｅｃｔｓの各対象物に対して、その対象物のある場所に行って、人：Ｐｅｒｓｏｎに、その対象物の説明をするというタスクである。例えば、以下に示す記述例がある。
ｈｔｎ(ｓｈｏｗＡｒｏｕｎｄ([]，_)，[
]，[
]).
なお、対象物のリストが空リスト：[]である場合には、何もしなくてよい。また“_”は無名変数である。
【００５２】
また、以下に示す記述例がある。
ｈｔｎ(ｓｈｏｗＡｒｏｕｎｄ([Ｅｘｈｉｂｉｔｉｏｎ|ＥＸｓ]，Ｐｅｒｓｏｎ)，[
ｐｉｃｋＯｎｅ(ＮｅｘｔＥＸｈｉｂｉｔｉｏｎ，ＲｅｓｔＥＸｓ，[Ｅｘｈｉｂｉｔｉｏｎ|ＥＸｓ])
]，[
ｓｈｏｗ(ＮｅｘｔＥｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ(ＲｅｓｔＥＸｓ，Ｐｅｒｓｏｎ))
]).
これは、対象物のリストが１つ以上の対象物を含むリスト：
[Ｅｘｈｉｂｉｔｉｏｎ|ＥＸｓ]
であり、１つ以上の対象物のリストから適当な１つの対象物：ＮｅｘｔＥｘｈｉｂｉｔｉｏｎを選択すると、残りの対象物のリストはＲｅｓｔＥＸｓであるという１つの実行前条件：
ｐｉｃｋＯｎｅ(ＮｅｘｔＥｘｈｉｂｉｔｉｏｎ，ＲｅｓｔＥＸｓ，[Ｅｘｈｉｂｉｔｉｏｎ|ＥＸｓ])
が成立するならば、タスク：
ｓｈｏｗＡｒｏｕｎｄ([Ｅｘｈｉｂｉｔｉｏｎ|ＥＸｓ]，Ｐｅｒｓｏｎ)
を実行するには、「対象物：ＮｅｘｔＥｘｈｉｂｉｔｉｏｎの前で、人：Ｐｅｒｓｏｎにその対象物の説明をする」というタスク：
ｓｈｏｗ(ＮｅｘｔＥｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)
を実行した後に、「残りの対象物のリスト：ＲｅｓｔＥＸｓを案内してまわるというタスク：ｓｈｏｗＡｒｏｕｎｄ（ＲｅｓｔＥＸｓ ，Ｐｅｒｓｏｎ）を次のゴールとして実行指示する」というタスク：
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ(ＲｅｓｔＥＸｓ，Ｐｅｒｓｏｎ))
を実行すればよいことを表している。ここで、Ｅｘｈｉｂｉｔｉｏｎ、ＮｅｘｔＥｘｈｉｂｉｔｉｏｎ、ＰｅｒｓｏｎおよびＯｂｊｅｃｔは、変数である。また、ＥＸｓおよびＲｅｓｔＥＸｓは、リストの変数である。
【００５３】
図５は、実施の形態にかかる移動ロボット１０がプランを実行するときのプラン実行処理を示すフローチャートである。まず、ゴール受付部１００がゴールを取得する(ステップＳ１００)。次に、ゴール受付部１００が取得したゴールの種別を判断する。具体的には、通常ゴールであるか割込ゴールであるかを判断する。
【００５４】
通常ゴールである場合には、取得した通常ゴールをゴール保持部１１０の通常ゴール待ち行列１１４の最後尾に挿入する。割込ゴールである場合には、取得した割込ゴールをゴール保持部１１０の割込ゴール待ち行列１１２の最後尾に挿入する(ステップＳ１０２)。
【００５５】
次に、実行管理部１２０は、ゴール保持部１１０の割込ゴール待ち行列１１２に割り込みゴールが格納されているか否かを確認する。割込ゴールが存在しない場合には(ステップＳ１０４，Ｎｏ)、さらに実行中プランＤＢ１６４にプランが格納されているか否かを確認する。プランが存在する場合には(ステップＳ１０６，Ｙｅｓ)、さらに格納されているプランの少なくとも１つが既に実行済みの空プランか否かを確認する。
【００５６】
実行中プランＤＢ１６４に空プランが格納されていない場合には、すなわちいずれのプランの実行も終了しておらず、かつ、実行すべきプランが格納されている場合には(ステップＳ１０８，Ｎｏ)、このプランに含まれるアクションのうち最初に実行されるアクション、すなわち先頭を実行する(ステップＳ１１０)。次に、実行したアクションの内容に基づいて、実行後プラン更新処理を行う(ステップＳ１１２)。ここで、実行後プラン更新処理とは、実行したアクションの内容に基づいて、対応するアクションを実行中プランＤＢ１６４および中断中プランＤＢ１６６から削除する処理である。実行後プラン更新処理については後述する。
【００５７】
ステップＳ１０８において、実行中プランＤＢ１６４に空プランが格納されている場合、すなわち実行中プランＤＢ１６４に既に実行済みのプランが格納されている場合には(ステップＳ１０８，Ｙｅｓ)、実行中プランＤＢ１６４から各プランを削除する(ステップＳ１２０)。次に、中断中プランＤＢ１６６にプランが格納されているか否かを確認する。プランが存在する場合には(ステップＳ１２２，Ｙｅｓ)、再開時プラン更新処理を行う（ステップＳ１２４）。ここで、再開時プラン更新処理とは、中断中プランＤＢ１６６のプランを実行中プランＤＢ１６４に移動させる際に行う処理であり、プランをタスクに分解する処理である。再開時プラン更新処理については後述する。
【００５８】
ステップＳ１２２において、中断中プランＤＢ１６６にプランが存在しない場合には(ステップＳ１２２，Ｎｏ)、さらに実行管理部１２０は、ゴール保持部１１０の割込ゴール待ち行列１１２または通常ゴール待ち行列１１４にゴールがあるか否かを確認する。ゴールが存在する場合には(ステップＳ１２６，Ｙｅｓ)、ゴール処理を行う(ステップＳ１２８)。ここで、ゴール処理とは、ゴールに基づいて、プランを作成する処理である。ゴール処理については後述する。
【００５９】
ステップＳ１０４において、割込ゴール待ち行列１１２に割込ゴールが格納されている場合には(ステップＳ１０４，Ｙｅｓ)、さらに実行中プランＤＢ１６４にプランが格納されているか否かを確認する。プランが格納されている場合には(ステップＳ１３０，Ｙｅｓ)、実行中プランＤＢ１６４に格納されているプランである実行中プラン群を中断中プランＤＢ１６６に移動し(ステップＳ１３２)、ステップＳ１２８へ進む。ステップＳ１３０において、実行中プランＤＢ１６４にプランが格納されていない場合は(ステップＳ１３０，Ｎｏ)、ステップＳ１２８へ進む。
【００６０】
図６は、図５において説明した実行後プラン更新処理（ステップＳ１１２）における詳細な処理を示すフローチャートである。アクションの実行に成功した場合には（ステップＳ２００，Ｙｅｓ）、先頭のタスクが実行に成功したアクションである各プランから実行済みアクションを削除する（ステップＳ２０４）。
【００６１】
このように、実行中プランＤＢ１６４および中断中プランＤＢ１６６に格納されているプンから、実行済みのアクションを削除するので、これらのプランを再開した場合には、既に実行済みのアクションを繰り返し実行するのを避けることができる。
【００６２】
次に、実行内容に基づいて、信念ＤＢ１３０の内容を更新する（ステップＳ２０６）。次に、実行中プランＤＢ１６４および中断中プランＤＢ１６６に格納されているプランを更新する（ステップＳ２０８）。なお、プラン更新処理については後述する。
【００６３】
ステップＳ２００において、アクションに失敗した場合には（ステップＳ２００，Ｎｏ）、先頭のタスクが実行に失敗したアクションであるすべてのプランを削除する（ステップＳ２１２）。
【００６４】
図７は、図６において説明したプラン更新処理（ステップＳ２０８）における詳細な処理を示すフローチャートである。まず、実行中プランＤＢ１６４および中断中プランＤＢ１６６に格納されている各プランに含まれる各タスクに付与された実行前条件が満たされているか否かを確認する（ステップＳ２２０）。実行前条件が満たされるか否かを確認する処理については、後述する。
【００６５】
そして、実行前条件が満たされないタスクを含むすべてのプランを実行中プランＤＢ１６４および中断中プランＤＢ１６６から削除する（ステップＳ２２４）。  
【００６６】
次に、実行中プランＤＢ１６４に格納されているプランに出現するタスクを分解する（ステップＳ２２８）。このとき実行中プランＤＢ１６４に格納されているプランのうち実行しているプラン中のすべてのタスクをアクションに分解するのが好ましい。また、それ以外のプランについては、少なくとも先頭のタスクがアクションになるまで分解するのが好ましい。
【００６７】
さらに、中断中プランＤＢ１６６に格納されているプランに出現するタスクを分解する（ステップＳ２３２）。ここでは、各プランの少なくとも先頭のタスクがアクションになるまで分解するのが好ましい。以上で、プラン更新処理が完了する。
【００６８】
なお、ステップＳ２３２において、中断中プランＤＢ１６６に格納されているプランに出現するタスクに対して行うタスク分解処理は、タスク分解処理（ステップＳ２２８）と同様の処理である。
【００６９】
このように、プラン更新処理では、プランの各タスクをすべてアクションに分解する必要はなく、プランをすべてアクションに分解するのではなく、実行直前のタスク、すなわちプランに含まれるタスクのうち先頭のタスクのみを順次アクションに分解していく。これにより、実行直前の状態、すなわち実行直前において信念ＤＢ１３０に格納されている情報に基づいて、適切なアクションを作成することができる。また、順次アクションに分解していくため、メモリ消費を抑制することができる。
【００７０】
図８は、図７において説明した実行前条件確認処理（ステップＳ２２０）における詳細な処理を示すフローチャートである。第１の条件、第２の条件および第３の条件を満足する状態か否かを判断する。なお、各条件については後述する。
【００７１】
なお、前提として、実行中プランＤＢ１６４に格納されているアクションの実行が完了すると、実行が完了したアクションは、実行中プランＤＢ１６４から削除される。
【００７２】
第１の条件を満たす場合には（ステップＳ２４０，Ｙｅｓ）、実行前条件「Ｘ」成立と判定する（ステップＳ２４８）。また、第２の条件を満たす場合および第３の条件を満たす場合にも（ステップＳ２４２，Ｙｅｓ、ステップＳ２４４，Ｙｅｓ）、同様に実行前条件「Ｘ」成立と判定する（ステップＳ２４８）。
【００７３】
一方、いずれの条件も満たさない場合には（ステップＳ２４０，Ｎｏ、ステップＳ２４２，Ｎｏ、ステップＳ２４４，Ｎｏ）、実行前条件「Ｘ」不成立と判定する（ステップＳ２４６）。
【００７４】
図９は、第１の条件を説明するための図である。ここで、プラン「Ｐ１」のアクション「Ｔｘ」の実行前条件を「Ｘ」とする。第１の条件は、信念ＤＢ１３０において信念として、
ｂｅｌｉｅｆ（Ｘ）
が格納されており、すなわち、信念Ｘが成立しており、Ｘがアクション「Ｔｘ」の実行前に実行前条件「Ｘ」を終了させるような実行効果「ｔｅｒｍｉｎａｔｅｓ（Ｘ）」を有するアクション「Ｔｘ−ｍ」が実行予定にないことである。すなわち、アクション「Ｔｘ」の実行前に実行前条件「Ｘ」が終了しないことである。
図１０は、第２の条件を説明するための図である。プラン「Ｐ１」のアクション「Ｔｘ」の実行前条件「Ｘ」に対し、第２の条件は、アクション「Ｔｘ」の実行前に実行前条件「Ｘ」を開始させるような実行効果「ｉｎｉｔｉａｔｅｓ（Ｘ）」を有するアクション「
Ｔｘ−ｎ」が実行予定にあり、かつアクション「Ｔｘ−ｎ」とアクション「Ｔｘ」の間に実行前条件「Ｘ」を終了させるようなアクションが存在しないことである。
【００７５】
第３の条件は、実行前条件「Ｘ」が成立しなければならない時点において、ある条件「Ｃ１〜Ｃｎ」が成立していること、および信念ＤＢ１３０に信念：
ｂｅｌｉｅｆ(Ｘ，[Ｃ１，・・・Ｃｎ])
が格納されていることである。
【００７６】
図１１は、図７において説明したタスク分解処理（ステップＳ２２８）における詳細な処理を示すフローチャートである。実行中プランＤＢ中にプランが存在する場合には(ステップＳ２６０，Ｙｅｓ)、各プランの先頭タスクが既にアクションに分解されているか否かを確認する。分解されてない先頭タスクが存在する場合には(ステップＳ２６１，Ｎｏ)、この先頭タスクを含むプランを選択する(ステップＳ２６２)。
【００７７】
一方、実行中プランＤＢ中の各プランの先頭タスクが既にアクションに分解されている場合であって(ステップＳ２６１，Ｙｅｓ)、かつさらに他のタスクを分解する場合には(ステップＳ２６３，Ｙｅｓ)、未分解のタスクが存在する任意のプランを選択する(ステップＳ２６４)。
【００７８】
次に、プランに出現する最初タスクであり、分解されていないタスクを選択する(ステップＳ２６５)。選択したタスクがアクションである場合には(ステップＳ２６６，Ｙｅｓ)、さらに、このアクションに対する実行前条件が満たされるか否かを信念ＤＢ１３０に格納されている情報等に基づいて確認する。具体的には、図８および図９を参照しつつ説明した実行前条件確認処理（ステップＳ２２０）により確認する。
【００７９】
実行前条件が満たされる場合には（ステップＳ２６７，Ｙｅｓ）、実行効果を付与する。さらに実行前条件を付与する（ステップＳ２６８）。そして、再びステップＳ２６１へ進む。なお、ここで、付与する実行前条件は、条件を満たすか否かが動的に変化する実行前条件のみである。例えば、実行前条件が移動ロボット１０の位置に関する条件である場合には、移動ロボット１０が移動するたびに実行前条件を満たすか否かが変化する。このような条件のみを付与する。
【００８０】
ｎ通りの実行前条件の満たし方が存在する場合には、対象としているプランのコピーをｎ個作成する。そして、ｎ個のプランそれぞれに対し、ｎ通りの実行前条件を付与する。そして、対象とするプランを新たに作成したｎ通りのプランに置き換える。
【００８１】
一方、実行前条件が満たされない場合には（ステップＳ２６７，Ｎｏ）、対象としているプランを実行中プランＤＢ１６４から削除する（ステップＳ２６９）。そして、再びステップＳ２６０へ進む。
【００８２】
一方、ステップＳ２６６においてタスクがアクションでない場合には（ステップＳ２６６，Ｎｏ）、まず実行前条件を満たすタスクの分解方法を特定する。具体的には、図８および図９を参照しつつ説明した実行前条件確認処理（ステップＳ２２０）により、実行前条件を満たすか否かを確認し、タスクの分解方法を特定する。
【００８３】
実行前条件が満たされるタスク分解方法が存在する場合には（ステップＳ２７１，Ｙｅｓ）、特定したタスク分解方法に基づいて、タスクを分解する。そして得られたタスクに対し、実行前条件を付与する（ステップＳ２７２）。そして、再びステップＳ２６０へ進む。
【００８４】
なお、タスクの分解方法がｎ通り存在する場合には、対象としているタスクのコピーをｎ個作成する。そして、ｎ個のプランそれぞれに対し、ｎ通りのタスク分解方法を施す。そして、分解されたｎ個のプランを得る。そして、対象としているプランを分解されたｎ個のプランに置き換える。また、分解されたプランの実行前条件の満たし方がｍ通り存在する場合には、そのプランのコピーをｍ個作成する。そして、ｍ個のプランそれぞれに対し、ｍ通りの実行前条件を付与する。その後、分解されたプランを新たに作成したｍ通りのプランに置き換える。なお、ここで付与する実行前条件は、動的な実行前条件のみである。以上により、タスク分解処理が完了する。
【００８５】
一方、ステップＳ２７１において、実行前条件が満たされるタスク分解方法が存在しない場合には（ステップＳ２７１，Ｎｏ）、ステップＳ２６９に進みプランを削除する。
【００８６】
図１２は、図５において説明した再開時プラン更新処理（ステップＳ１２４）における詳細な処理を示すフローチャートである。中断中プランＤＢ１６６にプランが格納されている場合には（ステップＳ１２２，Ｙｅｓ）、まず、中断中プランＤＢ１６６に格納されているプラン群を実行中プランＤＢ１６４に移動する（ステップＳ３００）。なお、中断中プランＤＢ１６６に複数のプラン群が格納されている場合には、最も最近格納されたプラン群を実行中プランＤＢ１６４に移動する。
【００８７】
プラン群を実行中プランＤＢ１６４に移動した後、実行中プランＤＢ１６４に格納されている各プランに出現するタスクに対し、タスク分解処理を行う（ステップＳ３０２）。なお、タスク分解処理（ステップＳ３０２）は、図１１を参照しつつ説明したタスク分解処理（ステップＳ２２８）と同様の処理である。以上で、再開時プラン更新処理が完了する。
【００８８】
図１３は、図５において説明したゴール処理（ステップＳ１２８）における詳細な処理を示すフローチャートである。ゴール保持部１１０の割込ゴール待ち行列１１２にゴールが存在する場合には（ステップＳ４００，Ｙｅｓ）、割込ゴール待ち行列１１２に格納されているゴールのうち先頭のゴールを取り出す（ステップＳ４０２）。一方、割込ゴール待ち行列１１２にゴールが存在しない場合には（ステップＳ４００，Ｎｏ）、通常ゴール待ち行列１１４に格納されているゴールのうち先頭のゴールを取り出す（ステップＳ４０４）。
【００８９】
次に、取り出したゴールに対するプランを作成し（ステップＳ４１０）、作成したプランを実行中プランＤＢ１６４に格納する（ステップＳ４１２）。なお、ここで、ゴールを達成することのできるプランがｎ個存在する場合には、ｎ個のプランを作成し、それぞれ実行中プランＤＢ１６４に格納する。
【００９０】
その後、実行中プランＤＢ１６４に格納されているプランに対し、タスク分解処理を施す（ステップＳ４１４）。なお、タスク分解処理（ステップＳ４１４）は、図１１を参照しつつ説明したタスク分解処理（ステップＳ２２８）と同様の処理である。以上で、ゴール処理が完了する。
【００９１】
以上のように、本実施の形態にかかるプラン実行処理においては、所定のプランを実行すると、実行中プランＤＢ１６４および中断中プランＤＢ１６６に格納されているこれ以外のプランも総て更新する。そして、一度中断されたプランを再開する場合には、プランの実行に応じて更新されたプランを実行する。したがって、再開時の状態に応じた適切なプランを再開することができる。
【００９２】
また、同一のゴールから複数のプランを作成した場合には、プランの実行に応じて、各プランそれぞれを更新する。したがって、実行中断したプランを再開する時点において、移動ロボット１０の位置が変更されており、中断中のプランを再開することができないような場合には、同一のゴールから作成された他のプランを再開することにより、ゴールを達成することができる。
【００９３】
以上、図５から図１３を参照しつつ説明したプラン実行処理を、より具体的に説明する。ゴール受付部１００が「対象物：ｅｘｈｉｂｉｔｉｏｎ１とｅｘｈｉｂｉｔｉｏｎ２の前で人：ｔａｒｏに各対象物の説明する」という通常ゴールを取得したとする。図１４は、この通常ゴールを模式的に示す図である。なお、このときの移動ロボット１０の位置は、初期位置（ｎｏｄｅ６）であるとする。この通常ゴールは、以下のように記述される。
ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１，ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ)
また、前提として、このとき、ゴール保持部１１０の割込ゴール待ち行列１１２および通常ゴール待ち行列１１４にはゴールは保持されていないものとする。
【００９４】
ゴール受付部１００は、通常ゴールを取得すると、ゴール保持部１１０の通常ゴール待ち行列１１４に保持させる。さらに、プラン作成部１５０は、通常ゴールに対するプランを作成する。作成された通常ゴールは、実行中プランＤＢ１６４に格納される。プラン作成部１５０は、具体的には、プラン作成用知識ＤＢ１４０に格納されているプラン作成用知識：
ｈｔｎ(ｓｈｏｗＡｒｏｕｎｄ([Ｅｘｈｉｂｉｔｉｏｎ|ＥＸｓ]，Ｐｅｒｓｏｎ)，[
ｐｉｃｋＯｎｅ(ＮｅｘｔＥＸｈｉｂｉｔｉｏｎ，ＲｅｓｔＥＸｓ，[Ｅｘｈｉｂｉｔｉｏｎ|ＥＸｓ])
]，[
ｓｈｏｗ(ＮｅｘｔＥｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ(ＲｅｓｔＥＸｓ，Ｐｅｒｓｏｎ))
]).
と、信念ＤＢ１３０に格納されている：
ｂｅｌｉｅｆ(ｐｉｃｋ(Ｈ，Ｔ，[Ｈ|Ｔ])).
ｂｅｌｉｅｆ(ｐｉｃｋ(Ｘ，[Ｈ|Ｒｅｓｔ]，[Ｈ|Ｔ])，[
ｐｉｃｋ(Ｘ，Ｒｅｓｔ，Ｔ)
]).
に基づいて、タスク：
ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１，ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）
を以下の２つのプラン（プラン１、プラン２）に分解する。
プラン１:
[
ｓｈｏｗ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
プラン２：
[
ｓｈｏｗ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
【００９５】
これらのプランは、最初に実行すべきタスクがアクション（タスクの最小単位）になるまで、分解される。プラン１は、ｅｘｈｉｂｉｔｉｏｎ１を先に案内するプランである。一方プラン２は、ｅｘｈｉｂｉｔｉｏｎ２を先に案内するプランである。なお、プラン１およびプラン２に含まれるｃｈａｎｇｅＧｏａｌ（Ｘ）は、現在実行中のプランおよび中断中プランＤＢ１６６に格納されているプランを削除し、ゴールＸに対するプランを実行中プランＤＢ１６４に新たに格納し、このゴールＸに対するプランを実行するタスクである。
【００９６】
このように、プラン作成部１５０は、複数のプランにより１つのゴールを達成可能である場合には、複数のプランを作成する。
【００９７】
プラン作成部１５０は、次に、以下のプラン作成用知識：
ｈｔｎ(ｓｈｏｗ(Ｅｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)，[
ａｔ(ＳｔａｒｔＮｏｄｅ)，
ｌｏｃａｔｉｏｎ(Ｅｘｈｉｂｉｔｉｏｎ，ＧｏａｌＮｏｄｅ)
]，[
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)，
ｅｘｐｌａｉｎ(Ｅｘｈｉｂｉｔｉｏｎ，Ｐｅｒｓｏｎ)
]).
と、以下の信念：
ｄｙ(ａｔ(_)).
ｂｅｌｉｅｆ(ａｔ(ｎｏｄｅ６)).
ｂｅｌｉｅｆ(ｌｏｃａｔｉｏｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｎｏｄｅ１)).
に基づいて、プラン１を以下のプラン（プラン３）に分解する。
プラン３:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ６，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
ここで、ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])とは、タスク：ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ６，ｎｏｄｅ１)の前に成立しなければならない実行前条件ある。動的に変化する可能性のあるａｔ(ｎｏｄｅ６)を記録している。
【００９８】
同様に、プラン２を以下のプラン（プラン４）に分解する。ただしこの場合には、ｂｅｌｉｅｆ(ｌｏｃａｔｉｏｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｎｏｄｅ１))にかえて、ｂｅｌｉｅｆ(ｌｏｃａｔｉｏｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｎｏｄｅ２))を用いる。
プラン４:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ６，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
【００９９】
次に、プラン３を分解する。プラン作成部１５０は、以下のプラン作成用知識：
ｈｔｎ(ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)，[
]，[
ｇｏｔｏＮｅｘｔＮｏｄｅ(ＳｔａｒｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＮｅｘｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)
]).
ａｃｔｉｏｎ(ｇｏｔｏＮｅｘｔＮｏｄｅ(ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，[
ａｔ(ＣｕｒｒｅｎｔＮｏｄｅ)，
ｃｏｎｎｅｃｔｓ(ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)
]，[
ｔｅｒｍｉｎａｔｅｓ(ａｔ(ＣｕｒｒｅｎｔＮｏｄｅ))，
ｉｎｉｔｉａｔｅｓ(ａｔ(ＮｅｘｔＮｏｄｅ))
]).
と、以下の信念：
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ６，ｎｏｄｅ４)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ６，ｎｏｄｅ５)).
に基づいて、プラン３を以下の２つのプラン（プラン５とプラン６）に分解する。
プラン５:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
プラン６:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ５)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ５))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ５，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
【０１００】
同様にプラン作成部１５０は、プラン４を以下の２つのプラン（プラン７とプラン８）に分解する。
プラン７:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
プラン８:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ５)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ５))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ５，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
【０１０１】
プラン５、プラン６、プラン７およびプラン８の最初のタスクはいずれもアクションである。そこで、プラン作成部１５０は、これらのプランのコストを比較し、コストが最も小さいプランを分解する。
【０１０２】
本実施の形態にかかるプラン作成部１５０は、移動ロボット１０の移動に関してのコストのみを考慮する。具体的には、これらのプランに出現する移動に関する各タスク：ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)、ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ５)、ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)、ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ１)、ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ５，ｎｏｄｅ１)、ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)、ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ５，ｎｏｄｅ２)の総コスト（概算）を計算して比較する。
【０１０３】
以下の信念：
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ１，０，２０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ２，１０，２０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ４，１０，１０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ５，０，０)).
ｂｅｌｉｅｆ(ｃｏｏｒｄｉｎａｔｅ(ｎｏｄｅ６，１０，０)).
から、ｎｏｄｅ６とｎｏｄｅ４間の直線距離、ｎｏｄｅ６とｎｏｄｅ５間の直線距離、ｎｏｄｅ４とｎｏｄｅ２間の直線距離、ｎｏｄｅ４とｎｏｄｅ１間の直線距離、ｎｏｄｅ５とｎｏｄｅ１間の直線距離、ｎｏｄｅ４とｎｏｄｅ２間の直線距離、ｎｏｄｅ５とｎｏｄｅ２間の直線距離を特定する。そして、これらの距離をそれぞれコストとし、各プランにおける合計の移動距離を総コスト（概算）として算出する。こうして算出した総コストが最小となるプランを実行すべきプランとして選択する。本例においては、プラン７のコストが最小となり、プラン７が選択される。
【０１０４】
なお、コストの算出方法は、本例に限定されるものではなく、例えば移動距離に加えて、タスクの実行に要する時間に対するコストを算出してもよい。また、これらの双方のコストから総合的なコストを算出してもよい。
【０１０５】
プラン作成部１５０はさらに、以下のプラン作成用知識：
ｈｔｎ(ｇｏｔｏＮｏｄｅＷｉｄｅ(Ｎｏｄｅ，Ｎｏｄｅ)，[
]，[
]).
ｈｔｎ(ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)，[
]，[
ｇｏｔｏＮｅｘｔＮｏｄｅ(ＳｔａｒｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＮｅｘｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)
]).
ａｃｔｉｏｎ(ｇｏｔｏＮｅｘｔＮｏｄｅ(ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，[
ａｔ(ＣｕｒｒｅｎｔＮｏｄｅ)，
ｃｏｎｎｅｃｔｓ(ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)
]，[
ｔｅｒｍｉｎａｔｅｓ(ａｔ(ＣｕｒｒｅｎｔＮｏｄｅ))，
ｉｎｉｔｉａｔｅｓ(ａｔ(ＮｅｘｔＮｏｄｅ))
]).
と、以下の信念：
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ２，ｎｏｄｅ１)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ２，ｎｏｄｅ４)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ４，ｎｏｄｅ２)).
に基づいて、まず、コストの最も小さいプランであるプラン７を以下の３つのプラン（プラン９とプラン１０とプラン１１）に分解する。
プラン９:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
プラン１０:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
プラン１１:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
【０１０６】
ここで、プラン９とプラン１０とプラン１１の２つ目タスクの実行前条件：
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])
に記載のａｔ(ｎｏｄｅ４)は、１つ目アクションの効果 ：
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])
により、成立している。
【０１０７】
次に、実行中プランＤＢ１６４が保持しているプラン（プラン５、プラン６、プラン９、プラン１０、プラン１１およびプラン８）の中で総コスト（概算）が最も低いプラン９を選択し、プラン分解を継続する。プラン作成部１５０は、以下のプラン作成用知識：
ｈｔｎ(ｅｘｐｌａｉｎ(Ｏｂｊｅｃｔ，Ｐｅｒｓｏｎ)，[
ａｔ(Ｎｏｄｅ)，
ｌｏｃａｔｉｏｎ(Ｏｂｊｅｃｔ，Ｎｏｄｅ)，
ｗｉｔｈ(Ｐｅｒｓｏｎ)，
ｃｏｎｔｅｎｔｓ(Ｏｂｊｅｃｔ，Ｔｅｘｔ)
]，[
ｓｐｅａｋ(Ｔｅｘｔ)
]).
ａｃｔｉｏｎ(ｓｐｅａｋ(Ｔｅｘｔ)，[
]，[
]).
ａｃｔｉｏｎ(ｃｈａｎｇｅＧｏａｌ(Ｇｏａｌ)，[
]，[
]).
と、以下の信念：
ｂｅｌｉｅｆ(ｌｏｃａｔｉｏｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｎｏｄｅ２)).
ｂｅｌｉｅｆ(ｗｉｔｈ(Ｐｅｒｓｏｎ)).
ｄｙ(ｗｉｔｈ(_)).
ｂｅｌｉｅｆ(ｃｏｎｔｅｎｔｓ(ｅｘｈｉｂｉｔｉｏｎ２，' これはロボット操作用のソフトウェアです。')).
を用い、プラン９から、以下のプラン（プラン１２）を作成する。
プラン１２:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)，ｗｉｔｈ(ｔａｒｏ)]，[])，
ｓｐｅａｋ(' これはロボット操作用のソフトウェアです。')，
ｅｆｆｅｃｔ([])，
ｐｒｅｃｏｎｄ([]，[])，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)，
ｅｆｆｅｃｔ([])
]
【０１０８】
プラン１２は、全てのタスクがアクションである。さらに、各アクションには、実行前条件と実行効果が付与されている。そこで、これを実行すべきプランとする。なお、実行中プランＤＢ１６４には、プラン１２の代替プランとして、プラン５、プラン６、プラン８、プラン１０およびプラン１１がさらに保持されている。このように、最適なプランだけでなく、これ以外にも実行可能なプランを保持しておく。
【０１０９】
次に、こうして作成されたプラン（プラン１２）を実行する場合の処理について説明する。アクション実行部１７０は、まずプラン１２の最初に出現するアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)，
を実行する。これにより、移動ロボット１０は、図１５に示すようにｎｏｄｅ６からｎｏｄｅ４に移動し、移動ロボット１０はｎｏｄｅ４に位置している。
【０１１０】
このアクションの実行後、プラン１２に付加されたこのアクションの実行効果に関する情報：
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])
に従い、信念ＤＢ１３０にあるａｔ(ｎｏｄｅ４)をａｔ(ｎｏｄｅ６)に書き換える。さらに、プラン１２から実行済みアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)
を削除する。このとき、このアクションに対する実行前条件および実行効果も削除する。
これによりプラン１２は以下のように変更される。
プラン１２:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)，ｗｉｔｈ(ｔａｒｏ)]，[])，
ｓｐｅａｋ(' これはロボット操作用のソフトウェアです。')，
ｅｆｆｅｃｔ([])，
ｐｒｅｃｏｎｄ([]，[])，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)，
ｅｆｆｅｃｔ([])
]
【０１１１】
このとき、あわせて実行中プランＤＢ１６４に保持されているプラン５とプラン１０とプラン１１からも、同様に実行済みアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)
を削除する。これにより、各プランは以下のように変更される。
プラン５：
[
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
プラン１０:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
プラン１１:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
【０１１２】
また、プラン５の先頭のタスクは、アクションではないので、プラン５をさらに分解する。具体的には、以下のプラン作成用知識：
ｈｔｎ(ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)，[
]，[
ｇｏｔｏＮｅｘｔＮｏｄｅ(ＳｔａｒｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＮｅｘｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)
]).
ａｃｔｉｏｎ(ｇｏｔｏＮｅｘｔＮｏｄｅ(ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，[
ａｔ(ＣｕｒｒｅｎｔＮｏｄｅ)，
ｃｏｎｎｅｃｔｓ(ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)
]，[
ｔｅｒｍｉｎａｔｅｓ(ａｔ(ＣｕｒｒｅｎｔＮｏｄｅ))，
ｉｎｉｔｉａｔｅｓ(ａｔ(ＮｅｘｔＮｏｄｅ))
]).
と、以下の信念：
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ４，ｎｏｄｅ２)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ４，ｎｏｄｅ３)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ４，ｎｏｄｅ６)).
を用いて、プラン５を以下の３つのプラン（プラン１３とプラン１４とプラン１５）に分解する。
プラン１３：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
プラン１４：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ３)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ３))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ３，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
プラン１５：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ６)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ６))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ６，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
【０１１３】
また、アクションの実行により、移動ロボット１０の現在位置は、ｎｏｄｅ６からｎｏｄｅ４に変更になっている。したがって、実行中プランＤＢ１６４に格納されているプラン６およびプラン８の実行前条件：
ａｔ(ｎｏｄｅ６)
は満たされなくなっている。そこで、プラン６およびプラン８は、今後再開することができないので、実行中プランＤＢ１６４から削除する。
【０１１４】
この時点で実行中プランＤＢ１６４に格納されている各プラン（プラン１０、プラン１１、プラン１２、プラン１３、プラン１４およびプラン１５）に最初に出現するタスクはいずれもアクションになっている。
【０１１５】
次に、実行中プランＤＢ１６４に格納されているプラン１０、プラン１１、プラン１２、プラン１３、プラン１４およびプラン１５の中から、総コストが最小となるプランを選択する。ここでは、プラン１２が選択され、プラン１２にしたがい、以下のアクションが実行される。
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
これにより、移動ロボット１０は、図１６に示すようにｎｏｄｅ４からｎｏｄｅ２に移動し、移動ロボット１０はｎｏｄｅ２に位置している。
【０１１６】
次に、このアクションの実行効果：
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])
にしたがい、信念ＤＢ１３０に格納されているａｔ(ｎｏｄｅ４)をａｔ(ｎｏｄｅ２)に書き換える。さらに、プラン１２から実行済みアクションを削除する。実行済みアクションが削除された後のプラン１２は、以下のように記述される。
プラン１２:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)，ｗｉｔｈ(ｔａｒｏ)]，[])，
ｓｐｅａｋ(' これはロボット操作用のソフトウェアです。')，
ｅｆｆｅｃｔ([])，
ｐｒｅｃｏｎｄ([]，[])，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)，
ｅｆｆｅｃｔ([])
]
【０１１７】
このとき、あわせて実行中プランＤＢ１６４に保持されているプラン１０、プラン１１およびプラン１３からも同様に実行済みアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
を削除する。これにより各プランは、以下のように変更される。
プラン１０:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
プラン１１:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
プラン１３：
[
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
【０１１８】
また、プラン１３の先頭のタスクは、アクションではない。そこで、プラン作成部１５０は、プラン１３をさらに分解する。具体的には、プラン作成部１５０は、以下のプラン作成用知識：
ｈｔｎ(ｇｏｔｏＮｏｄｅＷｉｄｅ(ＳｔａｒｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)，[
]，[
ｇｏｔｏＮｅｘｔＮｏｄｅ(ＳｔａｒｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ＮｅｘｔＮｏｄｅ，ＧｏａｌＮｏｄｅ)
]).
ａｃｔｉｏｎ(ｇｏｔｏＮｅｘｔＮｏｄｅ(ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)，[
ａｔ(ＣｕｒｒｅｎｔＮｏｄｅ)，
ｃｏｎｎｅｃｔｓ(ＣｕｒｒｅｎｔＮｏｄｅ，ＮｅｘｔＮｏｄｅ)
]，[
ｔｅｒｍｉｎａｔｅｓ(ａｔ(ＣｕｒｒｅｎｔＮｏｄｅ))，
ｉｎｉｔｉａｔｅｓ(ａｔ(ＮｅｘｔＮｏｄｅ))
]).
と、以下の信念：
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ２，ｎｏｄｅ１)).
ｂｅｌｉｅｆ(ｃｏｎｎｅｃｔｓ(ｎｏｄｅ２，ｎｏｄｅ４)).
を用いて、プラン１３を以下の２つのプラン（プラン１６とプラン１７）に分解する。
プラン１６：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
プラン１７：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ))
]
【０１１９】
また、アクションの実行により、移動ロボット１０の現在位置は、ｎｏｄｅ４からｎｏｄｅ２に変更になっている。したがって、実行中プランＤＢ１６４に格納されているプラン１４およびプラン１５実行前条件：
ａｔ(ｎｏｄｅ４)
は満たされなくなっている。そこで、プラン１４およびプラン１５は、今後再開することができないので、実行中プランＤＢ１６４から削除する。
【０１２０】
さらに、以上のアクションの実行が完了した時点で、外部から割込ゴール：
ｓｈｏｗ(ｅｘｈｉｂｉｔｉｏｎ１，ｈａｎａｋｏ)
が投入された場合について説明する。図１７は、この割込ゴールを模式的に示す図である。
【０１２１】
ゴール受付部１００が割込ゴールを受け付けると、実行管理部１２０は、割込ゴール待ち行列１１２に格納されているプラン（プラン１０とプラン１１とプラン１２とプラン１６とプラン１７）を中断中プランＤＢ１６６に移動する。すなわち、実行中プランＤＢ１６４のスタックにプッシュする。さらに、ゴール受付部１００が受け付けた割込ゴールがゴール保持部１１０の割込ゴール待ち行列１１２に保持される。
【０１２２】
そして、ゴール受付部１００が受け付けた割込ゴールに対するプランが作成される。作成されたプランは、実行中プランＤＢ１６４に格納される。ここでは、以下に示す４つのプラン（プラン３０、プラン３１、プラン３２およびプラン３３）が作成される。
プラン３０:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)，ｗｉｔｈ(ｈａｎａｋｏ)] ，[])，
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')，
ｅｆｆｅｃｔ([])
]
プラン３１:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｈａｎａｋｏ)
]
プラン３２:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ３)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ３))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ３，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｈａｎａｋｏ)
]
プラン３３:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｈａｎａｋｏ)
]
【０１２３】
作成された各プラン（プラン３０、プラン３１、プラン３２およびプラン３３）において最初に出現するタスクはいずれもアクションである。
【０１２４】
なお、本例においては、割込プラン実行中においても、ｗｉｔｈ(ｔａｒｏ)という条件、すなわち、「太郎は移動ロボット１０についてまわる」という条件は成立しているものとする。
【０１２５】
アクション実行部１７０は、作成された４つのプラン（プラン３０、プラン３１、プラン３２およびプラン３３）の中で、総コストが最小のとなるプランを実行する。ここでは、総コストが最小となるプラン３０において最初に出現するアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)
が実行される。これにより、移動ロボット１０は、図１８に示すように、ｎｏｄｅ２からｎｏｄｅ１に移動し、ｎｏｄｅ１に位置している。
【０１２６】
次に、このアクションの実行効果：
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])
にしたがい、信念ＤＢ１３０に格納されているａｔ(ｎｏｄｅ２)をａｔ(ｎｏｄｅ１)に書き換える。さらに、プラン３０、プラン３１およびプラン３２から、実行済みのアクションを削除する。実行済みアクションが削除された後のプラン３０、プラン３１およびプラン３２は、それぞれ以下のように記述される。
プラン３０:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)，ｗｉｔｈ(ｈａｎａｋｏ)] ，[])，
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')，
ｅｆｆｅｃｔ([])
]
プラン３１:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｈａｎａｋｏ)
]
プラン３２:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ３)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ３))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ３，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｈａｎａｋｏ)
]
【０１２７】
また、アクションの実行により、移動ロボット１０の現在位置は、ｎｏｄｅ２からｎｏｄｅ１に変更になっている。したがって、実行中プランＤＢ１６４に格納されているプラン３３の実行前条件：
ａｔ(ｎｏｄｅ２)
は満たされなくなっている。そこで、プラン３３は、今後再開することができないので、実行中プランＤＢ１６４から削除する。
【０１２８】
さらに、中断中プランＤＢ１６６のスタックにプッシュしてあるプラン（プラン１０とプラン１１とプラン１２とプラン１６とプラン１７）も変更する。具体的には、プラン１０とプラン１６から、以下のように、実行済みアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)
に関する情報を削除する。
プラン１０:
[
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
プラン１６：
[
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ))
]
【０１２９】
また、アクションの実行により、中断中プランＤＢ１６６に格納されているプラン１１、プラン１２およびプラン１７の実行前条件：
ａｔ(ｎｏｄｅ２)
は満たされなくなっている。そこで、プラン１１、プラン１２およびプラン１７は、今後再開することができないので、実行中プランＤＢ１６４から削除する。
【０１３０】
また、プラン１０の最初のタスクはアクションでない。そこでプラン１０をさらに分解する。これにより、以下のプラン（プラン１８，プラン１９およびプラン２０）が作成される。
プラン１８:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１] ，ｔａｒｏ))
]
プラン１９:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
プラン２０:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
また、プラン１６の最初のタスクもアクションでない。そこで、プラン１６を分解し、以下のプラン（プラン２１、プラン２２およびプラン２３）が作成される。
プラン２１：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)，ｗｉｔｈ(ｔａｒｏ)])，
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')，
ｅｆｆｅｃｔ([])，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ))
]
プラン２２：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ))
]
プラン２３：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ３)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ３))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ３，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ))
]
【０１３１】
さらに、割込プランの実行を継続している。この時点で実行中プランＤＢ１６４に格納されている割込プランは、プラン３０、プラン３１およびプラン３２である。このうちコストが最も低いプラン３０が実行される。具体的には、プラン３０の最初に出現するアクション：
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')
が実行される。そして、プラン３０から実行済みアクションが削除される。これにより、プラン３０は以下のように変更される。
プラン３０:
[
]
すなわち、プラン３０は空プランになる。したがって、実行されていないプランはなくなり、割込ゴールの実行がすべて完了する。このとき、実行管理部１２０は、実行中プランＤＢ１６４に格納されているすべてのプランを削除する。
【０１３２】
また、中断中プランＤＢ１６６に格納されている中断中のプランを更新する。この時点で中断中プランＤＢ１６６には、プラン１８、プラン１９、プラン２０、プラン２１、プラン２２およびプラン２３が格納されている。
【０１３３】
このうちプラン２１の最初に出現するアクションは、実行済みアクションと同一であるので、これを削除する。これにより、プラン２１は以下のように変更される。
プラン２１：
[
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
【０１３４】
さらに、プラン２１の最初のタスクに実行前条件と効果を付与する。これにより、プラン２１は以下のように変更される。
プラン２４：
[
ｐｒｅｃｏｎｄ([]，[])，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)，
ｅｆｆｅｃｔ([])
]
【０１３５】
実行中プランＤＢ１６４に格納されているこれ以外のプラン（プラン１８とプラン１９とプラン２０とプラン２２とプラン２３）の実行前条件は、なお成立している。したがって、これらのプランは継続して中断中プランＤＢ１６６に保持される。
【０１３６】
割込プランの実行が完了したので、次に実行管理部１２０は、中断中プランＤＢ１６６に格納されている中断中のプラン（プラン１８、プラン１９、プラン２０、プラン２２、プラン２３およびプラン２４）の実行を再開する。具体的には、これらのプランを中断中プランＤＢ１６６からポップし、実行中プランＤＢ１６４に移動する。
【０１３７】
そして、プラン１８、プラン１９、プラン２０、プラン２２、プラン２３およびプラン２４の中で、最も総コストの小さいプラン２４を実行する。具体的には、アクション：
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ))
を実行する。このアクションの実行により、タスク：
ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ])
のプランを作成し、実行する。
【０１３８】
その後、プラン２４から実行済みアクション：
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ))
に関する情報が削除される。これにより、プラン２４は以下のように空プランに変更される。これにより、再開したプランの実行が完了する。
プラン２４：
[
]
【０１３９】
続いて、タスク：
ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ)
をゴールとして、複数のプランが作成される。このうち総コストが最も小さいプランは、以下のプラン（プラン４０）である。
プラン４０：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)，ｗｉｔｈ(ｔａｒｏ)]，[])，
ｓｐｅａｋ(' これはロボット操作用のソフトウェアです。')，
ｅｆｆｅｃｔ([])，
ｐｒｅｃｏｎｄ([]，[])，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([]，ｔａｒｏ))，
ｅｆｆｅｃｔ([])
]
このように、ここで作成されたプラン４０には、太郎に対し展示物ｅｘｈｉｂｉｔｉｏｎ１を案内するタスクは含まれていない。これは、先の花子に対し展示物ｅｘｈｉｂｉｔｉｏｎ１を案内するタスクにおいて、同時に太郎に展示物ｅｘｈｉｂｉｔｉｏｎ１を案内するタスクが実行され、これに対するタスクが削除されたからである。すなわち、プラン４０においては、図１９に示すように、移動ロボット１０は、ｎｏｄｅ１からｎｏｄｅ２へ移動し、ｎｏｄｅ２において、太郎に対しまだ説明していない展示物：ｅｘｈｉｂｉｔｉｏｎ２を説明する。以下同様に、図６〜図１３を参照しつつ説明したプラン実行処理にしたがい、プランを実行していく。
【０１４０】
図２０は、実施の形態にかかる移動ロボット１０のハードウェア構成を示す図である。移動ロボット１０は、ハードウェア構成として、移動ロボット１０におけるプラン実行処理を実行するプラン実行プログラムなどが格納されているＲＯＭ５２と、ＲＯＭ５２内のプログラムに従って移動ロボット１０の各部を制御するＣＰＵ５１と、移動ロボット１０の制御に必要な種々のデータを記憶するＲＡＭ５３と、ネットワークに接続して通信を行う通信Ｉ／Ｆ５７と、各部を接続するバス６２とを備えている。
【０１４１】
先に述べた移動ロボット１０におけるプラン実行プログラムは、インストール可能な形式又は実行可能な形式のファイルでＣＤ−ＲＯＭ、フロッピー（Ｒ）ディスク（ＦＤ）、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録されて提供されてもよい。
【０１４２】
この場合には、プラン実行プログラムは、移動ロボット１０において上記記録媒体から読み出して実行することにより主記憶装置上にロードされ、上記ソフトウェア構成で説明した各部が主記憶装置上に生成されるようになっている。
【０１４３】
また、本実施の形態のプラン実行プログラムを、インターネット等のネットワークに接続されたコンピュータ上に格納し、ネットワーク経由でダウンロードさせることにより提供するように構成しても良い。
【０１４４】
以上、本発明を実施の形態を用いて説明したが、上記実施の形態に多様な変更または改良を加えることができる。
【０１４５】
そうした第１の変更例としてはプラン作成用知識ＤＢ１４０はさらに以下のプラン作成用知識を格納してもよい。
ｈｔｎ(ｅｘｐｌａｉｎ(Ｏｂｊｅｃｔ，Ｐｅｒｓｏｎ)，[
ａｔ(Ｎｏｄｅ)，
ｌｏｃａｔｉｏｎ(Ｏｂｊｅｃｔ，Ｎｏｄｅ)，
ｃｏｎｔｅｎｔｓ(Ｏｂｊｅｃｔ，Ｔｅｘｔ)
]，[
ｃａｌｌ(Ｐｅｒｓｏｎ，Ｎｏｄｅ)，
ｓｐｅａｋ(Ｔｅｘｔ)
]).
ａｃｔｉｏｎ(ｃａｌｌ(Ｐｅｒｓｏｎ，Ｎｏｄｅ)，[
ａｔ(Ｎｏｄｅ)
]，[
ｉｎｉｔｉａｔｅｓ(ｗｉｔｈ(Ｐｅｒｓｏｎ))
])
【０１４６】
ここで、「ｃａｌｌ(Ｐｅｒｓｏｎ)」というアクションは、ロボットがＮｏｄｅにいるときに実行された場合には、館内放送などで人：Ｐｅｒｓｏｎをロボットがいる場所：Ｎｏｄｅに呼び出すものである。したがって、このアクションによりｗｉｔｈ(Ｐｅｒｓｏｎ)（ロボットと人：Ｐｅｒｓｏｎが一緒にいる）が成立する。ただし、ここでＰｅｒｓｏｎとＮｏｄｅは変数である。
【０１４７】
例えば、割込ゴールにより花子に展示物を説明している間に、太郎が離れてしまったとする。この場合、「太郎に展示物の説明をする」というプランに対する実行前条件「太郎と一緒にいる」が満たされない。したがって、このプランを再開することができなくなってしまう。これに対し、本例のように、太郎を呼び出すことができれば、太郎を読み戻した後に、「太郎に展示物を説明する」というプランを実行することができる。なお、アクションｃａｌｌ(Ｐｅｒｓｏｎ，Ｎｏｄｅ)の実行には一定のコストがかかることとする。
【０１４８】
また、上記プラン作成用知識は、「対象物：Ｏｂｊｅｃｔに関して、人：Ｐｅｒｓｏｎに説明をする」というタスク：
ｅｘｐｌａｉｎ(Ｏｂｊｅｃｔ，Ｐｅｒｓｏｎ)
を実行するには、たとえ、実行前条件：
ｗｉｔｈ(Ｐｅｒｓｏｎ)
が成立しなくとも、以下に示す３つの実行前条件（実行前条件１、実行前条件２および実行前条件３）が成り立つならば、「人：Ｐｅｒｓｏｎに対し、現在ロボットがいるノード：Ｎｏｄｅにくるように館内放送し、実際にくるまで待つ」というタスク：
ｃａｌｌ(Ｐｅｒｓｏｎ)
を実行したあとに、「対象物：Ｏｂｊｅｃｔの説明文の文字列：Ｔｅｘｔを音声出力する」というタスク：
ｓｐｅａｋ(Ｔｅｘｔ) 
を実行すればよいことを示している。ただし、ＰｅｒｓｏｎとＯｂｊｅｃｔとＮｏｄｅとＴｅｘｔは変数である。
【０１４９】
上述の実行前条件１は、「現在位置がノード：Ｎｏｄｅである」であり、以下のように記述される。
ａｔ(Ｎｏｄｅ)
また、実行前条件２は、「対象物：Ｏｂｊｅｃｔの位置が現在位置のノード：Ｎｏｄｅである」であり、以下のように記述される。
ｌｏｃａｔｉｏｎ(Ｏｂｊｅｃｔ，Ｎｏｄｅ)）
また、実行前条件３は、「対象物：Ｏｂｊｅｃｔの説明文がＴｅｘｔである」であり、以下のように記述される。
ｃｏｎｔｅｎｔｓ(Ｏｂｊｅｃｔ，Ｔｅｘｔ)
【０１５０】
さらに、実施の形態において説明したのと同様に、ゴール受付部１００が「対象物：ｅｘｈｉｂｉｔｉｏｎ１とｅｘｈｉｂｉｔｉｏｎ２の前で人：ｔａｒｏに各対象物の説明する」といいうタスク：
ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１，ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）
を通常ゴールとして受け付けたとする。この場合には、プラン作成部１５０は、実施の形態において説明したのと同様に、プラン５、プラン６、プラン８、プラン１０、プラン１１、プラン１２を作成する。さらに上述のプラン作成用知識に基づいて、以下に示すプラン（プラン１２ｂ）を作成する。
プラン１２ｂ:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ６)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ４))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ６))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ４)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ４))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｃａｌｌ(ｔａｒｏ，ｎｏｄｅ２)，
ｓｐｅａｋ(' これはロボット操作用のソフトウェアです。')，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ))，
]
【０１５１】
次に、プラン１２が選択され、アクション実行部１７０はプラン１２において最初に出現するアクションを実行する。プラン１２ｂの場合の移動距離とプラン１２の移動距離は等しいが、プラン１２ｂにおいてはタスク：
ｃａｌｌ(ｔａｒｏ)
に対するコスト分だけ総コストが大きくなる。このため、プラン１２ｂは選択されずプラン１２が選択される。
【０１５２】
次に、実施の形態において説明したのと同様に、プラン１２にしたがい、アクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ６，ｎｏｄｅ４)
が実行され、次にアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ４，ｎｏｄｅ２)
が実行される。
【０１５３】
なお、このとき実行中プランＤＢ１６４には、プラン１０とプラン１１とプラン１２とプラン１６とプラン１７に加え、プラン１２ｂも保持されている。なお、上記２つのアクションが実行された後は、プラン１２ｂから実行済みのアクションが削除されている。更新後のプラン１２ｂは以下のように記述される。
プラン１２ｂ:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｃａｌｌ(ｔａｒｏ，ｎｏｄｅ２)，
ｓｐｅａｋ(' これはロボット操作用のソフトウェアです。')，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)，
]
【０１５４】
さらに、実施の形態において説明したのと同様に、この時点で外部から割込ゴール：
ｓｈｏｗ(ｅｘｈｉｂｉｔｉｏｎ１，ｈａｎａｋｏ)
が投入されたとする。この場合には、実行管理部１２０は、実行中プランＤＢ１６４に保持されているプラン（プラン１０とプラン１１とプラン１２とプラン１２ｂプラン１６とプラン１７）をまとめて中断中プランＤＢ１６６のスタックにプッシュする。
【０１５５】
次に、プラン作成部１５０は、割込ゴールに対応する割込プランを作成する。具体的には、実施の形態において説明したように、プラン３０とプラン３１とプラン３２とプラン３３とプラン３４が作成される。さらに本例においては上述のプラン作成用知識に基づいて、以下に示すプラン３０ｂが作成される。
プラン３０ｂ:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)] ，[])，
ｃａｌｌ(ｈａｎａｋｏ，ｎｏｄｅ１)，
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')
]
【０１５６】
そして、これらのプランのうちプラン３０が選択され、アクション実行部１７０はプラン３０のうち最初に出現するアクションを実行する。なお、プラン３０ｂとプラン３０は移動距離に関してはコストは等しいが、プラン３０ｂはｃａｌｌ(ｈａｎａｋｏ)の分だけコストが大きくなる。したがって、総コストは、プラン３０ｂの方が大きくなる。このため、プラン３０ｂは選択されず、プラン３０が選択される。
【０１５７】
さらに、プラン３０にしたがい、アクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)
を実行し、次にアクション：
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')
を実行する。これにより、割込ゴールの実行が完了する。
【０１５８】
なお、実施の形態においては、割込ゴールに基づいて、花子に展示物を説明するアクションを実行する間、太郎は移動ロボット１０と共に移動することが前提となっていたが、本例においては、太郎は花子と行動を共にしない。したがってアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)
を実行した後は、信念：
ｗｉｔｈ(ｔａｒｏ)
は成立しなくなる。
【０１５９】
そこで、まず、アクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)
を実行した後、実施の形態において説明したのと同様に、プラン１０とプラン１６から、実行済みアクション：
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)
を削除する。
【０１６０】
これにより、プラン１０およびプラン１６は以下のように変更される。
プラン１０:
[
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）)
]
プラン１６：
[
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
【０１６１】
なお、アクションを実行することにより、移動ロボット１０の位置は、ｎｏｄｅ２からｎｏｄｅ１に変更されるため、プラン１１、プラン１２、プラン１２ｂおよびプラン１７においては、実行前条件：
ａｔ(ｎｏｄｅ２)
が成立しなくなる。そこで、これらのプラン（プラン１１、プラン１２、プラン１２ｂおよびプラン１７）を中断中プランＤＢ１６６から削除する。
【０１６２】
また、プラン１０において最初に出現するタスクは、アクションではない。そこで、プラン１０をさらに分解する。これにより、以下のプラン（プラン１８およびプラン１９）が作成される。
プラン１８:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）
]
プラン１９:
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ２)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ１))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ２))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ２，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ１]，ｔａｒｏ）
]
【０１６３】
また、プラン１６において最初に出現するタスクはアクションでない。そこで、プラン１６をさらに分解する。これにより、以下のプラン（プラン２１ｂ、プラン２２およびプラン２３）が作成される。
プラン２１ｂ：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｃａｌｌ(ｔａｒｏ，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ｗｉｔｈ(ｔａｒｏ))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)，ｗｉｔｈ(ｔａｒｏ)]，[])，
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')，
ｅｆｆｅｃｔ([])，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
プラン２２：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ２)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ２))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ２，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
プラン２３：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｇｏｔｏＮｅｘｔＮｏｄｅ(ｎｏｄｅ１，ｎｏｄｅ３)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ａｔ(ｎｏｄｅ３))，ｔｅｒｍｉｎａｔｅｓ(ａｔ(ｎｏｄｅ１))])，
ｇｏｔｏＮｏｄｅＷｉｄｅ(ｎｏｄｅ３，ｎｏｄｅ１)，
ｅｘｐｌａｉｎ(ｅｘｈｉｂｉｔｉｏｎ１，ｔａｒｏ)，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
]
【０１６４】
アクションを実行した後は、ｗｉｔｈ(ｔａｒｏ)は成立しない。したがって、実施の形態において、この時点で作成されたプラン２１は作成されず、これにかえて、プラン２１ｂが作成される。図２１は、プラン２１ｂを模式的に示す図である。
【０１６５】
次に、アクション：
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')
を実行する。本例においては、この後、プラン１８、プラン１９、プラン２０、プラン２１ｂ、プラン２２およびプラン２３は、継続して中断中プランＤＢ１６６に保持される。
【０１６６】
なお、プラン２１ｂの先頭のアクションは、ｃａｌｌ(ｔａｒｏ，ｎｏｄｅ１)である。したがって、プラン２１ｂからは実行済みアクション：
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')
に関する情報は削除できない。なお、このとき、太郎は、移動ロボット１０とともに移動しておらず、ｎｏｄｅ１にいない。したがって、太郎は、ｎｏｄｅ１において、展示物ｅｘｈｉｂｔｉｏｎ１の説明は聞いていない。したがって、中断中のプランが再開したときには、太郎に展示物ｅｘｈｉｂｔｉｏｎ１の説明をするアクションを実行する必要がある。
【０１６７】
割込ゴールに対するプランの実行がすべて完了すると、次に実行管理部１２０は、中断中プランＤＢ１６６に格納されていたプラン（プラン１８、プラン１９、プラン２０、プラン２１ｂ、プラン２２およびプラン２３）を実行中プランＤＢ１６４に移動する。そして、通常ゴールに対するプランの実行を再開する。
【０１６８】
このときのアクション：
ｃａｌｌ(ｔａｒｏ，ｎｏｄｅ)
のコストは、移動距離に対するコストに比較して小さいこととする。この場合、プラン２１ｂが最もコストの小さいプランとして選択される。そして、プラン２１ｂのアクション：
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
に実行前条件と効果が付与される。これにより以下に示すプラン（プラン２４ｂ）が作成される。
プラン２４ｂ：
[
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)]，[])，
ｃａｌｌ(ｔａｒｏ，ｎｏｄｅ１)，
ｅｆｆｅｃｔ([ｉｎｉｔｉａｔｅｓ(ｗｉｔｈ(ｔａｒｏ))])，
ｐｒｅｃｏｎｄ([ａｔ(ｎｏｄｅ１)，ｗｉｔｈ(ｔａｒｏ)]，[])，
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')，
ｅｆｆｅｃｔ([])，
ｐｒｅｃｏｎｄ([])，
ｃｈａｎｇｅＧｏａｌ(ｓｈｏｗＡｒｏｕｎｄ([ｅｘｈｉｂｉｔｉｏｎ２]，ｔａｒｏ）)
ｅｆｆｅｃｔ([])
]
【０１６９】
以下このプラン２４ｂを実行していくが、アクション：
ｃａｌｌ(ｔａｒｏ，ｎｏｄｅ１)
の実行により、花子と行動を共にしていなかった太郎を館内案内放送等でｎｏｄｅ１に呼び、アクション：
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')
を実行する点が、実施の形態と異なる。
【０１７０】
すなわち、実施の形態においては、太郎は花子と行動を共にしており、アクション：
ｓｐｅａｋ(' これは世界初の日本語ワープロです。')
は、花子と太郎が移動ロボット１０と一緒にいるときに一度しか実行されないのに対し、本例においては、このアクションを２度実行する。すなわち、本例においては、移動ロボット１０が花子のみと一緒にいるときに一度実行し、その後、別の場所にいる太郎を呼び、再びこのアクションを実行する。
【０１７１】
このように、本例においては、割込プランの実行中に、中断しているプランを再開できなくなった場合には、再開可能となるようなアクションを追加することにより、中断中のプランを実行することができる。
【図面の簡単な説明】
【０１７２】
【図１】本実施の形態にかかるプラン作成装置を備えた移動ロボット１０の機能構成を示す図である。
【図２】プランとアクションの関係を示す図である。
【図３】信念ＤＢ１３０に格納されているトポロジカル地図を模式的に示す図である。
【図４】プラン作成用知識ＤＢ１４０が格納しているプラン作成用知識を模式的に示す図である。
【図５】実施の形態にかかる移動ロボット１０がプランを実行するときのプラン実行処理を示すフローチャートである。
【図６】図５において説明した実行後プラン更新処理（ステップＳ１１２）における詳細な処理を示すフローチャートである。
【図７】図６において説明したプラン更新処理（ステップＳ２０８）における詳細な処理を示すフローチャートである。
【図８】図７において説明した実行前条件確認処理（ステップＳ２２０）における詳細な処理を示すフローチャートである。
【図９】第１の条件を説明するための図である。
【図１０】第２の条件を説明するための図である。
【図１１】図７において説明したタスク分解処理（ステップＳ２２８）における詳細な処理を示すフローチャートである。
【図１２】図５において説明した再開時プラン更新処理（ステップＳ１２４）における詳細な処理を示すフローチャートである。
【図１３】図５において説明したゴール処理（ステップＳ１２８）における詳細な処理を示すフローチャートである。
【図１４】通常ゴールの一例を模式的に示す図である。
【図１５】アクション実行後の状態を模式的に示す図である。
【図１６】アクション実行後の状態を模式的に示す図である。
【図１７】割込ゴールの一例を模式的に示す図である。
【図１８】アクション実行後の状態を模式的に示す図である。
【図１９】アクション実行後の状態を模式的に示す図である。
【図２０】実施の形態にかかる移動ロボット１０のハードウェア構成を示す図である。
【図２１】プラン２１ｂを模式的に示す図である。
【符号の説明】
【０１７３】
５１  ＣＰＵ
５２  ＲＯＭ
５３  ＲＡＭ
５７  通信Ｉ／Ｆ
６２  バス
１０  移動ロボット
１００  ゴール受付部
１１０  ゴール保持部
１１２  割込ゴール待ち行列
１１４  通常ゴール待ち行列
１２０  実行管理部
１３０  信念ＤＢ
１４０  プラン作成用知識ＤＢ
１５０  プラン作成部
１６０  プランＤＢ制御部
１６２  割込プランＤＢ
１６４  実行中プランＤＢ
１６６  中断中プランＤＢ
１７０  アクション実行部
【図１】
2007048094.tif 000003
【図２】
2007048094.tif 000004
【図３】
2007048094.tif 000005
【図４】
2007048094.tif 000006
【図５】
2007048094.tif 000007
【図６】
2007048094.tif 000008
【図７】
2007048094.tif 000009
【図８】
2007048094.tif 000010
【図９】
2007048094.tif 000011
【図１０】
2007048094.tif 000012
【図１１】
2007048094.tif 000013
【図１２】
2007048094.tif 000014
【図１３】
2007048094.tif 000015
【図１４】
2007048094.tif 000016
【図１５】
2007048094.tif 000017
【図１６】
2007048094.tif 000018
【図１７】
2007048094.tif 000019
【図１８】
2007048094.tif 000020
【図１９】
2007048094.tif 000021
【図２０】
2007048094.tif 000022
【図２１】
2007048094.tif 000023