(57)【要約】【課題】  プラン実行中における他の要求の割込みを受け付けて、その割込み要求に応じて現在実行中のプランを柔軟に変更可能とする。【解決手段】  ユーザからのタスクの実行要求を要求タスクとして受け付け（Ｓ１）、タスク分解ルールに従って要求タスクを分解し、実行可能なタスクからなるプランを作成する（Ｓ２）。プランに従って各タスクを１つずつ実行する（Ｓ３）。プラン実行時において、別の要求タスクを受け付けた場合（Ｓ４のＹＥＳ）には、その要求タスクを実行中のプランに挿入し（Ｓ５）、挿入された要求タスクのタスク分解処理を行い、実行可能なタスクからなる新たなプランを作成する（Ｓ２）。プラン中のタスクを全て実行した時点（Ｓ６のＹＥＳ）で、当該プランに関する処理を終了する。【選択図】  図３
2006012072.tif 000002
【特許請求の範囲】
【請求項１】
ユーザインタフェース部、データ処理部、データ格納部を備えたコンピュータを利用して、タスクの実行要求に基づいてプランを作成し、この作成したプランを実行するプラン実行方法において、
前記ユーザインタフェース部により、前記タスクの実行要求を要求タスクとして受け付ける要求受付ステップと、
前記データ処理部により、前記データ格納部に予め格納されたタスク分解ルールに従って、前記要求タスクをより具体的なタスクに分解するタスク分解処理を行い、１つ以上のそのまま実行可能なタスクの実行順序を表現するプランを作成するプラン作成ステップと、
前記データ処理部により、前記データ格納部に前記プランを格納するプラン格納ステップと、
前記データ処理部により、前記プランに従って、当該プラン中の前記タスクの実行順序を決定し、この実行順序でタスク実行の指示を行うプラン実行管理ステップと、
前記データ処理部または前記ユーザインタフェース部により、前記タスク実行の指示に従って、前記プラン中の各タスクを順次実行するタスク実行ステップを有し、
前記プラン作成ステップは、前記プラン中の各タスクの実行時に他の要求タスクが受け付けられた場合に、当該要求タスクを実行中の当該プランに挿入するタスク挿入処理を行い、この挿入した当該要求タスクに対して前記タスク分解処理を行うことで当該プランを修正するステップを含み、
前記プラン実行管理ステップは、実行中の前記プランが修正された場合に、修正後の当該プランに従って前記タスク実行の指示を行うステップを含み、
前記プランは、複数個のタスクの並び順でこれらのタスクの前記実行順序を表現すると共に、連続して並ぶ２個のタスクをタスクペアと定義した場合に、各タスクペア中の２個のタスク間に、他のタスクを挿入可能な弱結合と、他のタスクの挿入を不可とする強結合、という２つの結合のいずれか一方が存在することを表現するものであることを特徴とするプラン実行方法。
【請求項２】
前記タスク挿入処理は、前記要求タスクに対して前記プラン中において予め設定された挿入位置条件を満足する部分の有無について挿入位置判定を行う挿入位置判定処理と、当該挿入位置判定の結果に応じて挿入位置を決定して当該要求タスクを挿入する挿入実行処理を含み、
前記挿入位置条件は、タスクペア中の２個のタスク間が弱結合でありかつ後タスクが未実行であるという内容の基本条件を含み、
前記挿入位置判定処理は、少なくとも前記基本条件を満足する前記タスクペアが存在するか否かの判定を行うことを特徴とする請求項１に記載のプラン実行方法。
【請求項３】
前記挿入実行処理は、前記挿入位置を決定して前記要求タスクを挿入するタスク挿入方式として、前記挿入位置条件を満足するタスクペア中の２個のタスク間に当該要求タスクを当該２個のタスクと前記弱結合となるように挿入する弱結合挿入方式、当該２個のタスク間にそれらの少なくとも一方と前記強結合となるように挿入する強結合挿入方式、実行中の前記プランの末尾に当該要求タスクを挿入する末尾挿入方式、という３つの方式の中から選択された方式により当該要求タスクの挿入を実行することを特徴とする請求項２に記載のプラン実行方法。
【請求項４】
前記挿入位置条件は、前記基本条件に加えて、当該基本条件を満足するタスクペア中のタスクと前記要求タスクとの優先度の高低に関する優先度条件、または、当該基本条件を満足するタスクペア中のタスクと当該要求タスクとの関連性の有無に関する関連性条件を含み、
前記挿入位置判定処理は、前記基本条件を満足する前記タスクペアが存在する場合に、このタスクペアが前記優先度条件または前記関連性条件を満足するか否かの判定を行うことを特徴とする請求項３に記載のプラン実行方法。
【請求項５】
前記優先度条件は、「基本条件を満足するタスクペア中の後タスク以降に要求タスクより優先度の高いタスクが存在しない」という内容を含む条件であり、
前記挿入実行処理は、前記優先度条件を満足する前記タスクペアが存在する場合に、前記弱結合挿入方式により当該タスクペア中の２個のタスク間に前記要求タスクを挿入することを特徴とする請求項４に記載のプラン実行方法。
【請求項６】
前記関連性条件は、「基本条件を満足するタスクペア中の前タスクが要求タスクと関連性がある」という内容を含む条件であり、
前記挿入実行処理は、前記関連性条件を満足する前記タスクペアが存在する場合に、前記弱結合挿入方式または前記強結合挿入方式により当該タスクペア中の２個のタスク間に前記要求タスクを挿入することを特徴とする請求項４または請求項５に記載のプラン実行方法。
【請求項７】
前記挿入位置判定処理は、前記優先度条件および前記関連性条件のいずれか一方の条件を第１条件、他方の条件を第２条件とした場合に、当該第１条件を満足する前記タスクペアが存在するか否かの判定を行う第１の判定処理と、当該第１条件を満足する当該タスクペアが存在しない場合に、当該第２条件を満足する当該タスクペアが存在するか否かの判定を行う第２の判定処理を含むことを特徴とする請求項４乃至請求項６のいずれか１項に記載のプラン実行方法。
【請求項８】
前記挿入実行処理は、前記挿入位置条件を満足する前記タスクペアが複数存在する場合に、前記実行順序が最先となる１つのタスクペアを選択し、このタスクペア中の２個のタスク間を前記挿入位置に決定して前記要求タスクを挿入することを特徴とする請求項２乃至請求項７のいずれか１項に記載のプラン実行方法。
【請求項９】
前記タスクの具体化のレベルにより、前記要求タスクとして受け付け可能な最も抽象的なタスクを抽象レベルタスク、それ以上具体化できないそのまま実行可能な最小処理単位としてのタスクを実行レベルタスク、と定義した場合に、前記ルール格納部には、要求タスクとして受け付け可能な全てのタスクを最終的に実行レベルタスクに分解するために必要なルールが前記タスク分解ルールとして予め格納されていることを特徴とする請求項１乃至請求項８のいずれか１項に記載のプラン実行方法。
【請求項１０】
前記抽象レベルタスクよりも具体的で、かつ、前記実行レベルタスクよりも抽象的なタスクを中間レベルタスクと定義した場合に、前記ルール格納部には、抽象レベルタスクを中間レベルタスクに分解するために必要な基本分解ルールと、中間レベルタスクを実行レベルタスクに分解するために必要な最終分解ルールという少なくとも２段階のレベルのルールが前記タスク分解ルールとして予め格納されていることを特徴とする請求項９に記載のプラン実行方法。
【請求項１１】
前記ルール格納部には、前記タスク分解処理による分解対象となる前記タスクが何も実行する必要のないタスクであることを示す実行不要ルールが、タスク分解ルールの一部として予め格納され、
前記タスク分解処理は、前記分解対象となるタスクについて前記実行不要ルールが存在する場合に当該タスクを消去することを特徴とする請求項９または請求項１０に記載のプラン実行方法。
【請求項１２】
前記プランは、前記強結合を表現する強結合種別記述または前記弱結合を表現する弱結合種別記述に対して、同じ種別の結合で連続する複数個のタスクを特定するタスク特定記述を組み合わせることにより、当該複数のタスクについて全てのタスクペアに前記強結合が存在することを表現する強結合記述、および、当該複数のタスクについて全てのタスクペアに前記弱結合が存在することを表現する弱結合記述、という２つの結合記述のいずれか一方を表現するものであることを特徴とする請求項１乃至請求項１１のいずれか１項に記載のプラン実行方法。
【請求項１３】
前記タスク分解ルールは、前記タスク分解処理による分解対象となるタスクを分解元タスク、結果として得られるタスクを分解先タスクと定義した場合に、分解元タスクと分解先タスクの関係を表現する分解関係記述の前後に、分解元タスクを表現する分解元タスク記述と分解先タスクを表現する分解先タスク記述を組み合わせることにより、当該分解元タスクが当該分解先タスクに分解可能であることを表現するものであることを特徴とする請求項１乃至請求項１２のいずれか１項に記載のプラン実行方法。
【請求項１４】
タスクの実行要求に基づいてプランを作成し、この作成したプランを実行するプラン実行システムにおいて、
前記タスクの実行要求を要求タスクとして受け付ける要求受付部と、
予め設定されたタスク分解ルールに従って、前記要求タスクをより具体的なタスクに分解するタスク分解処理を行い、１つ以上のそのまま実行可能なタスクの実行順序を表現するプランを作成するプラン作成部と、
前記タスク分解ルールを格納するルール格納部と、
前記プランを格納するプラン格納部と、
前記プランに従って、当該プラン中の前記タスクの実行順序を決定し、この実行順序でタスク実行の指示を行うプラン実行管理部と、
前記タスク実行の指示に従って、前記プラン中の各タスクを順次実行するタスク実行部を備え、
前記プラン作成部は、前記プラン中の各タスクの実行時に他の要求タスクが受け付けられた場合に、当該要求タスクを実行中の当該プランに挿入するタスク挿入処理を行い、この挿入した当該要求タスクに対して前記タスク分解処理を行うことで、当該プランを修正するように構成され、
前記プラン実行管理部は、実行中の前記プランが修正された場合に、修正後の当該プランに従って前記タスク実行の指示を行うように構成され、
前記プランは、複数個のタスクの並び順でこれらのタスクの前記実行順序を表現すると共に、連続して並ぶ２個のタスクをタスクペアと定義した場合に、各タスクペア中の２個のタスク間に、他のタスクを挿入可能な弱結合と、他のタスクの挿入を不可とする強結合、という２つの結合のいずれか一方が存在することを表現するものであることを特徴とするプラン実行システム。
【請求項１５】
ユーザインタフェース部、データ処理部、データ格納部を備えたコンピュータを利用して、タスクの実行要求に基づいてプランを作成し、この作成したプランを前記コンピュータに実行させるプラン実行プログラムにおいて、
前記ユーザインタフェース部により、前記タスクの実行要求を要求タスクとして受け付ける要求受付機能と、
前記データ処理部により、前記データ格納部に予め格納されたタスク分解ルールに従って、前記要求タスクをより具体的なタスクに分解するタスク分解処理を行い、１つ以上のそのまま実行可能なタスクの実行順序を表現するプランを作成するプラン作成機能と、
前記データ処理部により、前記データ格納部に前記プランを格納するプラン格納機能と、
前記データ処理部により、前記プランに従って、当該プラン中の前記タスクの実行順序を決定し、この実行順序でタスク実行の指示を行うプラン実行管理機能と、
前記データ処理部または前記ユーザインタフェース部により、前記タスク実行の指示に従って、前記プラン中の各タスクを順次実行するタスク実行機能、
を前記コンピュータに実現させ、
前記プラン作成機能は、前記プラン中の各タスクの実行時に他の要求タスクが受け付けられた場合に、当該要求タスクを実行中の当該プランに挿入するタスク挿入処理を行い、この挿入した当該要求タスクに対して前記タスク分解処理を行うことで、当該プランを修正する機能を含み、
前記プラン実行管理機能は、実行中の前記プランが修正された場合に、修正後の当該プランに従って前記タスク実行の指示を行う機能を含み、
前記プランは、複数個のタスクの並び順でこれらのタスクの前記実行順序を表現すると共に、連続して並ぶ２個のタスクをタスクペアと定義した場合に、各タスクペア中の２個のタスク間に、他のタスクを挿入可能な弱結合と、他のタスクの挿入を不可とする強結合、という２つの結合のいずれか一方が存在することを表現するものであることを特徴とするプラン実行プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ上でタスクの実行要求に基づいてプランを作成し、作成したプランを実行するプラン実行技術に関し、特に、プラン実行中における他の要求の割込みに応じて実行中のプランを柔軟に変更可能とするための改良に関する。
【背景技術】
【０００２】
近年のコンピュータ技術の著しい発展に伴い、多種多様な分野における各種の装置やシステムを制御対象としてコンピュータ制御が広く活用されるに至っている。特に、現実空間でロボットを自立的に活動させる場合や、コンピュータネットワーク上を移動しながら自立的に活動する移動エージェントにより移動先のコンピュータを制御する場合等の、状況に応じて変化する複雑な動作の制御においては、ユーザの要求に応じたリアルタイムな制御が要求される。
【０００３】
例えば、特許文献１においては、ユーザの要求に応じてプランを作成し、この作成したプランに基づいてネットワーク上を移動しながら活動する移動エージェントのシステムが記載されている。このシステムにおいては、ユーザの要求に応じたプランをリアルタイムに動的に作成して実行することで、移動エージェントのリアルタイム制御を実現している。
【０００４】
一方で、このようなリアルタイム制御に限らず、ユーザの要求に応じて作成したプランを実行する各種のコンピュータ制御においては、本質的に、プラン実行中にユーザから他の要求が割込みとして与えられる場合がある。従来、このようなプラン実行中の割込みを処理する技術としては、特許文献２に記載されているような、複数のプロセッサ中からその割込みを処理可能なプロセッサを選択して割込み処理を行わせる技術や、特許文献３に記載されているような、複数の割込みに対してその処理を実行するための優先順位を付与する技術等が存在している。
【０００５】
【特許文献１】特開平１０−１４９２８７号公報
【特許文献２】特開平９−２８２１８８号公報
【特許文献３】特開平６−１８７１７１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、上記のような従来技術には、次のような問題点がある。まず、特許文献１においては、プラン実行中にユーザから他の要求が与えられた場合でも、その要求の割込みを受け付けることはできない。また、特許文献２においては、割込みを受け付けても処理するプロセッサを選択するだけであり、受け付けた割込みに応じて現在実行中のプランを変更することはできない。また、特許文献３においては、複数の割込みを受け付けても処理するための優先順位を付与するだけであり、受け付けた割込みに応じて現在実行中のプランを変更することはできない。
【０００７】
本発明は、上記のような従来技術の問題点を解決するために提案されたものであり、その目的は、プラン実行中における他の要求の割込みを受け付けて、その割込み要求に応じて現在実行中のプランを柔軟に変更可能な、ユーザ満足度の高いコンピュータ制御を実現するプラン実行方法とそのシステム、プログラムを提供することである。
【課題を解決するための手段】
【０００８】
本発明は、プランの実行中に他の要求が与えられた場合に、この要求を受け付けて現在実行中のプランに挿入し、実行可能なタスクに分解することによって、新たな要求に応じてプランを柔軟に変更できるようにしたものである。すなわち、実行中のプランであっても、ユーザから新たな要求が与えられる毎にこの与えられた要求を実現するための最適プランへと動的に変更可能であるため、ユーザ満足度の高いコンピュータ制御を実現することができる。
【０００９】
本発明のプラン実行方法は、ユーザインタフェース部、データ処理部、データ格納部を備えたコンピュータを利用して、タスクの実行要求に基づいてプランを作成し、この作成したプランを実行するプラン実行方法において、要求受付ステップ、プラン作成ステップ、プラン格納ステップ、プラン実行管理ステップ、タスク実行ステップ、を有することを特徴としている。
【００１０】
ここで、要求受付ステップは、ユーザインタフェース部により、タスクの実行要求を要求タスクとして受け付けるステップである。プラン作成ステップは、データ処理部により、データ格納部に予め格納されたタスク分解ルールに従って、要求タスクをより具体的なタスクに分解するタスク分解処理を行い、１つ以上のそのまま実行可能なタスクの実行順序を表現するプランを作成するステップである。プラン格納ステップは、データ処理部により、データ格納部にプランを格納するステップである。プラン実行管理ステップは、データ処理部により、プランに従って、当該プラン中のタスクの実行順序を決定し、この実行順序でタスク実行の指示を行うステップである。タスク実行ステップは、データ処理部またはユーザインタフェース部により、タスク実行の指示に従って、プラン中の各タスクを順次実行するステップである。
【００１１】
さらに、プラン作成ステップは、プラン中の各タスクの実行時に他の要求タスクが受け付けられた場合に、当該要求タスクを実行中の当該プランに挿入するタスク挿入処理を行い、この挿入した当該要求タスクに対してタスク分解処理を行うことで当該プランを修正するステップを含む。また、プラン実行管理ステップは、実行中の前記プランが修正された場合に、修正後の当該プランに従ってタスク実行の指示を行うステップを含む。そしてまた、プランは、複数個のタスクの並び順でこれらのタスクの実行順序を表現すると共に、連続して並ぶ２個のタスクをタスクペアと定義した場合に、各タスクペア中の２個のタスク間に、他のタスクを挿入可能な弱結合と、他のタスクの挿入を不可とする強結合、という２つの結合のいずれか一方が存在することを表現するものである。
【００１２】
また、本発明のプラン実行システムおよびプラン実行プログラムは、上記のプラン実行方法の特徴を、システムおよびコンピュータプログラムの観点からそれぞれ表現したものである。
【００１３】
なお、本明細書中で重要な用語の定義は次の通りである。
「タスク」は、コンピュータのオペレーティングシステムで処理する単位を意味しているが、本明細書中における「タスク」は、それ以上具体化できないそのまま実行可能な処理単位としてのタスクだけでなく、それ自体が複数個のタスクの実行順序を表現するプランをも含む。また、「タスク」は、上記したような処理単位となるタスクまたはプランに置換可能なより抽象的なタスク、あるいは、実行すべき処理内容として与えられたより抽象的な要求をも含む広い概念である。
【００１４】
「要求タスク」は、タスクのうち、実行すべき処理内容として与えられた要求を意味しており、一般的には、さらに具体化可能な抽象的な要求であるが、それ以上具体化できないそのまま実行可能な最小処理単位のタスクが要求タスクとして与えられる場合もある。
【発明の効果】
【００１５】
以上のような本発明によれば、プラン実行中における他の要求の割込みを受け付けて、この割込み要求に応じて現在実行中のプランを柔軟に変更可能な、ユーザ満足度の高いコンピュータ制御を実現するプラン実行方法とそのシステム、プログラムを提供することができる。
【発明を実施するための最良の形態】
【００１６】
［１．システム構成］
図１は、本発明を適用したプラン実行システムの構成の概略を示すブロック図である。この図１に示すように、プラン実行システムは、要求受付部１１０、プラン作成部１２０、ルール格納部１３０、プラン格納部１４０、プラン実行管理部１５０、タスク実行部１６０、等を備えている。各部の機能は次の通りである。
【００１７】
要求受付部１１０は、ユーザから与えられたタスクの実行要求を要求タスクとして受け付ける。プラン作成部１２０は、予め設定されたタスク分解ルールに従って、要求タスクをより具体的なタスクに分解するタスク分解処理を行い、要求タスクを具体的に実行するためのプランとして、１つ以上のそのまま実行可能なタスクの実行順序を表現するプランを作成する。プラン作成部１２０はまた、プラン中の各タスクの実行時に他の要求タスクが受け付けられた場合に、当該要求タスクを実行中の当該プランに挿入するタスク挿入処理を行い、挿入した当該要求タスクに対してタスク分解処理を行うことで、当該プランを修正する。
【００１８】
ルール格納部１３０には、プラン作成部１２０によるタスク分解処理に使用されるタスク分解ルールが予め格納される。プラン格納部１４０には、プラン作成部１２０で作成されたプランが格納される。
【００１９】
プラン実行管理部１５０は、作成されたプランに従って、当該プラン中のタスクの実行順序を決定し、この実行順序でタスク実行の指示を行うことにより、タスクの実行を管理する。プラン実行管理部１５０はまた、実行中のプランが修正された場合に、この修正後の当該プランに従ってタスク実行の指示を行う。タスク実行部１６０は、タスク実行の指示に従って、プラン中の各タスクを順次実行する。
【００２０】
なお、このようなプラン実行システムは、具体的には、コンピュータのメインメモリとそれに記憶されたプラン実行用として特化されたプログラム、そのプログラムによって制御されるＣＰＵなどのデータ処理部、必要なデータを格納する補助記憶装置などのデータ格納部、マウスやキーボード、ディスプレイなどのユーザインタフェース部、等により実現される。ここで挙げたハードウェア資源は、コンピュータが一般的に備えている基本的な構成要素であるため、これ以上の説明は省略する。
【００２１】
［２．プランの表現形式］
本実施形態において、プラン作成部１２０により作成されるプランは、複数個のタスクの並び順でこれらのタスクの実行順序を表現すると共に、各タスクペア（連続して並ぶ各２個のタスク）について、このタスクペア中における２個のタスク間の結合が強結合と弱結合のいずれであるかを表現するものである。
【００２２】
ここで、プラン中の「複数個のタスク」の各々は、一般的にタスクと称されるそのまま実行可能な処理単位としてのタスク、あるいは、それ自体が複数個のタスクの実行順序を表現するプランである。また、作成中のプランにおいては、さらに分解可能なより抽象的なタスクが一時的に含まれる場合もある。以下では、説明の明瞭化の観点から、作成されるプラン全体とこのプラン中における１個のタスクとして存在する下位のプランの両方に言及する場合に、当該下位のプランを、「サブプラン」と呼ぶ。
【００２３】
また、「強結合」は、当該タスクペア中の２個のタスク間への他のタスクの挿入を不可とする比較的強い結合を意味しており、「弱結合」は、当該タスクペア中の２個のタスク間に他のタスクを挿入可能な比較的弱い結合を意味している。以下では、説明の簡略化の観点から、２個のタスク間が強結合のタスクペアを「強結合タスクペア」と呼び、２個のタスク間が弱結合のタスクペアを「弱結合タスクペア」と呼ぶ。
【００２４】
本実施形態においては、このような「複数個のタスク」と、各タスクペア間の「強結合」と「弱結合」を表現するために、次の表１に示すような表現形式を採用する。
【表１】
2006012072.tif 000003
【００２５】
この表１において、強結合記述と弱結合記述のいずれも、同じ種別の結合で連続する複数個のタスクを特定するタスク特定記述([task1, ..., taskn])を含む。このタスク特定記述([task1, ..., taskn])は、複数個（ｎ個、ｎは２以上の整数）のタスクの並び順でこれらのタスクの実行順序を表現するタスク列記述task1, ..., tasknと、複数個のタスクの始点と終点を示す範囲区分記述([  ])を組み合わせたものである。ここでは、範囲区分記述の一例として、小括弧（  ）と大括弧［  ］という二種類の括弧を組み合わせた記述([  ])を使用しているが、範囲区分記述として他の形式の記述を使用してもよい。
【００２６】
強結合記述strong([task1, ..., taskn])は、強結合を表現する強結合種別記述strongと、タスク特定記述([task1, ..., taskn])を組み合わせたものである。この強結合記述strong([task1, ..., taskn])は、複数個のタスクtask1, ..., tasknの全てが強結合で連続しており、したがって、複数個のタスクtask1, ..., taskn中の全てのタスクペアに強結合が存在することを表現している。より詳細に説明すれば、この強結合記述strong([task1, ..., taskn])は、ｎ個のタスクtask1, ..., tasknにおいて、ｋを１からｎ−１までのいずれかの整数とした場合に、全てのｋについて、タスクペア（taskk, taskk+1）の２個のタスクtaskk, taskk+1の間に、他のタスクを挿入してはならないことを表現している。
【００２７】
弱結合記述weak([task1, ..., taskn])は、弱結合を表現する弱結合種別記述weakと、タスク特定記述([task1, ..., taskn])を組み合わせたものである。この弱結合記述weak ([task1, ..., taskn])は、複数個のタスクtask1, ..., tasknの全てが弱結合で連続しており、したがって、複数個のタスクtask1, ..., taskn中の全てのタスクペアに弱結合が存在することを表現している。より詳細に説明すれば、この弱結合記述weak([task1, ..., taskn])は、ｎ個のタスクtask1, ..., tasknにおいて、ｋを１からｎ−１までのいずれかの整数とした場合に、全てのｋについて、タスクペア（taskk, taskk+1）の２個のタスクtaskk, taskk+1の間に、他のタスクを挿入可能であることを表現している。
【００２８】
プラン実行中に他のタスクの実行要求を要求タスクとして受け付けた場合には、現在実行中のプラン中において、弱結合記述で表現される弱結合の部分に、当該要求タスクを割り込ませることが可能である。
【００２９】
なお、実際のプランは、概して強結合と弱結合の両方を含み、この場合の記述は、弱結合記述中のタスク列の一部に強結合記述が含まれる形となる。例えば、図２に示すように、順次実行される４個のタスクtask1, task2, task3, task4について、第１と第２のタスクtask1, task2間が強結合、第２と第３のタスクtask2, task3間が弱結合、第３と第４のタスクtask3, task4間が強結合、である場合に、このプランは、weak([strong([task1, task2]), strong([task3, task4])])と記述される。
【００３０】
この図２に示すプランweak([strong([task1, task2]), strong([task3, task4])])においては、タスクペア（task1, task2）とタスクペア（task3, task4）は、強結合タスクペアであり、タスクペア（task2, task3）は、弱結合タスクペアである。このため、弱結合タスクペア（task2, task3）における第２と第３のタスクtask2, task3間の弱結合の部分に他のタスクtaskを挿入することができる。
【００３１】
このように新たなタスクtaskを第２と第３のタスクtask2, task3間に弱結合挿入方式で挿入した場合に、プランweak([strong([task1, task2]), strong([task3, task4])])は、プランweak([strong([task1, task2]), task, strong([task3, task4])])に変更される。
【００３２】
なお、この場合、プランの記述上では、強結合タスクペアを表現する強結合記述strong([task1, task2])と強結合記述strong([task3, task4])]は、プラン全体に対するサブプランである。すなわち、サブプランstrong([task1, task2])とサブプランstrong([task3, task4])]は、各サブプランの途中にタスクを挿入できないことから、プラン全体を構成する個々のタスクに相当し、かつ、これらのサブプラン間は弱結合であるため、この意味で、サブプランstrong([task1, task2])とサブプランstrong([task3, task4])]は、弱結合タスクペアである。このため、プランの記述上では、弱結合タスクペアであるサブプランstrong([task1, task2])とサブプランstrong([task3, task4])]の間に、新たなタスクtaskが挿入されたとみなすことができる。
【００３３】
［３．処理手順の概要］
図３は、図１に示すプラン実行システムにおける全体的な処理手順の概要を示すフローチャートである。この図３に示すように、まず、要求受付部１１０により、ユーザから与えられたタスクの実行要求を要求タスクとして受け付ける（Ｓ１）。次に、プラン作成部１２０により、タスク分解処理として、ルール格納部１３０に格納されたタスク分解ルールに従って要求タスクを分解し、実行可能なタスクからなるプランを作成し、プラン格納部１４０に格納する（Ｓ２）。次に、プラン実行管理部１５０により、プラン格納部１４０に格納されているプランに従って１つのタスクの実行指示を行い、タスク実行部１６０により、当該タスクを実行する（Ｓ３）。
【００３４】
この後、非同期的に別のタスクの実行要求がなされ、要求受付部１１０により、この要求タスクを受け付けた場合（Ｓ４のＹＥＳ）には、プラン作成部１２０により、タスク挿入処理としてこの要求タスクを実行中のプランに挿入し（Ｓ５）、挿入された要求タスクのタスク分解処理を行い、実行可能なタスクからなる新たなプランを作成する（Ｓ２）。非同期的な別のタスクの実行要求がない場合（Ｓ４のＮＯ）には、プラン中に未実行のタスクがある限り（Ｓ６のＮＯ）、プランに従って次のタスクを実行する（ステップ３）。そして、プラン中のタスクを全て実行した時点（Ｓ６のＹＥＳ）で、当該プランに関する処理を終了する。
【００３５】
［４．タスク挿入処理］
［４−１．基本的な処理手順］
図４は、図３に示す処理手順のうち、タスク挿入処理（Ｓ５）の基本的な処理手順を示すフローチャートである。この図４に示すように、タスク挿入処理においてはまず、挿入位置判定処理として、要求タスクに対し、当該プラン中において予め設定された挿入位置条件を満足する部分の有無について挿入位置判定を行い（Ｓ５０１）、次に、挿入実行処理として、この挿入位置判定の結果に応じて挿入位置を決定して当該要求タスクを挿入する（Ｓ５０２）。
【００３６】
この場合、「挿入位置条件」は、要求タスクの挿入位置を判定するために予め設定された条件であり、次の表２に示すように、少なくとも「基本条件」を含み、選択的に「付加条件」が追加される。この表２に示すように、「基本条件」は、「弱結合タスクペア中の後タスクが未実行である」という内容の条件であり、挿入位置判定処理（Ｓ５０１）においては、少なくとも「基本条件を満足するタスクペア」が存在するか否かの判定を行うことになる。
【００３７】
【表２】
2006012072.tif 000004
【００３８】
また、挿入実行処理（Ｓ５０２）においては、挿入位置を決定して要求タスクを挿入するためのタスク挿入方式として、「弱結合挿入方式」、「強結合挿入方式」、「末尾挿入方式」、という３つの方式の中から選択された方式により要求タスクの挿入を実行する。次の表３は、これらの３つの方式の内容として、挿入位置、および挿入先との結合関係をそれぞれ示している。
【００３９】
【表３】
2006012072.tif 000005
【００４０】
この表３に示すように、「弱結合挿入方式」と「強結合挿入方式」はいずれも、「挿入位置条件を満足するタスクペア中の２個のタスク間」を挿入位置としており、挿入先との結合関係のみが異なる。すなわち、「弱結合挿入方式」は、挿入先の２個のタスクとそれぞれ弱結合となるようにタスクを挿入する方式であるが、「強結合挿入方式」は、挿入先の少なくとも一方のタスクと強結合となるようにタスクを挿入する方式である。なお、ここでは、説明の簡略化の観点から、挿入位置条件が、基本条件のみを含む場合、すなわち、「挿入位置条件を満足するタスクペア」が「基本条件を満足するタスクペア」である場合について説明する。
【００４１】
より詳細に説明すれば、「基本条件を満足するタスクペア」は、当該プラン中のｎ個のタスクtask1, ..., tasknにおいて、ｋを１からｎ−１までのいずれかの整数とした場合に、タスクペア（taskk, taskk+1）の２個のタスクtaskk, taskk+1の間が弱結合であり、当該タスクペア中の後タスクtaskk+1が未実行であるような、弱結合タスクペア（taskk, taskk+1）である。したがって、「弱結合挿入方式」と「強結合挿入方式」による挿入位置は、この弱結合タスクペア（taskk, taskk+1）中の２個のタスクtaskk, taskk+1の間となる。
【００４２】
このような挿入位置に対して、「弱結合挿入方式」により新たなタスクtaskを弱結合で挿入する処理は、プランの記述上では、弱結合記述で記述されるプランweak(..., taskk, task+1, ...)をプランweak(..., taskk, task, task+1, ...)に置換する処理として実現できる。
【００４３】
これに対して、「強結合挿入方式」により新たなタスクtaskを強結合で挿入する処理は、プランの記述上では、例えば、新たなtaskを挿入先の弱結合タスクペア（taskk, taskk+1）の前タスクtaskkと強結合となるように挿入する場合であれば、当該前タスクtaskkを強結合記述のサブプランstrong(taskk, task)に置換する処理として実現できる。同様にして、後タスクと強結合となるように挿入したり、あるいは、両方のタスクと強結合となるように挿入することも可能である。
【００４４】
図２のプランの例で説明すれば、プランweak([strong([task1, task2]), strong([task3, task4])])中のサブプランstrong([task1, task2])とサブプランstrong([task3, task4])の間は弱結合であるため、前者のサブプランstrong([task1, task2])を実行中であり、後者のサブプランstrong([task3, task4])をまだ実行していなければ（つまり、task3をまだ実行していなければ）、これら２個のサブプランstrong([task1, task2]), strong([task3, task4])は、「基本条件を満足するタスクペア」である。したがって、これらのサブプランstrong([task1, task2])と, strong([task3, task4])との間が挿入位置となる。
【００４５】
このようなサブプランstrong([task1, task2])とサブプランstrong([task3, task4])の間を挿入位置として、「弱結合挿入方式」により新たなタスクtaskを挿入する場合には、プランweak([strong([task1, task2]), strong([task3, task4])])は、プランweak([strong([task1, task2]), task, strong([task3, task4])])に変更される。
【００４６】
これに対して、サブプランstrong([task1, task2])とサブプランstrong([task3, task4])の間を挿入位置として、「強結合挿入方式」により、前者のサブプランと強結合となるように新たなタスクtaskを挿入する場合には、strong([task1, task2])をstrong([task1, task2, task])に置換することにより、プランweak([strong([task1, task2]), strong([task3, task4])])は、プランweak([strong([task1, task2, task]), strong([task3, task4])])に変更される。
【００４７】
このような「強結合挿入方式」は、挿入先のタスクと挿入するタスクとの間に関連性がある場合等に有効な方式である。すなわち、例えば、タスク「Ａ地点に行く」とタスク「Ｂ地点に行く」の間に、別のタスク「Ａ地点でＣを行う」を、タスク「Ａ地点に行く」と強結合となるように挿入することにより、タスクの実行を合理的に実現できる。
【００４８】
一方、「末尾挿入方式」は、現在実行中のプランの末尾を挿入位置として、末尾のタスクと弱結合となるようにタスクを挿入する方式である。より詳細に説明すれば、「末尾挿入方式」による挿入位置は、当該プラン中のｎ個のタスクtask1, ..., tasknの末尾のタスクtasknの後である。このような挿入位置に対して、「末尾挿入方式」により新たなタスクtaskを弱結合で挿入する処理は、プランの記述上では、弱結合記述で記述されるプランweak(task1, ..., taskn)をプランweak(task1, ..., taskn, task)に置換する処理として実現できる。この処理は、プラン全体をplanと記述した場合には、このプランplanをプランweak(plan, task)に変更する処理となる。
【００４９】
このような「末尾挿入方式」は、実行中のプランの実行時間が比較的短く、要求タスクをプラン中に挿入しなくてもすぐに実行可能である場合や、プランに比べて挿入しようとするタスクの優先度が低い場合等に有効な方式である。
【００５０】
［４−２．関連性と優先度を考慮した処理手順］
図５は、タスク挿入処理（Ｓ５）のより応用的な処理手順として、関連性と優先度を考慮した場合の処理手順の一例を示すフローチャートである。
【００５１】
この図５に示すタスク挿入処理においては、「基本的な挿入位置判定処理」（Ｓ５１０）、「関連性を考慮した挿入位置判定処理」（Ｓ５２０）、「優先度を考慮した挿入位置判定処理」（Ｓ５３０）、を行い、挿入位置判定の結果に応じて、「関連性条件該当時の挿入実行処理」（Ｓ５４０）、「優先度条件該当時の挿入実行処理」（Ｓ５５０）、「挿入位置条件非該当時の挿入実行処理」（Ｓ５６０）、を行う。以下には、この処理手順の詳細について順次説明する。
【００５２】
まず、「基本的な挿入位置判定処理」（Ｓ５１０）においては、「基本条件を満足するタスクペア」が存在するか否かを判定する。「基本条件を満足するタスクペア」が存在しない場合（Ｓ５１０のＮＯ）には、「挿入位置条件非該当時の挿入実行処理」（Ｓ５６０）において、当該プランの末尾に、「末尾挿入方式」により要求タスクを挿入する。
【００５３】
また、「基本条件を満足するタスクペア」が存在する場合（Ｓ５１０のＹＥＳ）には、「関連性を考慮した挿入位置判定処理」（Ｓ５２０）において、「関連性条件を満足するタスクペア」が存在するか否かを判定する。この判定の結果、「関連性条件を満足するタスクペア」が存在しない場合（Ｓ５２０のＮＯ）には、続いて、「優先度を考慮した挿入位置判定処理」（Ｓ５３０）において、「優先度条件を満足するタスクペア」が存在するか否かを判定する。
【００５４】
ここで、「関連性条件」と「優先度条件」は、関連性と優先度を考慮して要求タスクの挿入位置を判定するために予め設定された挿入位置条件であり、「基本条件」との関係では、前記表２に示した「付加条件」に相当するものである。すなわち、図５に示すタスク挿入処理において使用される「挿入位置条件」は、次の表４に示すように、「基本条件」、「関連性条件」、「優先度条件」、から構成される。
【００５５】
【表４】
2006012072.tif 000006
【００５６】
この表４に示すように、「基本条件」は、前記表２に示した「基本条件」と同様である。したがって、「基本的な挿入位置判定処理」（Ｓ５１０）の処理手順は、図４における「挿入位置判定処理」について説明した処理手順と同様である。
【００５７】
また、「関連性条件」は、前記表２に示した付加条件に相当するものであり、「基本条件を満足するタスクペア中の前タスクと要求タスクとの間に関連性がある」という内容の条件である。したがって、「関連性を考慮した挿入位置判定処理」（Ｓ５２０）における「関連性条件を満足するタスクペア」の有無の判定は、「基本条件を満足するタスクペア」が「関連性条件」を満足するか否かを判定することになる。
【００５８】
より詳細に説明すれば、「基本条件を満足するタスクペア」は、前述したとおり、当該プラン中において、タスクペア（taskk, taskk+1）の２個のタスクtaskk, taskk+1の間が弱結合であり、当該タスクペア中の後タスクtaskk+1が未実行であるような、弱結合タスクペア（taskk, taskk+1）である。
【００５９】
したがって、「関連性を考慮した挿入位置判定処理」（Ｓ５２０）においては、上記のような「基本条件を満足するタスクペア」（taskk, taskk+1）が存在する場合に、このタスクペア（taskk, taskk+1）が「関連性条件」を満足するか否か、すなわち、タスクペア（taskk, taskk+1）の前タスクtaskkが挿入しようとするタスクtaskと関連性があるか否かを判定することになる。この場合、前タスクtaskkがサブプランである場合には、このサブプラン中の最後に実行されるタスクがタスクtaskと関連性があるか否かを判定することになる。
【００６０】
図２のプランの例で説明すれば、前述したとおり、２個のサブプランstrong([task1, task2]), strong([task3, task4])のうち、前者のサブプランstrong([task1, task2])を実行中であり、サブプランstrong([task3, task4])をまだ実行していなければ、「基本条件を満足するタスクペア」は、これら２個のサブプランstrong([task1, task2]), strong([task3, task4])である。
【００６１】
そして、このような「基本条件を満足するタスクペア」（strong([task1, task2]), strong([task3, task4])）中の前タスクであるサブプランstrong([task1, task2])と要求タスクtaskとの間、したがって、サブプランstrong([task1, task2])中のタスクtask2と要求タスクtaskとの間に関連性があるか否かを判定し、関連性がある場合には、このタスクペア（strong([task1, task2]), strong([task3, task4])）は、「関連性条件を満足するタスクペア」である。
【００６２】
「関連性を考慮した挿入位置判定処理」（Ｓ５２０）において、「関連性条件を満足するタスクペア」が存在する場合（Ｓ５２０のＹＥＳ）には、「関連性条件該当時の挿入実行処理」（Ｓ５４０）において、当該タスクペア中の２個のタスク間に「弱結合挿入方式」または「強結合挿入方式」により要求タスクを挿入する。
【００６３】
この場合、「弱結合挿入方式」または「強結合挿入方式」の選択法としては、例えば、関連性が予め設定されたレベルより高いか低いかに応じて、関連性が高い場合には「強結合挿入方式」を選択し、関連性が低い場合には「弱結合挿入方式」を選択することが考えられるが、これに限定されるものではない。
【００６４】
別の選択法として、例えば、現在実行中のプランの実行時間が予め設定された時間より長いか短いかに応じて、実行時間が長い場合には「強結合挿入方式」を選択し、実行時間が短い場合には「弱結合挿入方式」を選択してもよい。あるいはまた、関連性の程度と関係なく、予め設定されたいずれか一方の方式を選択したり、要求タスクに関するユーザからの指示に応じた方式を選択したりすることも可能である。
【００６５】
一方「優先度条件」は、前記表２に示した付加条件に相当するものであり、「基本条件を満足するタスクペア中の後タスク以降に要求タスクより優先度の高いタスクが存在しない」という内容の条件である。したがって、「優先度を考慮した挿入位置判定処理」（Ｓ５３０）における「優先度条件を満足するタスクペア」の有無の判定は、「基本条件を満足するタスクペア」が「優先度条件」を満足するか否かを判定することになる。
【００６６】
より詳細に説明すれば、「基本条件を満足するタスクペア」は、前述したとおり、当該プラン中において、タスクペア（taskk, taskk+1）の２個のタスクtaskk, taskk+1の間が弱結合であり、当該タスクペア中の後タスクtaskk+1が未実行であるような、弱結合タスクペア（taskk, taskk+1）である。
【００６７】
したがって、「優先度を考慮した挿入位置判定処理」（Ｓ５３０）においては、このような「基本条件を満足するタスクペア」（taskk, taskk+1）が存在する場合に、このタスクペア（taskk, taskk+1）が「優先度条件」を満足するか否か、すなわち、タスクペア（taskk, taskk+1）の後タスクtaskk+1以降に挿入しようとするタスクtaskより優先度の高いタスクが存在しないか否かを判定することになる。
【００６８】
図２のプランの例で説明すれば、前述したとおり、２個のサブプランstrong([task1, task2]), strong([task3, task4])のうち、前者のサブプランstrong([task1, task2])を実行中であり、サブプランstrong([task3, task4])をまだ実行していなければ、「基本条件を満足するタスクペア」は、これら２個のサブプランstrong([task1, task2]), strong([task3, task4])である。
【００６９】
そして、このような「基本条件を満足するタスクペア」（strong([task1, task2]), strong([task3, task4])）中の後タスクであるサブプランstrong([task3, task4])）以降のタスク、したがって、サブプランstrong([task3, task4])中のタスクtask3, task4と要求タスクtaskとの間で優先度を比較し、要求タスクtask の優先度が、task3, task4の優先度以上である場合には、このタスクペア（strong([task1, task2]), strong([task3, task4])）は、「優先度条件を満足するタスクペア」である。
【００７０】
「優先度を考慮した挿入位置判定処理」（Ｓ５３０）において、「優先度条件を満足するタスクペア」が存在する場合（Ｓ５３０のＹＥＳ）には、「優先度条件該当時の挿入実行処理」（Ｓ５５０）において、当該タスクペア中の２個のタスク間に「弱結合挿入方式」により要求タスクを挿入する。
【００７１】
なお、「関連性を考慮した挿入位置判定処理」（Ｓ５２０）において、「関連性条件を満足するタスクペア」が存在する場合（Ｓ５２０のＹＥＳ）、あるいは、「優先度を考慮した挿入位置判定処理」（Ｓ５３０）において、「優先度条件を満足するタスクペア」が存在する場合（Ｓ５３０のＹＥＳ）に、該当するタスクペアが複数存在する可能性がある。このような場合には、「関連性条件該当時の挿入実行処理」（Ｓ５４０）あるいは「優先度条件該当時の挿入実行処理」（Ｓ５５０）において、該当する複数のタスクペアのうち、実行順序が最先となる１つのタスクペアを挿入先のタスクペアとして選択すればよい。
【００７２】
あるいはまた、関連性条件を満足する複数のタスクペアについては、前述したような、関連性のレベル、プランの実行時間、等の選択基準に基づいて１つのタスクペアを選択してもよい。
【００７３】
「基本的な挿入位置判定処理」（Ｓ５１０）において「基本条件を満足するタスクペア」が存在しない場合（Ｓ５１０のＮＯ）、および、「優先度を考慮した挿入位置判定処理」（Ｓ５３０）において「優先度条件を満足するタスクペア」が存在しない場合（Ｓ５３０のＮＯ）には、「挿入位置条件非該当時の挿入実行処理」（Ｓ５６０）において、当該プランの末尾に、「末尾挿入方式」により要求タスクを挿入する。
【００７４】
なお、図５の処理手順は、優先度よりも関連性を優先させた場合の処理手順を示しているが、逆に、関連性よりも優先度を優先させる処理手順も可能である。図６は、このような関連性よりも優先度を優先させる場合の処理手順の一例を示すフローチャートである。この図６の処理手順における各処理は、図５に示した各処理と同様であり、処理の流れのみが異なるため、同じ処理については同じ符号で示し、個々の処理の説明は省略する。
【００７５】
［５．タスク分解処理］
ルール格納部１３０には、タスク分解処理（Ｓ２）に使用されるタスク分解ルールとして、分解対象のタスクをより具体的なタスクに分解するための「通常のタスク分解ルール」と、分解対象のタスクが、実行不要なタスクであることを示す「実行不要ルール」という２種類のルールが格納されている。本実施形態においては、このような「通常のタスク分解ルール」と「実行不要ルール」を表現するために、次の表５に示すような表現形式を採用する。
【００７６】
【表５】
2006012072.tif 000007
【００７７】
この表５において、taskは分解対象のタスクを表現する対象タスク記述である。また、planは、タスクtaskの分解の詳細な内容を表現する分解詳細記述である。この分解詳細記述によって表現される内容は、「タスクtaskより具体的なタスク」の実行順序を表現する「プラン」である。「通常のタスク分解ルール」と「実行不要ルール」の両方において、末尾のドット「．」は、各ルールの終点を示すルール区分記述である。
【００７８】
「通常のタスク分解ルール」においては、コロン「：」とマイナス「−」の組み合わせ「：−」により、その前後の記述を関連付けると共に、前方の記述が対象タスク記述であり、後方の記述が分解詳細記述であることを示している。また、「実行不要ルール」においては、対象タスク記述とルール区分記述との組み合わせにより、当該タスクtaskが何も実行しなくてもよいタスクであることを示している。
【００７９】
ルール格納部１３０には、受付が想定される全ての要求タスクに応じて、想定される全てのタスク分解処理に必要なタスク分解ルールが予め格納されている。したがって、受付可能な要求タスクが増える毎に、この増えた要求タスクに応じたタスク分解ルールが随時追加されることになる。
【００８０】
図７は、表５に示すようなタスク分解ルールを使用した場合における、タスク分解処理（Ｓ２）の基本的な処理手順を示すフローチャートである。この図７に示すように、まず、当該プラン中のタスクのうち、直接実行することが不可能な抽象的なタスクtaskを１つ選択する（Ｓ２０１）。次に、ルール格納部１３０を参照して、タスクtaskのタスク分解ルールを取得する（Ｓ２０２）。ここでは、説明の簡略化の観点から、同一のタスクに対しては、１つのタスク分解ルールのみが格納されているものとする。しかし、別の方法として、同一のタスクに対して、複数のタスク分解ルールを格納しておき、各種の条件に応じて１つのタスク分解ルールを選択するようにしてもよい。
【００８１】
取得したタスク分解ルールが実行不要ルールである場合（Ｓ２０３のＹＥＳ）には、当該プランの中からステップＳ２０１で選択したタスクtaskを消去する（Ｓ２０４）。これに対して、取得したタスク分解ルールが通常のタスク分解ルールである場合（Ｓ２０３のＮＯ）、当該タスク分解ルールに従って当該プラン中のステップＳ２０１で選択したタスクtaskを分解し、当該タスク分解ルールの分解詳細記述により表現されるより具体的なタスクまたはプランplanに変更する（Ｓ２０５）。プラン内に抽象的なタスクが存在する限り（Ｓ２０６のＹＥＳ）、一連の処理（Ｓ２０１〜Ｓ２０５）を繰り返し、プラン内のタスクが全て実行可能な具体的なタスクとなった段階（Ｓ２０６のＮＯ）で、タスク分解処理を終了する。
【００８２】
［６．実施例］
［６−１．タスクの抽象度とタスク分解ルールの定義］
上記のようなプラン実行システムによる具体的な実施例を説明するために、前提として、タスクの抽象度とタスク分解ルールについて次のように定義する。
【００８３】
まず、図８に示すように、タスクの抽象度に応じて、最も抽象的な抽象レベルタスク、そのまま実行可能な最も具体的な実行レベルタスク、前記２つのタスク間の中間のレベルにある中間レベルタスク、という３段階のタスクが存在するものとする。なお、実際のタスク分解においては、最も抽象的なレベルから実行可能な具体的なレベルまで、より多段階のレベルのタスクが存在する場合もある。
【００８４】
また、このような３段階のタスクに応じて、タスク分解ルールについても、次の表６に示すように、抽象レベルタスクを中間レベルタスクに分解するための「基本分解ルール」と中間レベルタスクを実行レベルタスクに分解するための「最終分解ルール」という２種類のルールを定義している。
【００８５】
【表６】
2006012072.tif 000008
【００８６】
［６−２．ロボットのタスク実行処理例］
以下には、具体的な実施例として、プラン実行システムを実現するコンピュータを搭載したロボットのコンピュータ制御を行う場合におけるタスク実行処理の一例について説明する。
【００８７】
ここでは、ユーザからの、「ロボットがtomとbobの2人にhelloと言う」ことを実行させる内容のタスクgoAroundAndSayHello(tom, bob)が受付可能であるとし、この場合に、ルール格納部１３０には、次の表７に示すような具体的なタスク分解ルールが予め格納されているとする。
【００８８】
【表７】
2006012072.tif 000009
【００８９】
［６−２−１．プラン作成］
初めに、ユーザからロボットに、優先度「５」のタスクgoAroundAndSayHello(tom, bob)の実行が要求されたとする。ロボットは、このタスクを、要求タスクとして受け付け、「ルール１」を使って分解し、次のプランに詳細化する。
weak([goAndSayHello(tom), goAndSayHello(bob)])
このプランは、さらに分解可能であるため、以下には、「作成途中プラン１」と呼ぶ。
【００９０】
このタスク分解処理は、「ルール１」という「基本分解ルール」により、「抽象レベルタスク」をより具体的な「中間レベルタスク」に分解したことを意味する。すなわち、ここで得られた「作成途中プラン１」は、「中間レベルタスク」に相当する。
【００９１】
この「作成途中プラン１」に出現する２つのタスクgoAndSayHello(tom)とgoAndSayHello(bob)は、優先度「５」のタスクgoAroundAndSayHello(tom, bob)を分解して作成されているので、これらのタスクの優先度もまた「５」である。ここで、タスクgoAndSayHello(tom)はキーワードtomに関連し、タスクgoAndSayHello(bob)はキーワードbobに関連するということがわかっていることとする。
【００９２】
次に、ロボットは、「ルール２」を使って、この「作成途中プラン１」の中に出現する優先度「５」のタスクgoAndSayHello(tom)をさらに分解し、次のプランに詳細化する。
weak([strong([goto(tom), say(hello)]), goAndSayHello(bob)])
このプランは、さらに分解可能であるため、以下には、「作成途中プラン２」と呼ぶ。
【００９３】
このタスク分解処理は、「ルール２」という「最終分解ルール」により、「中間レベルタスク」をより具体的な「実行レベルタスク」に分解したことを意味する。すなわち、ここで得られた「作成途中プラン２」中のサブプランstrong([goto(tom), say(hello)])は、「実行レベルタスク」に相当する。
【００９４】
「作成途中プラン２」の中に出現する３つのタスクgoto(tom), say(hello), goAndSayHello(bob)は、優先度「５」のタスクを分解して作成されているので、これらのタスクgoto(tom), say(hello), goAndSayHello(bob)の優先度は全て「５」である。また、goto(tom)と say(hello)は、キーワードtomに関連するタスクを分解して作成されているので、キーワードtomに関連する。ここで、タスクgoto(tom)とタスクsay(hello)の間は、強結合であるが、サブプランstrong([goto(tom), say(hello)])とタスクgoAndSayHello(bob)の間、つまり、タスクsay(hello)とタスクgoAndSayHello(bob)の間は、弱結合である。
【００９５】
同様にして、「ルール３」を使って、この「作成途中プラン２」の中のタスクgoAndSayHello(bob)をさらに分解し、次のプランに詳細化する。
weak([strong([goto(tom), say(hello)]), strong([goto(bob), say(hello)])])
このプランは、そのまま実行可能なプランであるため、以下には、「実行プラン１」と呼ぶ。
【００９６】
このタスク分解処理は、「ルール３」という「最終分解ルール」により、「中間レベルタスク」をより具体的な「実行レベルタスク」に分解したことを意味する。すなわち、ここで得られた「実行プラン１」中のサブプランstrong([goto(bob), say(hello)])は、「実行レベルタスク」に相当する。
【００９７】
「実行プラン１」の中に出現する４つのタスクgoto(tom), say(hello), goto(bob), say(hello)は、優先度「５」のタスクを分解して作られているので、これらのタスクgoto(tom), say(hello), goto(bob), say(hello)の優先度は全て「５」である。また、３番目のタスクgoto(bob)と４番目のタスクsay(hello)は、キーワードbobに関連するタスクを分解して作成されているので、キーワードbobに関連する。一方、１番目のタスクgoto(tom)と２番目のタスクsay(hello)は、前述したとおり、キーワードtomに関連する。ここで、タスクgoto(tom)とタスクsay(hello)の間は強結合であり、タスクsay(hello)とタスクgoto(bob)の間は弱結合であり、タスクgoto(bob)とタスクsay(hello)の間は強結合である。
【００９８】
［６−２−２．動的なプラン修正の詳細］
ここでは、以上のようにして作成された実行可能なプランを新たなタスクの挿入により別の実行可能なプランに修正することを「プラン修正」と定義し、以上のようにして作成された「実行プラン１」の実行を開始した後のプラン修正の例について説明する。
【００９９】
まず、「実行プラン１」の実行を開始して、１番目のタスクgoto(tom)を実行した直後（または１番目のタスクを実行中）に、優先度「１０」のタスクgoAndSayHello(mary)の実行要求をユーザから受け取ったとする。また、タスクgoAndSayHello(mary)はキーワードmaryに関連することがわかっていることとする。この場合に、タスクgoAndSayHello(mary)の優先度「１０」は、現在実行中の「実行プラン１」の優先度「５」よりも高いため、ロボットは、できるだけ早くこの優先度の高い新たなタスクを実行しなければならない。
【０１００】
この場合、「実行プラン１」中の１番目のタスクgoto(tom)と２番目のタスクsay(hello)の間は、強結合なので、タスクの挿入は無理である。実際に、この位置にタスクgoAndSayHello(mary)を挿入してしまうと、tomにhelloと言う前にtomから離れてしまうことになり、不都合である。これに対して、「実行プラン１」中の２番目のタスクsay(hello)と３番目のタスクgoto(bob)の間、つまり、サブプランstrong([goto(tom), say(hello)])とタスクgoto(bob)の間は、弱結合なので、この位置には、タスクを挿入できる。
【０１０１】
そして、サブプランstrong([goto(tom), say(hello)])とタスクgoto(bob)の間に新たなタスクgoAndSayHello(mary)を弱結合挿入方式で挿入すると、「実行プラン１」は、次のプランに変更される。
weak([strong([goto(tom), say(hello)]), goAndSayHello(mary), strong([goto(bob), say(hello)])])
このプランは、さらに分解可能であるため、以下には、「修正途中プラン１」と呼ぶ。
【０１０２】
この「修正途中プラン１」の中で、既存の４つのタスクgoto(tom), say(hello), goto(bob), say(hello)の優先度は「５」であるが、新たに挿入されたタスクgoAndSayHello(mary)の優先度は「１０」である。
【０１０３】
次に、「ルール４」を使って、この「修正途中プラン１」中の新たなタスクgoAndSayHello(mary)を分解し、次のプランに詳細化する。
weak([strong([goto(tom), say(hello)]), strong([goto(mary), say(hello)]), strong([goto(bob), say(hello)])])
このプランは、そのまま実行可能なプランであるため、以下には、「実行プラン２」と呼ぶ。
【０１０４】
この「実行プラン２」の中で、キーワードmaryに関連する優先度「１０」のタスクを分解して作成された３番目のタスクgoto(mary)と４番目のタスクsay(hello)は、いずれも、優先度「１０」であり、キーワードmaryに関連する。１番目のタスクgoto(tom)と２番目のタスクsay(hello)は、プラン修正前と同様に、優先度「５」であり、キーワードtomに関連する。５番目のタスクgoto(bob)と６番目のタスクsay(hello)もまた、プラン修正前と同様に、優先度「５」であり、キーワードbobに関連する。
【０１０５】
プラン修正前の「実行プラン１」の段階で、すでに１番目のタスクgoto(tom)を実行しているので、この「実行プラン２」の実行において、順調にいけば、ロボットは、say(hello)、goto(mary)、say(hello)、 goto(bob)、say(hello)の順にタスクを実行していくことになる。つまり、tomにhelloと言い、次に、maryのところへ行き、maryにhelloと言い、続いて、bobのところへ行き、bobにhelloと言うことになる。
【０１０６】
［６−２−３．優先度と関連性に応じたタスク挿入例］
以下には、上記のようにプラン修正された「実行プラン２」の実行中において、タスクの優先度と関連性に応じて新たなタスクを挿入する場合の例について説明する。なお、プラン中に挿入されたタスクは、実際には、上記のように実行レベルタスクまで分解されるが、以下の説明中では、説明の簡略化の観点から、便宜上、挿入時のタスクを抽象的な形でそのまま示している。
【０１０７】
まず、「実行プラン２」について、２番目のタスクsay(hello)を実行した直後（または２番目のタスクの実行中）に、優先度「３」のタスクgoAndSayHello(taro)の実行要求をユーザから受け取ったとする。また、タスクgoAndSayHello(taro)はキーワードtaroに関連することがわかっていることとする。この場合に、タスクgoAndSayHello(taro)の優先度「３」は、「実行プラン２」中のタスクの優先度「５」、「１０」に比べて低いため、このタスクgoAndSayHello(taro)は、末尾挿入方式により「実行プラン２」の末尾に弱結合で挿入される。
【０１０８】
この結果、「実行プラン２」は、次のプランに変更される。
weak([weak([strong([goto(tom), say(hello)]), strong([goto(mary), say(hello)]), strong([goto(bob), say(hello)])]), goAndSayHello(taro)])
このプラン中において、挿入されたタスクgoAndSayHello(taro)は、さらに分解可能であるが、前述したように、説明の簡略化の観点から、このプランをそのまま実行可能なプランとみなし、「実行プラン３」と呼ぶ。
【０１０９】
この「実行プラン３」の中で、１番目のタスクgoto(tom)と２番目のタスクsay(hello)は、優先度「５」であり、キーワードtomに関連する。３番目のタスクgoto(mary)と４番目のタスクsay(hello)は、優先度「１０」であり、キーワードmaryに関連する。５番目のタスクgoto(bob)と６番目のタスクsay(hello)は、優先度「５」であり、キーワードbobに関連する。７番目のタスクgoAndSayHello(taro)は、優先度「３」であり、キーワードtaroに関連する。
【０１１０】
次に、この「実行プラン３」について、３番目のタスクgoto(mary)を実行した直後（または３番目のタスクの実行中）に、優先度「７」のタスクgoAndSayHello(hanako)の実行要求をユーザから受け取ったとする。また、タスクgoAndSayHello(hanako)はキーワードhanakoに関連することがわかっていることとする。この場合に、タスクgoAndSayHello(hanako)の優先度「７」は、「実行プラン３」中の３番目のタスクgoto(mary)と４番目のタスク say(hello)の優先度「１０」より低いが、５番目のタスク以降のタスクの優先度「５」よりは高い。このため、このタスクgoAndSayHello(hanako)は、４番目のタスクsay(hello)と５番目のタスクgoto(bob)の間、つまり、サブプランstrong([goto(mary), say(hello)])とサブプランstrong([goto(bob), say(hello)])の間に挿入される。
【０１１１】
この結果、「実行プラン３」は、次のプランに変更される。
weak([weak([strong([goto(tom), say(hello)]), strong([goto(mary), say(hello)]), goAndSayHello(hanako), strong([goto(bob), say(hello)])]), goAndSayHello(taro)])
このプラン中において、挿入されたタスクgoAndSayHello(hanako)は、さらに分解可能であるが、前述したように、説明の簡略化の観点から、このプランをそのまま実行可能なプランとみなし、「実行プラン４」と呼ぶ。
【０１１２】
この「実行プラン４」の中で、１番目のタスクgoto(tom)と２番目のタスクsay(hello)は、優先度「５」であり、キーワードtomに関連する。３番目のタスクgoto(mary)と４番目のタスクsay(hello)は、優先度「１０」であり、キーワードmaryに関連する。５番目のタスクgoAndSayHello(hanako)は、優先度「７」であり、キーワードhanakoに関連する。６番目のタスクgoto(bob)と７番目のタスクsay(hello)は、優先度「５」であり、キーワードbobに関連する。８番目のタスクgoAndSayHello(taro)は、優先度「３」であり、キーワードtaroに関連する。
【０１１３】
次に、この「実行プラン４」について、４番目のタスクsay(hello)を実行した直後（または４番目のタスクの実行中）に、優先度「１５」のタスクshakeHandsWith(bob)の実行要求をユーザから受け取ったとする。また、タスクshakeHandsWith(bob)はキーワードbobに関連することがわかっていることとする。
【０１１４】
この場合に、図５に示すように、関連性よりも優先度を優先すれば、新たなタスクshakeHandsWith(bob)の優先度「１５」は、未実行の５番目以降の全てのタスクの優先度より高いため、４番目のタスクsay(hello)と５番目のタスクgoAndSayHello(hanako)の間、つまり、サブプランstrong([goto(mary), say(hello)])とタスクgoAndSayHello(hanako)の間に挿入することになる。
この挿入処理については、４番目のタスクの実行中に平行して処理を行っても良い。
【０１１５】
この場合に、「実行プラン４」は、次のプランに変更される。
weak([weak([strong([goto(tom), say(hello)]), strong([goto(mary), say(hello)]), shakeHandsWith(bob), goAndSayHello(hanako), strong([goto(bob), say(hello)])]), goAndSayHello(taro)])
このプランにおいて、新たなタスクshakeHandsWith(bob)は、優先度が「１５」と、最も高いために、実行されたタスクの直後で最も早く実行される弱結合の位置に挿入されている。
【０１１６】
このプランの実行においては、bobと握手し、次に、hanakoのところへ行き、hanakoにhelloと言い、さらに、maryのところへ行き、maryにhelloと言った後に、再び、bobのところへ行き、bobにhelloと言うことになり、実際の動作としては、非合理的かつ非効率的である。
【０１１７】
これに対して、図６に示すように、優先度よりも関連性を優先させれば、新たなタスクshakeHandsWith(bob)は、キーワードbobに関連するため、同じキーワードに関連する７番目のタスクsay(hello)と８番目のタスクgoAndSayHello(taro)の間、つまり、サブプランstrong([goto(bob), say(hello)])とタスクgoAndSayHello(taro)の間に、７番目のタスクsay(hello)と強結合となるようにして挿入することになる。
【０１１８】
この場合に、「実行プラン４」は、次のプランに変更される。
weak([weak([strong([goto(tom), say(hello)]), strong([goto(mary), say(hello)]), goAndSayHello(hanako), strong([strong([goto(bob), say(hello)])]), shakeHandsWith(bob)]), goAndSayHello(taro)])
このプランにおいては、キーワードbobに関連する７番目のタスクsay(hello)とこの直後に挿入されたタスクshakeHandsWith(mary)の間を強結合とすることで、この部分に他のタスクは挿入不可となっている。
【０１１９】
これにより、bobに関連するgoto(bob)とsay(hello)と shakeHandsWith(bob)をまとめて実行することができる。すなわち、このプランの実行においては、bobのところへ行き、bobにhelloと言い、さらに、bobと握手することになり、実際の動作として、合理的かつ効率的である。
【０１２０】
なお、上記の説明では、優先度よりも関連性を優先させた場合の方が合理的かつ効率的となる場合について説明したが、優先度と関連性のいずれを優先することが有効であるかは、制御対象となる動作主体や実際に取り扱うタスクによって異なるため、プラン実行の用途や状況等の諸条件に応じて適宜選択すればよい。
【０１２１】
また、上記の説明では、ロボットが動き回って、いろいろな人にhelloと言う場合のプランを実行しているが、このプラン実行処理は、ネットワークで繋がれた複数のコンピュータ上を移動しながら活動する「移動エージェント」が、いろいろな人のパーソナルコンピュータ上に移動し、これらのコンピュータのスピーカーや画面にhelloと出力するための処理にそのまま適用可能である。
【０１２２】
［７．効果］
以上述べたように、本実施形態によれば、プランの実行中に他の要求が与えられた場合に、その要求を受け付けて現在実行中のプランに挿入し、実行可能なタスクに分解することによって、新たな要求に応じてプランを柔軟に変更できる。したがって、実行中のプランであっても、ユーザから新たな要求が与えられる毎にそれを実現するための最適プランへと動的に変更可能であるため、ユーザ満足度の高いコンピュータ制御を実現することができる。
【０１２３】
［８．他の実施形態］
なお、本発明は、前述した実施形態に限定されるものではなく、本発明の範囲内で他にも多種多様な変形例が実施可能である。例えば、図面に示したシステム構成や使用するプランの表現形式等は、一例にすぎず、具体的なシステム構成や表現形式は適宜選択可能である。また、図面に示したフローチャートは、一例にすぎず、具体的な動作手順や各処理の詳細は適宜選択可能である。
【０１２４】
さらに、本発明は、ロボットやネットワーク上の移動エージェントのリアルタイム制御に好適であるが、本発明の適用対象はこれらに限定されるものではなく、ユーザの要求に応じてプランを作成、実行する各種の分野におけるリアルタイム制御に同様に適用可能であり、同様に優れた効果が得られるものである。
【図面の簡単な説明】
【０１２５】
【図１】本発明を適用したプラン実行システムの構成の概略を示すブロック図。
【図２】図１に示すプラン実行システムで作成されるプランにおけるタスク間の結合を説明する説明図。
【図３】図１に示すプラン実行システムにおける全体的な処理手順の概要を示すフローチャート。
【図４】図３に示す処理手順のうち、タスク挿入処理の基本的な処理手順を示すフローチャート。
【図５】図３に示すタスク挿入処理のより応用的な処理手順として、関連性と優先度を考慮した場合における処理手順の一例を示すフローチャート。
【図６】図３に示すタスク挿入処理のより応用的な処理手順として、関連性と優先度を考慮した場合における処理手順の別の一例を示すフローチャート。
【図７】図３に示すタスク分解処理の基本的な処理手順を示すフローチャート。
【図８】図１に示すプラン実行システムで使用するタスクの抽象度とタスク分解ルールの定義の一例を示す説明図。
【符号の説明】
【０１２６】
１１０…要求受付部
１２０…プラン作成部
１３０…ルール格納部
１４０…プラン格納部
１５０…プラン実行管理部
１６０…タスク実行部
【図１】
2006012072.tif 000010
【図２】
2006012072.tif 000011
【図３】
2006012072.tif 000012
【図４】
2006012072.tif 000013
【図５】
2006012072.tif 000014
【図６】
2006012072.tif 000015
【図７】
2006012072.tif 000016
【図８】
2006012072.tif 000017