(57)【特許請求の範囲】
【請求項１】
複数のプラットフォームを備えたネットワーク上でソフトウェアエージェントを動作させることで情報を処理するエージェントシステムにおいて、
プラットフォーム上でエージェントを活動させる手段と、
エージェントをプラットフォーム間で移動させる手段と、
複数のエージェントの間で協調を行わせる手段と、
それぞれのプラットフォームについて、移動にかかわる判断の基礎となる情報を表すプラットフォームプロファイルと、
それぞれのエージェントについて、移動にかかわる判断の基礎となる情報を表すエージェントプロファイルとを備え、
エージェントが現在いるプラットフォームとは異なる他のプラットフォームでの処理が必要になった場合に、当該他のプラットフォームへエージェントを移動させるか、エージェントに当該他のプラットフォームに存在する他のエージェントと協調を行なわせるかを、前記プラットフォームプロファイルとエージェントプロファイルに基づいて判断する手段と、
エージェントを他のプラットフォームへ移動させるための手順を、エージェントに主体的に管理させるか、プラットフォームが主体的に管理するかを、前記プラットフォームプロファイルとエージェントプロファイルに基づいて判断する手段とを備えたことを特徴とするエージェントシステム。
【請求項２】
エージェントが他のプラットフォームに移動しようとするとき、直ちに移動するかどうかを判断する手段を備えたことを特徴とする請求項１記載のエージェントシステム。
【請求項３】
移動先のプラットフォームの候補が複数あるとき、どのプラットフォームに移動するかを選択する手段を備えたことを特徴とする請求項１または請求項２に記載のエージェントシステム。
【請求項４】
エージェントが複数のプラットフォームに順次移動しようとするとき、それぞれのプラットフォームにどのような順序で移動するかを決定する手段を備えたことを特徴とする請求項１から３のいずれか１つに記載のエージェントシステム。
【請求項５】
前記プラットフォームは、自プラットフォーム上のエージェントを他のプラットフォームへ移動させるか、及び、他のプラットフォーム上のエージェントを自プラットフォームへ移動させるかを判断する手段と、判断の結果をエージェントに指示する手段と、を備えたことを特徴とする請求項１から４のいずれか１つに記載のエージェントシステム。
【請求項６】
前記プラットフォームプロファイルは、それぞれのプラットフォームについて、
ａ）エージェントを移動させるための機能を備えているかどうか、
ｂ）そのプラットフォームにかかわるネットワーク回線の信頼性が高いか低いか、
ｃ）エージェントを永続的に存在させることができるか、
ｄ）エージェントにどのような種類の動作を認めているか、
ｅ）どのようなプログラミング言語を実行することができるか、
ｆ）前記移動のための処理をプラットフォームが主体的に管理するか、
ｇ）どのような種類及び分量のリソースを提供するか、
ｈ）どのようなエージェントが存在しているか、
ｉ）どのようなサービスを提供するか、
ｊ）いつまで活動するか、
のうち少なくとも１つの情報を表すことを特徴とする請求項１記載のエージェントシステム。
【請求項７】
前記エージェントプロファイルは、それぞれのエージェントについて、
ｋ）エージェントがプラットフォーム間で移動する能力を持つかどうか、
ｌ）前記移動のための処理をエージェントが主体的に管理するか、
ｍ）エージェントがどのような種類及び分量のリソースを必要とするか、
ｎ）いつまで活動するか、
ｏ）エージェントの動作がどのようなプログラミング言語で記述されているか、
ｐ）エージェントがどのようなサービスを必要とするか、
のうち少なくとも１つの情報を表すことを特徴とする請求項１記載のエージェントシステム。
【請求項８】
前記プロファイルを参照するに当たり、プラットフォームの負荷に応じてどのプロファイルを参照するかを判断する参照判断手段を備えたことを特徴とする請求項６または請求項７に記載のエージェントシステム。
【請求項９】
複数のプラットフォームを備えたネットワーク上で情報処理装置を使用してソフトウェアエージェントを動作させることで情報を処理する情報処理方法において、
前記プラットフォーム上でエージェントを活動させる手段により、プラットフォーム上でエージェントを活動させるステップと、
前記エージェントをプラットフォーム間で移動させる手段により、エージェントをプラットフォーム間で移動させるステップと、
前記複数のエージェントの間で協調を行わせる手段により、複数のエージェントの間で協調を行わせるステップと、
前記プラットフォームプロファイルと前記エージェントプロファイルとに基づいて、
エージェントが現在いるプラットフォームとは異なる他のプラットフォームでの処理が必要になった場合に、当該他のプラットフォームへエージェントが移動するか、エージェントが当該他のプラットフォームに存在する他のエージェントと協調を行うかを判断するステップと、
エージェントが他のプラットフォームへ移動するための手順を、エージェントが主体的に管理するか、プラットフォームが主体的に管理するかを判断するステップとを含むことを特徴とする情報処理方法。
【請求項１０】
エージェントが他のプラットフォームに移動しようとするとき、直ちに移動するかどうかを判断するステップを含むことを特徴とする請求項９記載の情報処理方法。
【請求項１１】
移動先のプラットフォームの候補が複数あるとき、どのプラットフォームに移動するかを選択するステップを含むことを特徴とする請求項９又は１０記載の情報処理方法。
【請求項１２】
エージェントが複数のプラットフォームに順次移動しようとするとき、それぞれのプラットフォームにどのような順序で移動するかを決定するステップを含むことを特徴とする請求項９から１１のいずれか１つに記載の情報処理方法。
【請求項１３】
前記プラットフォームは、自プラットフォーム上のエージェントを他のプラットフォームへ移動させるか、及び、他のプラットフォーム上のエージェントを自プラットフォームへ移動させるかを判断するステップと、判断の結果をエージェントに指示するステップと、を実行することを特徴とする請求項９から１２のいずれか１つに記載の情報処理方法。
【請求項１４】
コンピュータを使って、複数のプラットフォームを備えたネットワーク上でエージェントが動作することで情報を処理するための情報処理用ソフトウェアを記録した記録媒体において、
プラットフォーム上でエージェントを活動させるステップと、
エージェントをプラットフォーム間で移動させるステップと、
複数のエージェントの間で協調を行わせるステップと、
それぞれのプラットフォームについて、移動にかかわる判断の基礎となる情報を予めプラットフォームプロファイルとして用意し、それぞれのエージェントについて、移動にかかわる判断の基礎となる情報を予めエージェントプロファイルとして用意しておき、これらプラットフォームプロファイルとエージェントプロファイルとに基づいて、
エージェントが現在いるプラットフォームとは異なる他のプラットフォームでの処理が必要になった場合に、当該他のプラットフォームへエージェントが移動するか、エージェントが当該他のプラットフォームに存在する他のエージェントと協調を行うかを判断するステップと、
エージェントが他のプラットフォームへ移動するための手順を、エージェントが主体的に管理するか、プラットフォームが主体的に管理するかを判断するステップを、
コンピュータに実行させること特徴とする情報処理用ソフトウェアを記録した記録媒体。
【請求項１５】
前記ソフトウェアは前記コンピュータに、エージェントが他のプラットフォームに移動しようとするとき、直ちに移動するかどうかを判断させることを特徴とする請求項１４記載の情報処理用ソフトウェアを記録した記録媒体。
【請求項１６】
前記ソフトウェアは前記コンピュータに、それぞれのプラットフォーム上のエージェントを他のプラットフォームへ移動させるかを判断させ、判断の結果をエージェントに指示させることを特徴とする請求項１４又は１５記載の情報処理用ソフトウェアを記録した記録媒体。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ネットワーク上に分散して存在する情報を処理する技術の改良に関するものである。
【０００２】
【従来の技術】
近年、コンピュータを中心とした情報処理システム技術においては、ダウンサイジングの進行や、インターネットなどネットワーク環境の整備が進んでいる。このため、情報処理の装置や方法における主流は、データファイルや機能ライブラリなどの構成要素がネットワーク上の各マシンに分散した分散システムに移行しつつある。これに伴い、企業や研究所などのローカルネットワークでも、広域ネットワークとの接続によって環境のオープン化がより進展している。このように広域ネットワークと接続されたネットワークを開放型ネットワークと呼ぶ。
【０００３】
このような開放型ネットワークに代表される大規模ネットワークでは、しばしば、複数のマシン上に分散したいくつかのデータファイルや機能ライブラリなどの構成要素を組み合わせることによって、一つのソフトウェアを構成する。このように構成されるソフトウェアを分散システムと呼ぶ。そして、分散配置された構成要素は、マシンすなわちノードに関する管理上の事情や、ネットワークに関する管理上の事情などで、別のマシンやディレクトリに移動されたり、名称やアクセス権などの属性が変更されることが考えられるが、このような変更は、次のような問題を生ずる。
【０００４】
まず、ソフトウェアに処理を要求するときは、メッセージやコマンドなどの要求記述を入力し、この入力の際に、あるマシン上に配置されている処理に関わる特定の構成要素が指定される。しかし、指定された構成要素が他のマシンに移動されると、移動先の新しいマシンを指定するために、ソフトウェアに対する入力をやり直すか、修正しなければならない。特に、ソフトウェアの一部が、移動された構成要素にアクセスするように構成されている場合は、構成要素の移動は、ソフトウェアの構成そのものの変化を意味する。この場合、アクセスする側のソフトウェアの部分を変更して、移動先の新しいマシンを指定しなければならない。
【０００５】
従来では、マシン・機能・ファイルなどは、具体的に名指しされていたため、このように機能又はファイルが移動されると、変更に合わせてソフトウェアや入力を変更しなければならなかった。しかも、このような指定は処理開始前に行なう必要があった。
【０００６】
このため、分散システムにおいて、ユーザに対してサービスを確実に提供するには、こうした変化に対して適応する柔軟なソフトウェアを構築することが重要である。特に、このような変化に対応して、処理開始後であっても指定を変更し、かつこの変更は極力人手を介さず自動的に行われることが望ましい。
【０００７】
ネットワークにおいて、このような柔軟なソフトウェアのアーキテクチャを実現する技術として、近年、エージェント指向技術が注目され、数多くの試みがなされている。このエージェント指向技術は、エージェントを単位としてソフトウェアを構成しようとするソフトウェア開発技術であり、ここでいうエージェントは、ソフトウェア上の処理の単位で、環境の変化に自律的かつ柔軟に対応するものである。
【０００８】
例えば特開平７−１８２１７４では、リモートプログラミングの実施方法を開示している。このリモートプログラミングは、分散システムにおいて、処理が開始されたノード（ローカルマシンと呼ぶ）から、エージェントが他のノード（リモートマシンと呼ぶ）に転送されるようなプログラミングである。
【０００９】
ところで、エージェントが活動するには、インストラクションと内部状態が必要である。インストラクションは、エージェントの動作（振る舞い）を記述したもので、内部状態は、エージェントの動作によって操作される情報である。このうち内部状態は、より具体的には、変数や配列のほかスタック、バッファ、キュー、フラグなど、エージェントの動作に関連する一切の情報を含む。また、これらインストラクション及び内部状態を合わせてエージェント情報と呼ぶ。
【００１０】
インストラクションは、ファイルのオープンやクローズなど、さまざまな動作の単位ごとに記述されるが、リモートプログラミングでは、特殊なインストラクションとして、goオペレーションが用いられる。このgoオペレーションは、エージェントをリモートマシンに転送する処理を行なわせるもので、例えば、ある処理中に、別のマシンにあるファイルに対するインストラクションが含まれる場合は、そのインストラクションに先立って、goオペレーションが記述され、実行される必要がある。
【００１１】
このようなエージェントを用いるリモートプログラミングを実施する装置の一例について、構成を表す機能ブロック図を図１２に示す。この装置では、ネットワークＮに接続されたローカルマシンＬとリモートマシンＲが相互に同様の構成を有し、プロセスとしてエージェントを取り扱う。なお、ここでいうプロセスは、オペレーティングシステムによって管理の対象となる処理の単位であり、複数のプロセスを同時に管理することをマルチプロセスと呼ぶ。
【００１２】
エージェント管理手段５１Ｌ，５１Ｒは、このようなエージェントについて、資源管理、設定、終了、スケジューリング及び転送など、エージェント自身を対象とする処理を司る。このような装置において、エージェントによる処理を開始するには、まず、エージェント情報を、ローカルマシンＬ上のエージェント情報記憶手段３１Ｌに格納する。なお、エージェント情報をエージェント情報記憶手段３１Ｌに格納するには、入出力手段４１Ｌから入力したり、図示しない外部記憶装置からロードするなどすればよい。
【００１３】
また、入出力手段４１Ｌからエージェントによる処理の開始が指示されると、解釈実行手段６１Ｌが、エージェント情報記憶手段３１Ｌ内のインストラクションを逐次解釈実行することによって処理を進め、エージェント情報記憶手段３１Ｌ内の内部状態を操作する。そして、インストラクション中のgoオペレーションが解釈実行されると、解釈実行手段６１Ｌがその旨をエージェント管理手段５１Ｌに通知し、エージェント管理手段５１Ｌは次のようなエージェントを転送する処理を行う。
【００１４】
すなわち、まず、エージェント管理手段５１Ｌは、ネットワークＮを通じてリモートマシンＲ上のエージェント管理手段５１Ｒにエージェントの受け入れ準備を要求する。すると、要求を受けたエージェント管理手段５１Ｒは、資源の割当や、エージェントとして管理するプロセスの設定など、エージェントの受け入れ準備を行なった後、ローカルマシンＬ上のエージェント管理手段５１Ｌに準備完了を通知する。
【００１５】
この通知を受けたエージェント管理手段５１Ｌは、エージェント情報記憶手段３１Ｌ内のインストラクションと、上記goオペレーションの解釈実行時におけるエージェントの内部状態を読み出し、双方をリモートマシンＲに転送する。リモートマシンＲ上のエージェント管理手段５１Ｒは、転送されたインストラクションと内部状態をエージェント情報記憶手段３１Ｒに格納したうえ、解釈実行手段６１Ｒにその旨を通知し、解釈実行を開始させる。
【００１６】
このようにエージェントの転送が無事に終了すると、ローカルマシンＬ側のエージェント管理手段５１Ｌはプロセスを終了し、不要になったメモリやＣＰＵ時間など資源を開放する。
【００１７】
一方、転送された側のリモートマシンＲでは、エージェント情報記憶手段３１Ｒ内のインストラクションと内部状態を用いて、処理が続行される。なお、続行された処理がリモートマシンＲ上で終了する場合もあれば、エージェントがもとのローカルマシンＬに再度転送される場合もありうる。このようにエージェントが再度転送されると、インストラクションの実行は再度ローカルマシンＬ上で行われることになる。以上のようなリモートプログラミングによって、分散システム上における柔軟な処理が実現される。
【００１８】
また、このようなリモートプログラミングにおいて、各マシン間で共通のインストラクション及び内部状態を用いながら、解釈実行手段やエージェント管理手段などを各マシン固有のハードウェアやＯＳに合わせて構成すれば、構成の異なるマシン間で互換性が実現される。このような構成により、オペレーティングシステムおよびハードウェアが異なるコンピュータシステムにおいて、インストラクションを移動し実行できるなど、上述のような柔軟な対応が可能となる。
【００１９】
一方、ネットワーク上の複数のノードにまたがって処理を行なうための別の従来技術として、次のようなものも知られている（参考文献：Oren Etzioni and Daniel Weld "A Softbot-Based Interface to the Internet" (Communications of ACM)）。この技術では、ファイルを転送を行なうｆｔｐ、遠隔ログインのための仮想端末機能を実現するｔｅｌｎｅｔなど、通常のネットワーク機能を利用して、複数のマシンにまたがった処理を行なう。そして、動作中に収集した情報に基づき、ソフトウェアによって自動的に各機能を試行錯誤的に利用し、状況に応じて柔軟にプランニングを行なうことによって、ファイルなどの構成変化に対応した機能選択を行う。
【００２０】
例えば、目的の機能が他のノードに移転された場合、移転前のノードでその機能にアクセスしようとすると失敗するので、元のマシン（ノード）においてプランニングを行ない、アクセス先を第２候補に変更し再度アクセスする。この技術によれば、システムの各時点での状態に対応して、柔軟な動作が可能である。なお、ｔｅｌｎｅｔやｆｔｐなどの利用は互換性が予め判明している範囲内で行なう。
【００２１】
【発明が解決しようとする課題】
しかしながら、上記のような従来技術には次のような問題点が存在していた。まず、リモートプログラミングの実施方法（特開平７−１８２１７４）では、エージェントの動作系列をインストラクションとして全て利用者が記述しなければならなかったため、プログラミング作業が煩雑である上、エージェントの柔軟性に限界があった。
【００２２】
特に、また、goオペレーションによるエージェントの移動先や、利用すべき構成要素が存在するマシンのノード名（ネットワークにおける識別子）のような、ソフトウェアの構成要素の変化に対応するためには、このような変化を捕捉したり、変化に応じてインストラクションを変更する必要がある。しかし、従来は、アクセス先のマシン名が具体的に名指しされていたため、アクセス先を変更しなければ目的を達成できない場合においても、その場でインストラクションを変更することは不可能であった。このため、構成要素の変化に柔軟に対応する技術が求められていた。特に、開放型ネットワークのような大規模ネットワークになるほど変化が頻繁になるため、変化への対応が強く求められていた。
【００２３】
また、Ｅｔｚｉｏｎｉらの方法では、処理中に、ローカルマシンとリモートマシンとの間で相互にアクセスを続け、継続して情報をやり取りする必要がある。このため、処理の途中で回線障害が生じ、アクセスのルートが切断されると正常な処理の続行ができない、という問題があった。また、遠隔ノードにおける情報の内容をきめこまかく参照して処理内容を変えたり、遠隔ノードの情報へのアクセスを何度か実施する必要がある場合、また、処理に何らかのリアルタイム性が要求される場合などは、リモートマシン上のプロセスとして情報処理を行ったほうが効率的な場合もある。
【００２４】
本発明は、上記のような従来技術の問題点を解決するために提案されたもので、その目的は、状況に応じてエージェントの行動プランを作成し、他のノードでの処理を実現するために、ノード間で移動するか他のエージェントと協調するかを条件に応じて動的に選ぶことで、変化に対応して効率よく情報を処理するエージェントシステムを提供することである。
【００２５】
また、本発明の他の目的は、移動にかかわる一連の処理手順をエージェントの側で主体的に行うかプラットフォームの側で主体的に行うかも動的に選ぶことで、エージェントの自律性と全体の処理効率が優れたエージェントシステム、情報処理方法及び情報処理用ソフトウェアを記録した記録媒体を提供することである。
【００２６】
また、本発明の他の目的は、適切な移動のタイミングを選ぶことで、円滑に情報を処理するエージェントシステム、情報処理方法及び情報処理用ソフトウェアを記録した記録媒体を提供することである。また、本発明の他の目的は、移動先プラットフォームの複数の候補のなかから、適切なものを選ぶことで、処理を効率的に行うエージェントシステム及び情報処理方法を提供することである。また、本発明の他の目的は、複数のプラットフォームに順番に移動するとき、条件に応じて最適な移動順序を決めることで、処理を効率的に行うエージェントシステム及び情報処理方法を提供することである。また、本発明の他の目的は、各プラットフォームの状態に応じてエージェントを割り振ることで処理を効率的に行うエージェントシステム、情報処理方法及び情報処理用ソフトウェアを記録した記録媒体を提供することである。
【００２７】
また、本発明の他の目的は、移動にかかわる以上のような判断で参照する情報を予めプロファイルとして用意しておくことで、処理を効率的に行うエージェントシステム及び情報処理方法を提供することである。また、本発明の他の目的は、どのようにプロファイルを参照するかを動的に選ぶことで、処理を効率的に行うエージェントシステムを提供することである。
【００２８】
【課題を解決するための手段】
上に述べた目的を達成するため、請求項１の発明は、複数のプラットフォームを備えたネットワーク上でソフトウェアエージェントを動作させることで情報を処理するエージェントシステムにおいて、プラットフォーム上でエージェントを活動させる手段と、エージェントをプラットフォーム間で移動させる手段と、複数のエージェントの間で協調を行わせる手段と、それぞれのプラットフォームについて、移動にかかわる判断の基礎となる情報を表すプラットフォームプロファイルと、それぞれのエージェントについて、移動にかかわる判断の基礎となる情報を表すエージェントプロファイルとを備え、エージェントが現在いるプラットフォームとは異なる他のプラットフォームでの処理が必要になった場合に、当該他のプラットフォームへエージェントを移動させるか、エージェントに当該他のプラットフォームに存在する他のエージェントと協調を行なわせるかを、前記プラットフォームプロファイルとエージェントプロファイルに基づいて判断する手段と、エージェントを他のプラットフォームへ移動させるための手順を、エージェントに主体的に管理させるか、プラットフォームが主体的に管理するかを、前記プラットフォームプロファイルとエージェントプロファイルに基づいて判断する手段とを備えたことを特徴とする。
なお、請求項９の発明は、前記請求項１の発明を方法の観点から把握したものであり、請求項１４の発明は、前記請求項１の発明をコンピュータを使って、複数のプラットフォームを備えたネットワーク上でエージェントが動作することで情報を処理するための情報処理用ソフトウェアを記録した記録媒体として把握したものである。
【００２９】
前記のような構成を有する請求項１の発明では、エージェントがあるプラットフォームで活動しているときに他のプラットフォームでの処理が必要になった場合、エージェントを当該他のプラットフォームに移動させるか、エージェントは現在のプラットフォームに留めたまま、当該他のプラットフォーム上のエージェントとメッセージ通信などで処理を依頼する、すなわち協調を行うかが判断される。このような判断は、エージェントやそれぞれのノードが移動をサポートしているか、プラットフォーム間のネットワーク回線の信頼性が高いか低いかといった情報を予め用意しておいてそのような情報に基づいて行うことができるが、例えば、移動や協調のためのメッセージを目的のプラットフォームに試験的に送信し、しかるべきメッセージが返ってくるかどうかなどに基づいて判断したり、移動や協調のために使う特有のファイル名のファイルが目的のプラットフォーム上に存在するかなどに基づいて判断することもできる。この結果、エージェントやプラットフォームによって移動をサポートしているかどうかが異なっていたり、プラットフォームの組み合わせによって、その間の回線の信頼性が異なるような場合でも、他のプラットフォームでの処理を円滑に行うことができる。例えば、エージェントを他のプラットフォームに移動させるには、移動元と移動先の両方のプラットフォームと、エージェント自身が移動をサポートしている必要がある。また、他のプラットフォームとの間の回線の信頼性が低いときは、協調を行おうとしても途中でメッセージの受渡が途切れることも考えられるので、移動が適している。
【００３０】
また、請求項１の発明では、エージェントが他のプラットフォームへ移動するための手順、例えば、エージェントのプランや内部状態などの情報転送や移動先でのエージェント用プロセスの設定といった処理を、エージェントとプラットフォームのどちらが主体的に管理するかが判断される。このため、エージェントの移動の仕方に自由度が増え、システムの状況や構成に応じて円滑に効率良くエージェントを移動させることができる。例えば、移動の態様が複数考えられるような場合、その選択をプラットフォームに行わせると移動の態様について自由度が減るが、このような選択をエージェントに行わせることによって、エージェントの自律性を確保することが容易になる。また、移動のための手順を実行する機能をエージェントかプラットフォームのどちらか一方だけが持っているときは、その持っているほうが移動を主体的に管理する必要があり、また、両方がそのような機能を持っている場合は、どちらか現在の負荷が軽い方が手順を主体的に管理することで、負荷の片寄りを防ぎ、システム全体の処理を効率化することができる。
【００３１】
さらに、請求項１の発明では、それぞれのプラットフォームについて、エージェントの移動をサポートしているか、そのプラットフォームを接続しているネットワーク回線の信頼性が高いか低いかといった情報が、予めプラットフォームプロファイルに用意されている。このため、移動にかかわる判断を行うとき、プラットフォームやネームサーバなどに直接アクセスして調べるまでもなく、そのような情報を容易に得ることができるので、移動にかかわる判断が効率化される。なお、「移動にかかわる判断」とは、移動か協調かの判断、移動先の選択や順序の決定などを含む概念である。
また、請求項１の発明では、それぞれのエージェントについて、プラットフォーム間での移動をサポートしているか、どのようなリソースやサービスを必要とするかといった情報が、予めエージェントプロファイルに用意されている。このため、移動にかかわる判断を行うとき、エージェントの内部状態や生成履歴などを参照して調べるまでもなく、そのような情報を容易に得ることができるので、移動にかかわる判断が効率化される。
【００３２】
請求項２の発明は、エージェントが他のプラットフォームに移動しようとするとき、直ちに移動するかどうかを判断する手段を備えたことを特徴とする。請求項１０の発明は、エージェントが他のプラットフォームに移動しようとするとき、直ちに移動するかどうかを判断するステップを含むことを特徴とする。請求項１５の発明は、前記ソフトウェアは前記コンピュータに、エージェントが他のプラットフォームに移動しようとするとき、直ちに移動するかどうかを判断させることを特徴とする情報処理用ソフトウェアを記録した記録媒体に関する。
請求項２、請求項１０または請求項１５の発明では、エージェントが他のプラットフォームに移動しようとするとき、プラットフォームの状況や移動に使うネットワーク回線の状態などに応じて、直ちに移動するかしばらく待ってから移動するかが判断されるので、エージェントの移動のタイミングが多様化し、移動を確実に効率良く行うことができる。例えば、移動先のプラットフォームの負荷が高く、移動しようとするエージェントが必要とするリソースが確保できなそうな場合や、移動経路となっているネットワーク回線について現在の負荷（トラフィック）が大きかったり不安定なときは、しばらく待ってから移動したほうがよい。また、現在いるプラットフォームの負荷が大きかったりシャットダウンが間近などの場合は直ちに移動したほうがよい。
【００３３】
請求項３の発明は、移動先のプラットフォームの候補が複数あるとき、どのプラットフォームに移動するかを選択する手段を備えたことを特徴とする。請求項１１の発明は、移動先のプラットフォームの候補が複数あるとき、どのプラットフォームに移動するかを選択するステップを含むことを特徴とする。請求項１６の発明は、前記ソフトウェアは前記コンピュータに、それぞれのプラットフォーム上のエージェントを他のプラットフォームへ移動させるかを判断させ、判断の結果をエージェントに指示させることを特徴とする情報処理用ソフトウェアを記録した記録媒体に関する。
請求項３、請求項１１または請求項１６の発明では、移動先のプラットフォームの候補が複数あるとき、移動先として最適なプラットフォームが選択されるので、処理が円滑に効率良く行われる。例えば、複数の候補があっても、移動先としては、エージェントが必要とするリソース、サービス、動作の許諾を与えてくれるといった条件を満たす必要がある。また、このような条件を満たすプラットフォームが複数あっても、現在の負荷が軽いもの、そこに至るネットワーク回線の状態が安定しているもの、移動して行ったエージェントを永続的に存在させてくれるといった基準で最適なものを選ぶことが望ましい。
【００３４】
請求項４の発明は、エージェントが複数のプラットフォームに順次移動しようとするとき、それぞれのプラットフォームにどのような順序で移動するかを決定する手段を備えたことを特徴とする。請求項１２の発明は、エージェントが複数のプラットフォームに順次移動しようとするとき、それぞれのプラットフォームにどのような順序で移動するかを決定するステップを含むことを特徴とする。
請求項４または請求項１２の発明では、エージェントが複数のプラットフォームに順次移動しようとするとき、それぞれのプラットフォームの負荷やそこに至るネットワーク回線の状態などに基づいて、最適な移動の順序が決定されるので、エージェントごと、プラットフォームごと、及びシステム全体の処理効率が向上する。例えば、負荷が軽いプラットフォームや、移動のためのネットワーク回線が空いていて安定しているプラットフォームを順序の最初にすれば、そのようなプラットフォームで処理を行っている間に他のプラットフォームの負荷や、他のプラットフォームまでのネットワーク回線の状態が改善する可能性が高いため、システム全体の負荷が平均化され、処理が滞る可能性を少なくすることができる。
【００３５】
請求項５の発明は、前記プラットフォームは、自プラットフォーム上のエージェントを他のプラットフォームへ移動させるか、及び、他のプラットフォーム上のエージェントを自プラットフォームへ移動させるかを判断する手段と、判断の結果をエージェントに指示する手段と、を備えたことを特徴とする。請求項１３の発明は、前記プラットフォームは、自プラットフォーム上のエージェントを他のプラットフォームへ移動させるか、及び、他のプラットフォーム上のエージェントを自プラットフォームへ移動させるかを判断するステップと、判断の結果をエージェントに指示するステップと、を実行することを特徴とする。
請求項５または請求項１３の発明では、それぞれのプラットフォームの状態に応じて、エージェントにプラットフォーム間での移動の指示が伝えられる。このため、エージェントがそれぞれのプラットフォームに動的に割り振られ、システム全体の処理が効率化される。例えば、自プラットフォームの負荷が非常に高い場合や、提供していないサービスやリソースをエージェントから求められた場合などに、他のプラットフォームが該当する機能を有しているかどうかを調べ、その結果をもとに他のプラットフォームへの移動を指示する。また、他のプラットフォームの負荷が高い場合などに、自プラットフォームへの移動をエージェントに指示するといった例が考えられる。
【００３６】
請求項６の発明は、前記プラットフォームプロファイルは、それぞれのプラットフォームについて、
ａ）エージェントを移動させるための機能を備えているかどうか、
ｂ）そのプラットフォームにかかわるネットワーク回線の信頼性が高いか低いか、
ｃ）エージェントを永続的に存在させることができるか、
ｄ）エージェントにどのような種類の動作を認めているか、
ｅ）どのようなプログラミング言語を実行することができるか、
ｆ）前記移動のための処理をプラットフォームが主体的に管理するか、
ｇ）どのような種類及び分量のリソースを提供するか、
ｈ）どのようなエージェントが存在しているか、
ｉ）どのようなサービスを提供するか、
ｊ）いつまで活動するか、
のうち少なくとも１つの情報を表すことを特徴とする。
請求項６の発明では、エージェントの移動をサポートしているかだけでなく、プラットフォームが提供するリソース、サービス、動作の種類ごとの許諾（パーミッション）など、いろいろな項目をプラットフォームプロファイルに登録しておくことができるので、このようなプラットフォームプロファイルを参照することで、移動に関してきめ細かな判断を容易に行うことが可能になる。
【００３７】
請求項７の発明は、前記エージェントプロファイルは、それぞれのエージェントについて、
ｋ）エージェントがプラットフォーム間で移動する能力を持つかどうか、
ｌ）前記移動のための処理をエージェントが主体的に管理するか、
ｍ）エージェントがどのような種類及び分量のリソースを必要とするか、
ｎ）いつまで活動するか、
ｏ）エージェントの動作がどのようなプログラミング言語で記述されているか、
ｐ）エージェントがどのようなサービスを必要とするか、
のうち少なくとも１つの情報を表すことを特徴とする。
請求項７の発明では、プラットフォーム間での移動能力だけでなく、エージェントの動作がどのような言語やバージョンで記述されているか、どのようなリソース、サービス、パーミッションが必要かなど、いろいろな項目をエージェントプロファイルに登録しておくことができるので、このようなエージェントプロファイルを参照することで、移動に関してきめ細かな判断を容易に行うことが可能になる。
【００３８】
請求項８の発明は、前記プロファイルをどのように参照するかを判断する参照判断手段を備えたことを特徴とする。
請求項８の発明では、移動にかかわる判断を行うとき、プラットフォームプロファイルやエージェントプロファイルの参照をどのように行うかが決定されるので、それらプロファイルがどのハードウェア上にあるかなどの状況に応じて、最も効率的な参照の仕方を選ぶことができる。例えば、あるエージェントやそのエージェントが現在いるプラットフォームがあるプロファイルを参照しようとするとき、負荷が高かったり、そのプラットフォームのファイルを参照する権限がなかったり、そのプラットフォームのファイルが他のプラットフォーム上にあって途中のネットワーク回線の状態が悪い、といった事情のため自ら参照できない場合、他のエージェントに参照を依頼する必要がある。また、例えば、このように参照を依頼されたエージェントやそのプラットフォームは、最新の正確な情報を得るためには、指定されたプロファイルを新たに調べることが望ましいが、負荷が高いような場合は、既知の情報、すなわち前回参照してエージェントのメモリ領域内に保存されている情報を回答するほうが応答時間の点で望ましい場合も考えられる。
【００３９】
【発明の実施の形態】
以下、本発明の実施の形態（以下「実施形態」という）について図面を参照しながら説明する。なお、本発明は、周辺機器を持つコンピュータを、ソフトウェアで制御することによって実現されることが一般的と考えられる。この場合、そのソフトウェアは、この明細書の記載にしたがった命令を組み合わせることで作られ、上に述べた従来技術と共通の部分には従来技術で説明した手法も使われる。また、そのソフトウェアは、プログラムコードだけでなく、プログラムコードの実行のときに使うために予め用意されたデータも含む。
【００４０】
そして、そのソフトウェアは、ＣＰＵ、コプロセッサ、各種チップセットといった処理装置、キーボードやマウスといった入力装置、メモリやハードディスク装置といった記憶装置、ディスプレイやプリンタといった出力装置などの物理的な資源を活用することで本発明の作用効果を実現する。
【００４１】
但し、本発明を実現する具体的なソフトウェアやハードウェアの構成はいろいろ変更することができる。例えば、ソフトウェアの形式には、コンパイラ、インタプリタ、アセンブラなどいろいろあり、外部との情報をやり取りするにも、フロッピーディスクなどの着脱可能な記録媒体、ネットワーク接続装置などいろいろ考えられる。また、本発明を実現するソフトウェアやプログラムを記録したＣＤ−ＲＯＭのような記録媒体は、単独でも本発明の一態様である。さらに、本発明の機能の一部をＬＳＩなどの物理的な電子回路で実現することも可能である。
【００４２】
以上のように、コンピュータを使って本発明を実現する態様はいろいろ考えられるので、以下では、本発明や実施形態に含まれる個々の機能を実現する仮想的回路ブロックを使って、本発明と実施形態とを説明する。
【００４３】
〔１．構成〕
〔１−１．全体の構成〕
まず、図１は、本実施形態のエージェントシステムの全体構成を示すブロック図である。すなわち、本実施形態のエージェントシステムは、この図に示すように、複数の電子計算機（マシンと呼ぶ）１００，１１０，１２０，１３０，１４０をネットワーク回線Ｎで接続したコンピュータネットワークであり、図１では、これらマシンの代表例として、マシン１００のハードウェア構成を示している。
【００４４】
つまり、マシン１００は、ハードウェアとして、ＣＰＵ１０１と、ＲＡＭなどを使ったメインメモリ１０２と、補助記憶装置であるハードディスク装置１０３と、ＣＲＴディスプレイやプリンタなどの出力装置１０４と、キーボードやマウスなどの入力装置１０５と、ネットワーク接続装置１０６と、それらを結線するバスなどを備えていて、このネットワーク接続装置１０６を通じてネットワーク回線Ｎに接続されている。また、マシン１１０〜１４０もマシン１００と同様のハードウェア構成を備えている。
【００４５】
また、物理的には単一のマシン上に、ネットワークを管理する理論的な単位として複数のノードを設定することも可能であるが、ここでは、両者を含めてマシンと総称する。そして、各マシン上には、１つ又は複数のプラットフォーム１０７が設定される。このプラットフォーム１０７は、エージェント１０８が活動する舞台であり、エージェントが必要とするコンピュータ上のリソース（資源）や、サービスなどを提供する。
【００４６】
このようなプラットフォーム１０７は、起動前はハードディスク装置１０３上にデータとして存在し、起動することでメインメモリ１０２上にロードされる。このように起動されメインメモリ１０２上にロードされたプラットフォーム１０７の動作は、プラットフォーム１０７の動作を記述したプログラムコードをＣＰＵ１０１が実行するという処理によって実現される。また、他のマシン１１０，１２０，１３０，１４０の上にも、同様に、それぞれプラットフォーム１１７，１２７，１３７，１４７が設定されるが、以下、これらの１０７，１１７，１２７，１３７，１４７を代表してプラットフォーム１０７と表す。
【００４７】
また、それぞれのプラットフォーム１０７は、後に述べるように、そのプラットフォームのいろいろな属性を表す情報として、プラットフォームプロファイルを持つ。この情報は、そのプラットフォーム１０７が使っているハードディスク装置１０３などの上に保持され、後で説明するようなデータ構造を有する。また、プラットフォームの活動を実現する以下のような構成は、プラットフォームの内部に用意される。
【００４８】
〔１−２．プラットフォームの具体的な構成〕
また、図２は、プラットフォーム１０７に代表される各プラットフォームと、その上で動作するエージェントの構成を示す機能ブロック図であり、この図ではエージェントを符号Ａで表す。すなわち、プラットフォームは、まず、この図に示すように、プラットフォーム上でエージェントを活動させる手段として、エージェント管理部１と、エージェント情報２と、プラン実行部３と、プラン生成部４と、プラン生成用知識５と、を備えている。
【００４９】
このうち、エージェント管理部１は、エージェントを新しく生成したり、登録して監視したり、メモリなどのリソースを割り当てたり、消滅させたりといった管理を行う部分である。また、エージェント情報２は、個々のエージェントが活動するために必要な情報であり、エージェント情報２の具体例としては、プランと、内部状態とを挙げることができる。このうちプランは、エージェントがどのような場合にどのような行動を取るべきかを記述したもので、内部状態とは、そのようなプランを実行するときに使う変数、スタック、ポインタ、バッファなど各種の情報を総称したものである。
【００５０】
また、プラン実行部３は、上に述べたようなプランを実行することで、プラットフォーム上でエージェントＡを存在させ、活動させる部分である。また、プラン生成部４は、上に述べたようなプランを、エージェントが生成されたときに生成したり、その後も状況に応じて再生成する部分である。
【００５１】
また、プラン生成用知識５は、プラン生成に使う知識であり、その具体例として、アクション知識と、ローカル知識とを挙げることができる。このうちアクション知識は、プランを構成する部品となる動作として、どのような種類のアクションがあるかを表すもので、ローカル知識は、ネットワーク上のどのようなプラットフォーム上にどのようなファイルや機能があるかといった事実に関する知識である。
【００５２】
このローカル知識には、不確実知識が含まれる。この不確実知識は、プランが生成されたプラットフォーム以外の他のプラットフォームでの何らかの処理が必要な知識であり、例えば、あるプラットフォームＦ１上において、ある目的のファイルが他のプラットフォームＦ２に「存在する可能性がある」といった知識である。このような不確実知識を使って生成されたプランは、実行するときに、不確実知識を確認するためにそのような他のプラットフォームでの処理が必要となる。
【００５３】
また、プラットフォームは、移動部６と、協調部７と、通信部８と、を備えている。このうち移動部６は、エージェントをプラットフォーム間で移動させる手段であり、具体的には、エージェント情報２を他のプラットフォームに転送したうえで、エージェント管理部１に指示してエージェントを抹消させたり、他のプラットフォームからエージェント情報２の転送を受け、エージェント管理部１に指示してそのエージェント情報２を使ってエージェントを生成させ、活動を開始させたりする部分である。
【００５４】
また、協調部７は、複数のエージェントの間で協調を行わせる手段であり、特に、互いに異なったプラットフォーム上に存在する複数のエージェントの間で協調を行わせる点に特に実益がある。具体的には、この協調部７は、契約ネットプロトコルなどにしたがって、自プラットフォーム上のエージェントから他のプラットフォーム上のエージェントに作業を依頼させたり、逆に、他のプラットフォーム上のエージェントから自プラットフォーム上のエージェントに作業の依頼を請け負わせたりする部分である。また、通信部８は、移動部６や協調部７などの指示に基づいて、ネットワーク回線を通して他のプラットフォームとの間でデータ転送などの通信を行う部分である。
【００５５】
〔１−３．エージェントの構成〕
また、エージェントは、システムを構成する単位で、実行可能なプログラムコードと、その実行で使うデータ、特にプラン及び内部状態の集合であり、条件に応じて自律的に行動する。このエージェントは、生成されて起動される前はハードディスク装置などの記憶装置上にデータとして保存しておくことができ、この場合、生成されたり起動されることでメモリ上にロードされる。このように起動されてメモリ上にロードされたエージェントの活動は、エージェントを構成するプログラムコードをＣＰＵが実行するという処理によって実現される。
【００５６】
また、それぞれのエージェントは、そのエージェントのいろいろな属性を表す情報として、エージェントプロファイルを持つ。この情報は、エージェントの内部に保持されるか、又はエージェントと対応付けてプラットフォーム内に保持され、後で説明するようなデータ構造を有する。また、エージェントの活動を実現する構成は、以下に述べるようにエージェントの内部に用意される。
【００５７】
すなわち、プラットフォーム上では、エージェント管理部１によって生成され、プラン実行部３がプランを実行することでエージェントＡが活動するが、このエージェントＡは、移動協調判断部１１と、主体判断部１２と、タイミング判断部１３と、移動先選択部１４と、順序決定部１５と、を備えている。
【００５８】
このうち移動協調判断部１１は、エージェントＡが現在いるプラットフォームとは異なる他のプラットフォームでの処理が必要になった場合に、当該他のプラットフォームへ移動するか、当該他のプラットフォームに存在する他のエージェントと協調を行うかを判断する手段である。また、主体判断部１２は、エージェントＡが他のプラットフォームへ移動するための手順を、エージェントＡが主体的に管理するか、プラットフォームが主体的に管理するかを判断する手段である。
【００５９】
また、タイミング判断部１３は、エージェントＡが他のプラットフォームに移動しようとするとき、直ちに移動するかどうかを判断する手段である。また、移動先選択部１４は、移動先のプラットフォームの候補が複数あるとき、どのプラットフォームに移動するかを選択する手段である。また、順序決定部１５は、エージェントが複数のプラットフォームに順次移動しようとするとき、それぞれのプラットフォームにどのような順序で移動するかを決定する手段である。
【００６０】
〔１−４．プラットフォームの他の構成〕
また、プラットフォームは、割り振り部９と、プラットフォームプロファイル２１と、上に述べたエージェントプロファイル２２と、参照判断部２３と、を備えている。このうち割り振り部９は、エージェントシステム内の各プラットフォームについて、状況に応じてエージェントを移動させることでエージェントの割り振りを行う部分である。
【００６１】
具体的には、割り振り部９は、自プラットフォーム上のエージェントを他のプラットフォームへ移動させるかどうか、また、他のプラットフォーム上のエージェントを自プラットフォームへ移動させるかどうかといった判断を、各プラットフォームやネットワーク回線の状況に応じて行い、この判断の結果にしたがって、エージェントに移動を指示するように構成されている。
【００６２】
また、プラットフォームプロファイル２１は、それぞれのプラットフォームについて、移動にかかわる判断の基礎となる情報を表すもので、後で詳しく説明するが、
ａ）エージェントを移動させるための機能を備えているかどうか、
ｂ）そのプラットフォームにかかわるネットワーク回線の信頼性が高いか低いか、
ｃ）エージェントを永続的に存在させることができるか、
ｄ）エージェントにどのような種類の動作を認めているか、
ｅ）どのようなプログラミング言語を実行することができるか、
ｆ）前記移動のための処理をプラットフォームが主体的に管理するか、
ｇ）どのような種類及び分量のリソースを提供するか、
ｈ）どのようなエージェントが存在しているか、
ｉ）どのようなサービスを提供するか、
ｊ）いつからいつまで活動するか、
という項目の情報を含んでいる。
【００６３】
また、エージェントプロファイル２２は、それぞれのエージェントについて、移動にかかわる判断の基礎となる情報を表すもので、後で詳しく説明するが、
ｋ）エージェントがプラットフォーム間で移動する能力を持つかどうか、
ｌ）前記移動のための処理をエージェントが主体的に管理するか、
ｍ）エージェントがどのような種類及び分量のリソースを必要とするか、
ｎ）いつからいつまで活動するか、
ｏ）エージェントの動作がどのようなプログラミング言語で記述されているか、
ｐ）エージェントがどのようなサービスを必要とするか、
という項目の情報を含んでいる。
【００６４】
これらプラットフォームプロファイル２１やエージェントプロファイル２２を、どこに、どのように保存しておくかについてはいろいろな形が考えられる。典型的には、それぞれのエージェントに関するエージェントプロファイル２２はそのエージェントの一部としておけばよく、また、プラットフォームに関するプラットフォームプロファイル２１は、それぞれのプラットフォームに置いておけばよい。しかし、これらプラットフォームプロファイル２１やエージェントプロファイル２２は、予め決めた特定のプラットフォームや、一部のいくつかのプラットフォームに集中保存することもできる。
【００６５】
また、参照判断部２３は、これらのプロファイル２１をどのように参照するかを判断する参照判断手段であり、具体的には例えば、プラットフォームの負荷、プロファイルを参照するための権限をエージェントが持っているかどうか、目的のプロファイルがあるプラットフォームまでのネットワーク回線の状態などに応じて、他のエージェントに参照を依頼するかどうかを判断したり、他のプラットフォームや他のプラットフォーム上のエージェントから協調部７を通じて参照を依頼された場合は、負荷の程度などに応じて、改めてプロファイルから最新の情報を調べるか、前回の参照などで既に判明している範囲で回答するかなどを判断するように構成されている。
【００６６】
〔１−５．プラットフォームプロファイルのデータ構造〕
また、プラットフォームプロファイル２１のデータ構造、すなわち項目としては、次のようなものが考えられる。
ａ）移動サポート
これは、個々のプラットフォームが移動エージェント、すなわちプラットフォーム間を移動するエージェントをサポートしているかを表し、移動サポートａと呼ぶ。この項目では、例えば、あらかじめ決めた「mobility-support」といった適当なキーワードに続けて、次に示すようにＹｅｓ／Ｎｏなどの値として記述しておいたり、そのような名前の属性に属性値として設定しておけばよい。
mobility-support  Yes / No
【００６７】
ｂ）信頼性
これは、プラットフォーム間の情報のやり取りに使うネットワーク回線やその部分ごとに、ネットワーク回線の信頼性が高いか低いかを表すもので、信頼性ｂと呼ぶ。この項目では、例えば、あらかじめ決めた「network-reliability 」といった適当なキーワードに続けて、次に例示するようにＨｉｇｈ／Ｌｏｗなどの値として記述したり、そのような名前の属性に属性値として設定しておけばよい。
network-reliability  High / Low
【００６８】
ｃ）永続性
これは、個々のプラットフォームが、エージェントを永続的に存在させることができるかどうかを表すもので、永続性ｃと呼ぶ。例えば、ＰＤＡのような小型携帯端末などについては、常時電源をオンにしておく性質のものではなく、またハードディスク装置やメインメモリなどの空き容量にも限りがあるため、エージェントを永続的に存在させることは期待できない。この項目では、例えば、あらかじめ決めた「persistency 」といった適当なキーワードに続けて、次に例示するようにＹｅｓ／Ｎｏなどの値として記述しておいたり、そのような名前の属性に属性値として設定しておけばよい。
persistency  Yes / No
【００６９】
ｄ）パーミッションリスト
これは、個々のプラットフォームが、それぞれのエージェントごとに、データの書き込みや読み出し、プランの実行といった行動の種類ごとに、許しているかどうか（パーミッション）を表すものであり、パーミッションリストｄと呼ぶ。この項目では、例えば、あらかじめ決めた「permission  」といった適当なキーワードに続けて、１つ又は複数のエージェントの名前と、そのエージェントにどのような行動について許可を与えているかを、次に例示するように列挙しておけばよい。
0003688471.tif 000002
【００７０】
ｅ）プラットフォーム言語リスト
これは、個々のプラットフォーム上で動作可能な言語とバージョンのリストであり、プラットフォーム言語リストｅと呼ぶ。プラットフォーム上で動作可能な言語としては、例えば「Ｊａｖａ言語」の「Ｖｅｒ．  １．１以降」や、「ＶＣ＋＋」の「Ｖｅｒ．  ５．０以降」などといった範囲が考えられる。この項目では、例えば、あらかじめ決めた「language/version」といった適当なキーワードに続けて、１つ又は複数の言語の種類やバージョンを、次に例示するように列挙しておけばよい。
0003688471.tif 000003
【００７１】
ｆ）プラットフォーム移動管理
これは、個々のプラットフォームの側で、エージェントをプラットフォーム間での移動させるための一連の処理、すなわちプロトコルを主体的に管理するかどうかを表すもので、プラットフォーム移動管理ｆと呼ぶ。この項目では、例えば、あらかじめ決めた「mobility-protocol-support 」といった適当なキーワードに続けて、次に例示するようにＹｅｓ／Ｎｏなどの値として記述しておいたり、そのような名前の属性に属性値として設定することができる。
mobility-protocol-support  Yes / No
【００７２】
ｇ）提供リソースリスト
これは、個々のプラットフォームがエージェントに提供するリソースの種類／量と現在のリソースの量とをリストにしたもので、提供リソースリストｇと呼ぶ。リソースの種類としては、例えば、マルチタスクシステムにおけるＣＰＵのタイムスライス、ハードディスク容量、メモリ容量などの物理的資源が考えられる。この項目では、あらかじめ決めた「resources 」といった適当なキーワードに続けて、１つ又は複数のリソースの名称、最大限提供可能な量や現在提供可能な量を、次に例示するように列挙しておけばよい。
0003688471.tif 000004
【００７３】
ｈ）エージェントリスト
これは、個々のプラットフォーム上に乗っている、すなわち現在活動中のエージェントのリストであり、エージェントリストｈと呼ぶ。この項目では、あらかじめ決めた「agents」といった適当なキーワードに続けて、１つ又は複数の名称や種類を、次に例示するように列挙しておけばよい。
0003688471.tif 000005
【００７４】
ｉ）提供サービスリスト
これは、個々のプラットフォームがエージェントに対してどのようなサービスを提供できるかを表すリストであり、提供サービスリストｉと呼ぶ。プラットフォームが提供するサービスとしては、例えば、無線通信、プランニング、データベースへのアクセスなどのソフトウェア的な各種の機能を挙げることができる。この項目では、例えば、あらかじめ決めた「services」といった適当なキーワードに続けて、サービスの名称を、次に例示するように列挙しておけばよい。
services  servicename1,servicename2,・・・
ｊ）プラットフォームスケジュール
これは、個々のプラットフォームが動作している時間帯を表すもので、このスケジュールに応じて、そのプラットフォーム上のエージェントがいつまで存続できるか、すなわち存続期間、存続期限、停止期間などが決まる。プラットフォームが動作している時間帯や存続期限などに影響する事柄としては、例えば、寿命、メンテナンス時間帯、電源が供給される時間帯などを挙げることができる。この項目はプラットフォームスケジュールｊと呼び、例えば、あらかじめ決めた「schedule」といった適当なキーワードに続けて、そのプラットフォームの起動時刻と終了時刻との組を、次に例示するように１つ又は複数列挙しておけばよい。
0003688471.tif 000006
〔１−６．エージェントプロファイルのデータ構造〕
また、エージェントプロファイル２２のデータ構造、すなわち項目としては、次のようなものが考えられる。
ｋ）移動可能性
これは、エージェント自体がプラットフォーム間で移動する機能を持っているかどうかを表すもので、移動可能性ｋと呼ぶ。この項目では、例えば、あらかじめ決めた「mobility-possibility」といったキーワードに続けて、次に示すようにＹｅｓ／Ｎｏなどの値で記述しておいたり、そのような名称の属性に属性値として設定することができる。
mobility-possibility  Yes / No
【００７５】
ｌ）エージェント移動管理
エージェント自身が、プラットフォーム間での移動手順を主体的に管理する機能を持っているかどうかを表すもので、エージェント移動管理ｌと呼ぶ。エージェントの側で主体的に移動を管理する例としては、例えばエージェントの移動に必要な通信やデータのコピー、手続き終了の監視といった手順をエージェントが行い、プラットフォームはこれらの動作をネットワーク回線に機械的に仲介するのみといった例が考えられる。この項目は、例えば、あらかじめ決めた「mobility-protocol-support 」といったキーワードに続けて、次に例示するようにＹｅｓ／Ｎｏなどの値で記述しておいたり、そのような名称の属性に属性値として設定することができる。
mobility-protocol-support  Yes / No
【００７６】
ｍ）必要リソースリスト
これは、エージェントが必要とするリソースの種類と量のリストであり、必要リソースリストｍと呼ぶ。この項目では、例えば、あらかじめ決めた「resources 」といったキーワードに続けて、次に例示するようにリソースの名称や必要量を列挙しておけばよい。
0003688471.tif 000007
【００７７】
ｎ）エージェントスケジュール
これは、エージェントがいつからいつまで活動を継続できるかを表し、エージェントの側の存続期間、停止期間を決めるもので、エージェントスケジュールｎと呼ぶ。このようなエージェントの側の存続期限はいわばエージェントの寿命にあたるものであり、予め決められた終了時刻などをタイマーで監視し、時刻が到来するとエージェントが自発的に消滅したり外部からエージェントを抹消するなどの処理によって実現することができる。この項目では、あらかじめ決めた「schedule」といったキーワードに続けて、エージェントの起動時刻や終了時刻を次に例示するように列挙しておけばよい。
0003688471.tif 000008
【００７８】
ｏ）エージェント言語バージョン
これは、エージェントを構成するプログラムコードがどのような言語のどのようなバージョンで記述されているかを表すもので、エージェント言語バージョンｏと呼ぶ。この項目は、例えば、あらかじめ決めた「language/version」といった適当なキーワードに続けて、次に例示するように、言語の種類やバージョンを記述しておけばよい。
language/version  言語の種類、バージョン
【００７９】
ｐ）必要サービスリスト
これは、エージェントが活動するためにどのようなサービスを必要とするかを表すもので、必要サービスリストｐと呼ぶ。この項目では、例えば、あらかじめ決めた「services」といったキーワードに続けて、次に例示するようにサービスの名称を記述しておけばよい。
services  servicename1,servicename2,・・・
以上説明したようなデータ構造を持つプラットフォームプロファイル２１及びエージェントプロファイル２２は、具体的には例えば、それぞれ図３及び図４に示すような形式のデータとして、個々のプラットフォームごとに、メインメモリ上又はハードディスク装置のような補助記憶装置上に格納されている。なお、図３に示すプラットフォームプロファイルの例と、図４に示すエージェントプロファイルの例は、それぞれ、上に説明したデータの項目に加えて、プラットフォーム名などの識別子や、移動や協調などにどのようなプロトコルを使うかなどの項目を加えた例であるが、具体的なデータ構造は実施の際に自由に決めることができる。
【００８０】
〔２．作用〕
上に述べたように構成された本実施形態は、次のように働く。まず、図５は、本実施形態における処理手順を示すフローチャートである。
【００８１】
〔２−１．要求記述の入力と初期化〕
すなわち、まず、利用者が、本システムへの要求記述を入力する（ステップ２０１）。この要求記述は、情報処理の結果として達成したい状態を、予め定められた形式で記述したものであり、このように入力された要求記述はゴールに変換される。このゴールは、エージェントによる情報処理によって達成したい状態を、エージェントやプラン生成部４が処理できる形式で表わしたものである。
【００８２】
続いて、初期化の処理として、プラットフォームのエージェント管理部１が、ゴールの達成に使うエージェントを生成し、プラットフォームプロファイル２１のエージェントリストｈに生成したエージェントの名称を登録したり、生成したエージェントのエージェントプロファイル２２を設定したり、エージェントの内部状態に所定の初期値を設定したり、エージェントに資源を割り当てるといった初期化の処理を行う（ステップ２０２）。
【００８３】
〔２−２．プランニング〕
このようにエージェントが生成されると、プラン生成部４が、変換されたゴールを達成するためのプランを生成（プランニング）する（ステップ２０３）。ここで、プラン生成用知識５には、プランを構成する部品として、エージェントはどのような種類の動作を実行できるかという情報、すなわちアクション知識が含まれている。このような単位となる動作はアクションとも呼ばれ、動作ごとに、事前条件と事後条件とが予め決められている。
【００８４】
ここで、事前条件とは、その動作を実行するために必要な条件であり、事後条件とは、その動作の実行によって作りだされる条件である。このため、ある動作である事後条件が達成されれば、その事後条件に対応する事前条件を持つ動作が実行できる状態となる。例えば、「ファイルをコピーする」という動作を行うには、「現在いるプラットフォームにファイルが存在する」という事前条件が必要であり、コピーの動作を行なった結果として「ファイルのコピーが存在する」という事後条件が産み出される。
【００８５】
すなわち、プランの生成は、最終的なゴールを事後条件として産み出す動作を発見し、この動作の事前条件を事後条件として産み出すさらに別の動作を発見する、という処理を続けることによって、プランを実行する前の状態（現在の状態）と最終的なゴールとの間をつなぐ動作の列を得ることである。なお、図６は、生成途中におけるプランの例を示す図であり、この例では、動作Ｐ２の一方の事前条件Ｃ５と、動作Ｐ３の事前条件Ｃ７について、これら事前条件を事後条件として産み出す動作がまだ見つかっていない。このように、事後条件として産み出す他の動作がまだ見つかっていない事前条件は未達成ゴールと呼ばれる。
【００８６】
このようなプラン生成の処理は、ゴールの側から因果を逆に遡って行ない、プランの実行を開始する時点で存在している状態（現在の状態）に到達すると終了する。図７は、このような処理によって完成したプランの例を示す図である。
【００８７】
続いて、プラン生成の具体的な手順を図８に示す。すなわち、この手順では、ゴールを記録しておくゴールリストの一部を、図６に示したような未達成ゴールを記録しておく未達成ゴールリストとしておき、次のような処理を行う。まず、ゴールリストに未達成ゴールが存在しなくなるまで（ステップ４０１）、未達成ゴールリストから未達成ゴールを１つずつ選択し（ステップ４０２）、ゴールが満足されている場合を除いて（ステップ４０３）、次のような動作を行う。すなわち、ゴールである事前条件を事後条件によって達成可能な動作が存在すれば（ステップ４０４）この動作を選択し（ステップ４０５）、このように選択した動作（選択動作）を図６に示したような動作の系列（プラン木）に追加する（ステップ４０５）。
【００８８】
また、ゴールを達成可能な動作が存在しない場合は、ゴールが不確実知識で達成可能かを判断する。ここで、不確実知識とは、上に述べたように、ネットワークの構成に関する知識のうち、他のプラットフォームで実際に何らかの処理を行なってみないと、真偽などの具体的な値がわからない知識である。ゴールが不確実知識で達成可能な場合はこの不確実知識を選択動作としてプラン木に追加するが（ステップ４０５）、不確実知識でも達成不可能な場合は、処理をバックトラックさせ（ステップ４０８）、現在の未達成ゴールを生じさせている動作を他の動作に置き換えて再度処理を行う。
【００８９】
例えば、利用者が使用するプラットフォームの知識で、「ファイルａがプラットフォームＦ１に存在する」とされているとする。この場合、ファイルａを得るというゴールを利用者が与えると、プラットフォームＦ１に存在するという知識が参照されるので、生成されたエージェントのプランは、「プラットフォームＦ１に移動してファイルａのコピーを利用者のプラットフォームに送信する」、といった内容になる。
【００９０】
しかし、エージェントがプラットフォームＦ１に移動した時点で、ファイルａはプラットフォームＦ２に移動されていると、ファイルａが発見できないためにプランは実行失敗となり、プラットフォームＦ１上で再プランニングが行なわれる。このとき、プラットフォームＦ２の知識をファイルの移動にあわせて「ファイルａはプラットフォームＦ２に存在する」のように更新しておく。これによって、新しいプランは「プラットフォームＦ２に移動してファイルａのコピーを利用者のプラットフォームに送信する」、という内容に変更される。この結果、エージェントはプラットフォームＦ２に自律的に移動し、ファイルａを無事発見して利用者のプラットフォームに送信することができる。
【００９１】
〔２−３．プランの実行〕
上に述べたようなプランニング手順（図５のステップ２０３）が終了すると、プラン実行部３が、生成されたプランを実行する。プランの実行では、ゴールが達成されたと判定されるまで（ステップ２０４）、プランに含まれるアクションを１つずつ取り出し（ステップ２０６）、アクションに不確実知識が含まれている場合など、他のプラットフォームでの処理が必要な場合は、エージェントが目的のプラットフォームに移動するか（移動と呼ぶ）、目的のプラットフォームに存在するエージェントに処理を依頼（協調と呼ぶ）することで処理を実行する（ステップ２０９）。
【００９２】
この移動又は協調の具体的な手順について、図９に示しながら、以下に詳しく説明する。
【００９３】
〔２−４．移動か協調かの判断〕
図９の手順では、現在いるプラットフォームと異なるプラットフォームでの処理が必要になった場合、エージェントの移動協調判断部１１は、その処理を行うために移動するか協調するかを、プラットフォームプロファイル２１の移動サポートａ、信頼性ｂや、エージェントプロファイル２２の移動可能性ｋなどに基づいて、動的に選択する（ステップ３１）。
【００９４】
例えば、プラットフォームＦ１上のエージェントＡ１では、プラットフォームＦ２上での作業を必要とした際に、移動協調判断部１１が、エージェントプロファイル２２から移動可能性ｋを検索することによって、自分が移動可能であるかどうかを調べる。そして、自分が移動可能でないことがわかったときは、移動協調判断部１１は協調を選択するので（ステップ３２）、エージェントＡ１は協調部７を通して、プラットフォームＦ２上のエージェントＡ２とメッセージをやり取りすることで、必要な作業を依頼する（ステップ３８）。
【００９５】
一方、自分が移動可能であることがわかった場合、エージェントＡ１の移動協調判断部１１は、さらにプラットフォームＦ１の内部にあるプラットフォームプロファイル２１から移動サポートａを検索することによって、プラットフォームＦ１がエージェントを移動させる機能すなわち移動エージェントをサポートしているかどうかを調べる。なお、このようにプラットフォームプロファイル２１の内容を知りたい場合は、プラットフォームＦ１にこれを問い合わせ、プラットフォームＦ１がプラットフォームプロファイル２１を検索したうえで、その結果をエージェントＡ１に返すようにしてもよい。
【００９６】
そして、プラットフォームＦ１が移動エージェントをサポートしていないことがわかった場合、移動協調判断部１１は協調を選択し（ステップ３２）、その結果、エージェントＡ１は協調部７を通して、プラットフォームＦ２上のエージェントＡ２に対して、必要な作業を依頼する（ステップ３８）。
【００９７】
一方、プラットフォームＦ１が移動エージェントをサポートしていることがわかった場合、エージェントＡ１の移動協調判断部１１は、さらに、移動先となるプラットフォームＦ２の内部にあるプラットフォームプロファイル２１から移動サポートａを検索することによって、プラットフォームＦ２も移動エージェントをサポートしているかどうかを調べる。なお、このようにプラットフォームＦ２のプラットフォームプロファイル２１の内容を知りたい場合は、プラットフォームＦ２にこれを問い合わせ、プラットフォームＦ２がプラットフォームプロファイル２１を検索したうえで、その結果をエージェントＡ１に返すようにしてもよい。
【００９８】
そして、プラットフォームＦ２が移動エージェントをサポートしていないことがわかった場合、移動協調判断部１１は協調を選択し（ステップ３２）、その結果、エージェントＡ１は協調部７を通して、プラットフォームＦ２上のエージェントＡ２に対して、必要な作業を依頼する（ステップ３８）。
【００９９】
一方、プラットフォームＦ２が移動エージェントをサポートしていた場合、エージェントＡ１は、さらに、上に説明したのと同じように、移動元となるプラットフォームＦ１をネットワークに接続しているネットワーク回線の信頼性と、移動先となるプラットフォームＦ２をネットワークに接続しているネットワーク回線の信頼性とを、それぞれのプラットフォームプロファイル２１から信頼性ｂを検索することによって調べる。
【０１００】
そして、両者の信頼性が高い場合、移動協調判断部１１は協調を選択し（ステップ３２）、その結果、エージェントＡ１は協調部７を通して、プラットフォームＦ２上のエージェントＡ２に対して、必要な作業を依頼する（ステップ３８）。一方、両者または片方のネットワーク回線の信頼性が低い場合、移動協調判断部１１は移動を選択し（ステップ３２）、その結果、エージェントＡ１は、プラットフォームＦ２上に移動するための動作に入り、例えば次に説明する主体判断部１２を起動する（ステップ３３）。
【０１０１】
〔２−５．主体の判断〕
上に説明したように、移動協調判断部１１が移動すると判断した場合、主体判断部１２は、移動手順をエージェントの側が主体的に管理するか、プラットフォームの側が主体的に管理するかを判断する（ステップ３３）。すなわち、移動に関わる一連の処理手順をエージェントが管理する場合はエージェントの負荷が高くなる。一方で、移動手順をプラットフォームが管理する場合は、エージェントの移動の仕方に自由度がなくなり、結果として効率が悪い場合がある。
【０１０２】
このため、エージェントでは、主体判断部１２が、エージェント自身が主体となって移動にかかわる手順を管理して進行するか、それらの手順をプラットフォームに任せるかを、プラットフォームプロファイル２１のプラットフォーム移動管理ｆや提供リソースリストｇ、エージェントプロファイル２２のエージェント移動管理ｌなどに基づいて動的に選択する。
【０１０３】
例えば、プラットフォームＦ１上のエージェントＡ１では、プラットフォームＦ２上へ移動すると判断された場合に、主体判断部１２が、まずエージェントプロファイル２２からエージェント移動管理ｌを検索することによって、自分が移動手順を主体的に管理する能力を持っているかどうかを調べる。また、エージェントＡ１の主体判断部１２は、プラットフォームＦ１のプラットフォームプロファイル２１からプラットフォーム移動管理ｆを検索することによって、プラットフォームＦ１が移動手順を主体的に管理する能力を持っているかどうかを調べる。
【０１０４】
なお、これらの事柄を調べるには、プラットフォームＦ１にこれを問い合わせ、プラットフォームＦ１がプラットフォームプロファイル２１を検索した結果をエージェントＡ１に返すようにしてもよい。
【０１０５】
この結果、エージェントＡ１が移動を主体的に管理する機能を有している一方、プラットフォームＦ１は移動を主体的に管理する機能を有していない場合、主体判断部１２はエージェント主体による移動を選択する。逆に、プラットフォームＦ１が移動を主体的に管理する機能を有している一方、エージェントＡ１は移動を主体的に管理する機能を有していない場合、主体判断部１２はプラットフォーム主体による移動を選択する。この場合、エージェントＡ１は、移動手順をプラットフォームＦ１に依頼し、プラットフォームＦ１が主体となって、後で詳しく説明する通常移動とクローン移動を移動の態様として選択し、それを実行する。
【０１０６】
エージェントＡ１とプラットフォームＦ１の両方が移動を管理する機能をもつ場合、エージェントＡ１の主体判断部１２は、プラットフォームＦ１のプラットフォームプロファイル２１を検索し、プラットフォームＦ１におけるリソースの使用状況（負荷）を調べる。なお、このとき、プラットフォームＦ１に負荷を問い合わせ、プラットフォームＦ１がプラットフォームプロファイル２１を検索したうえ、その結果をエージェントＡ１に返すようにしてもよい。
【０１０７】
そして、プラットフォームＦ１のリソース使用状況すなわち負荷が高い場合、主体判断部１２はエージェント主体による移動を選択し、その結果、エージェントＡ１が主体となって、後で詳しく説明する通常移動とクローン移動を移動の態様として選択し、それを実行する。
【０１０８】
一方、プラットフォームＦ１の負荷が低い場合、主体判断部１２はプラットフォーム主体による移動を選択し、その結果、エージェントＡ１は、移動手順をプラットフォームＦ１に依頼する。この場合、プラットフォームＦ１が主体となって、後で詳しく説明する通常移動とクローン移動を移動の態様として選択し、それを実行する。
【０１０９】
なお、エージェントＡ１とプラットフォームＦ１のどちらも移動を管理する機能を持たない場合、主体判断部１２は移動不可能と判断する。この場合、エージェントＡ１は他の行動を検討することになるが、他の行動としては、例えば、協調によって他のエージェントに作業を依頼することや（ステップ３８）、ゴール達成を諦めて作業を中断する、などが挙げられる。
【０１１０】
〔２−６．タイミングの判断〕
また、他のプラットフォームに移動する場合、エージェントは、直ちに移動するかしばらく待ってから移動するかというタイミングを判断する必要がある。つまり、例えば移動先のプラットフォームの負荷が高い場合や、移動先のプラットフォームとの間のネットワーク回線の信頼性が低い場合は、自身が使用するリソースの量などを考慮して、しばらく待ってから移動する方が良い場合がある。逆に、現在いるプラットフォームの負荷や存続時間によっては早く移動した方が良い場合もある。
【０１１１】
このため、エージェントが他のプラットフォームに移動することになった場合、エージェントのタイミング判断部１３は、直ちに移動するかしばらく待ってから移動するかという移動のタイミングを、プラットフォームプロファイル２１の信頼性ｂ、永続性ｃ、提供リソースリストｇ、プラットフォームスケジュールｊや、エージェントプロファイル２２のエージェントスケジュールｎなどから動的に判断する（ステップ３４）。
【０１１２】
例えば、プラットフォームＦ１上のエージェントＡ１が、プラットフォームＦ２上へ移動しようとする場合、エージェントＡ１のタイミング判断部１３は、移動元であるプラットフォームＦ１について次のような判断を行う。すなわち、タイミング判断部１３は、エージェントプロファイル２２を検索することによって、自分がいつまで存続しうるかを表すエージェントスケジュールｎを調べる。その結果、エージェントスケジュールｎに示される自分の存続期限がもうすぐ、であった場合、タイミング判断部１３は直ちに移動すると判断し、この結果、エージェントＡ１は直ちに移動する処理を開始する。
【０１１３】
エージェントＡ１の存続期限が間近に迫っていない場合、エージェントＡ１のタイミング判断部１３は、プラットフォームＦ１のプラットフォームプロファイル２１を検索することによって、プラットフォームＦ１上でエージェントが永続的に存在することができるかを表す永続性ｃと、自分がいつまで存続しうるかを表すプラットフォームスケジュールｊと、を調べる。なお、これらの項目については、エージェントＡ１のタイミング判断部１３からプラットフォームＦ１にこれを問い合わせ、プラットフォームＦ１がプラットフォームプロファイル２１を検索したうえ、その結果をエージェントＡ１に返すようにしてもよい。
【０１１４】
その結果、永続性ｃに基づいてプラットフォームＦ１上でいつまでも活動することが不可能であることが判明した場合や、プラットフォームスケジュールｊに基づいて、プラットフォームＦ１の存続期限がもうすぐ、であった場合、タイミング判断部１３は直ちに移動すると判断し、この結果、エージェントＡ１は直ちに移動する処理を開始する。
【０１１５】
移動元にかかわる以上の処理において、直ちに移動すると判断されなかった場合、エージェントＡ１のタイミング判断部１３は、続いて、移動先のプラットフォームＦ２にかかわる判断を次のように行う。すなわち、タイミング判断部１３は、プラットフォームＦ２のプラットフォームプロファイル２１を検索することによって、自分がプラットフォームＦ２に移動していった場合に、いつまで存続しうるかを表すプラットフォームスケジュールｊを調べる。なお、この項目については、プラットフォームＦ２にこれを問い合わせ、プラットフォームＦ２がプラットフォームプロファイル２１を検索したうえで、その結果をエージェントＡ１に返すようにしてもよい。
【０１１６】
その結果、プラットフォームスケジュールｊに基づいて、移動先での自分の存続期限がもうすぐ、であった場合、タイミング判断部１３は直ちに移動と判断し、その結果、エージェントはすぐに移動する処理に入る。
【０１１７】
移動先での存続期限も間近に迫っていない場合、エージェントＡ１のタイミング判断部１３は、プラットフォームＦ１とＦ２について、それぞれのプラットフォームプロファイル２１を検索することによって、ネットワークの信頼性ｂと、プラットフォームが提供するリソースの種類／量と現在のリソースの種類／量を表す提供リソースリストｇを調べる。なお、これらの項目については、プラットフォームＦ１、Ｆ２にこれを問い合わせ、プラットフォームＦ１，Ｆ２がプラットフォームプロファイル２１を検索し、その結果をエージェントＡ１に返すようにしてもよい。
【０１１８】
その結果、プラットフォームＦ１、Ｆ２ともに信頼性ｂが低い場合や、提供リソースリストｇに基づいて、現在いるプラットフォームＦ１のリソースが移動先となるプラットフォームＦ２と比べて豊富であることが判明したような場合、タイミング判断部１３は直ちに移動せずに留まると判断する。この場合、エージェントＡ１は移動する処理に入る前に、一定時間待つ。逆にプラットフォームＦ１かＦ２ともに信頼性ｂが高い場合や、提供リソースリストｇに基づいて、現在いるプラットフォームＦ１のリソースが移動先と比べて豊富でないことが判明したような場合は、タイミング判断部１３は直ちに移動と判断し、この結果、エージェントＡ１は直ちに移動する処理に入る。
【０１１９】
〔２−７．移動先の選択〕
また、移動先のプラットフォームとして複数の候補がある場合は、それぞれのプラットフォームの負荷や提供リソース、提供サービス、移動先での動作が可能であるかどうか、権限が与えられるか否か、そこに至るネットワーク回線の状態、移動先で永続的に存続しうるか、などから移動先を１つを選びだす必要がある。
【０１２０】
すなわち、移動先プラットフォームの候補が複数あるときは、エージェントの移動先選択部１４が、各候補についての信頼性ｂ、永続性ｃ、パーミッションリストｄ、プラットフォーム言語リストｅ、提供リソースリストｇ、提供サービスリストｉ、プラットフォームスケジュールｊなどに基づいて、移動先プラットフォームを選択する（ステップ３５）。なお、これらの項目については、最低限満足しなければならないもののほか、重視する順に重み付けをしておき、重みの大きい順に判断の対象とすることが考えられる。
【０１２１】
例えば、プラットフォームＦ１上のエージェントＡ１では、移動先の候補としてプラットフォームＦ２とＦ３とが考えられる場合、移動先選択部１４がそれぞれのプラットフォームＦ２，Ｆ３について、プラットフォームプロファイル２１を検索することによって、エージェントに認めている行動の種類を表すパーミッションリストｄと、サポートしている言語とバージョンを表すプラットフォーム言語リストｅと、提供しているサービスの種類を表す提供サービスリストｉと、を調べる。
【０１２２】
なお、これらの項目については、プラットフォームＦ２，Ｆ３にこれを問い合わせ、プラットフォームＦ２，Ｆ３が自己のプラットフォームプロファイル２１を検索したうえ、その結果をエージェントＡ１に返すようにしてもよい。
【０１２３】
また、移動先選択部１４は、同様に、プラットフォームＦ２，Ｆ３について、ネットワークの信頼性ｂと、エージェントが永続的に存在できるかを表す永続性ｃと、最大限提供できるリソースすなわち提供リソースと現在提供されているリソースを表す提供リソースリストｇと、プラットフォームがいつまで存続しうるかを表すプラットフォームスケジュールｊと、についても調べておく。
【０１２４】
このように、いろいろな項目を調べた結果、パーミッションリストｄに基づいて、プラットフォームがエージェントＡ１にその上で動作するための権限を与えていないことが判明した場合や、そのプラットフォームのプラットフォーム言語リストｅがエージェントＡ１の必要条件を満たさなかった場合、すなわち移動しようとするエージェントの動作を記述している言語やバージョンをそのプラットフォームが実行できない場合は、移動先選択部１４はそのプラットフォームを移動先候補から外す。なお、エージェントの動作を記述するのに使われている言語やバージョンは、エージェントプロファイル中のエージェント言語バージョンｏを参照することで判断することができる。
【０１２５】
また、提供サービスリストｉに基づいて、プラットフォームがエージェントＡ１が必要とするサービスを提供していないことが判明した場合も、移動先選択部１４はそのプラットフォームを移動先候補から外す。このとき、エージェントが必要とするサービスの種類は、エージェントプロファイル２２中の必要サービスリストｐを参照することで判断することができる。
【０１２６】
なお、このようにプラットフォームを移動先から外していった結果、移動先候補が存在しなくなった場合、移動先選択部１４は、移動不可能であると判断し、その結果、エージェントＡ１は協調（ステップ３８）など他の動作を検討することになる。
【０１２７】
次に、移動先選択部１４は、残ったプラットフォームのなかから、一番適したプラットフォームを選択する。具体的には、例えば、信頼性ｂに関して各プラットフォームを比較して、信頼性の高い方に１点を与え、永続性ｃに関して各プラットフォームそれぞれに存続できるならばに１点を与え、提供リソースリストｇに関して各プラットフォームを比較して、リソースの余裕が多い方に１点を与え、プラットフォームスケジュールｊに関して各プラットフォームを比較して、存続時間の長い方に１点を与え、最も点数の高いプラットフォームを移動先として選択する。
【０１２８】
〔２−８．順序の決定〕
また、複数の移動先プラットフォームを順番に移動したい場合に、候補である移動先プラットフォームの負荷やそこに至るネットワーク状態などから最も適切な順序を決定する必要がある。このため、複数の移動先プラットフォームを順番に移動したい場合、エージェントの順序決定部１５は、移動先プラットフォームそれぞれの信頼性ｂ、永続性ｃ、パーミッションリストｄ、プラットフォーム言語リストｅ、提供リソースリストｇ、提供サービスリストｉ、プラットフォームスケジュールｊなどに基づいて、どのような順序で個々の移動先プラットフォームに移動するかを決定する（ステップ３６）。
【０１２９】
例えば、プラットフォームＦ１上のエージェントＡ１について、移動先の候補であるプラットフォームＦ２及びＦ３に順番に移動する際、エージェントＡ１の順序決定部１５は、プラットフォームＦ２，Ｆ３のプラットフォームプロファイル２１を検索することによって、パーミッションリストｄ、プラットフォーム言語リストｅ、提供サービスリストｉ、信頼性ｂ、永続性ｃ、提供リソースリストｇ、プラットフォームスケジュールｊを調べる。なお、これらの項目については、プラットフォームＦ２，Ｆ３にこれを問い合わせ、プラットフォームＦ２，Ｆ３が自己のプラットフォームプロファイル２１を検索したうえ、その結果をエージェントＡ１に返すようにしてもよい。
【０１３０】
その結果、パーミッションリストｄに基づいて、例えば、移動先のプラットフォームＦ２又はＦ３がエージェントＡ１にその上で動作するための権限を与えていないことが判明した場合、順序決定部１５は、順序の決定が不可能であると判断する。
【０１３１】
また、プラットフォーム言語リストｅに基づいて、移動先のプラットフォームＦ２又はＦ３がエージェントＡ１の必要条件を満たさないことが判明した場合、すなわちエージェントＡ１の動作を記述している言語やバージョンを実行できない場合や、提供サービスリストｉに基づいて、移動先のプラットフォームＦ２やＦ３がエージェントＡ１の必要とするサービスを提供していないことが判明した場合も、順序の決定が不可能であると判断する。この場合、エージェントＡ１は他の動作を検討するが、この場合の他の動作としては、移動先の候補となるプラットフォームを選び直す、などが挙げられる。
【０１３２】
なお、エージェントが必要とする言語やバージョン、サービスの種類は、エージェントプロファイル２２中のエージェント言語バージョンｏや必要サービスリストｐを参照することで判断することができる。
【０１３３】
次に、順序決定部１５は、残ったプラットフォームについて、どのような順序で移動するかを決定する。具体的には、例えば信頼性ｂに関して各プラットフォームを比較して、信頼性の高いものに１点を与え、永続性ｃに関して各プラットフォームそれぞれに存続できるならば１点を与え、提供リソースリストｇに関して各プラットフォームを比較して、リソースの余裕が多い方に１点を与え、プラットフォームスケジュールｊに関して各プラットフォームを比較して、存続時間の長い方に１点を与え、合計点数の最も高いプラットフォームから順番に移動先として決定する。
【０１３４】
〔２−９．参照の判断〕
以上のような判断、選択、決定を行うときは、参照判断部２３が、プラットフォームプロファイル２１やエージェントプロファイル２２プロファイルの情報（「プロファイル情報」と呼ぶ）をどのように参照するかを判断する。ここで、どのように参照するかについては、典型例として、エージェントが自ら参照してプロファイル情報を調べるか、又は他のエージェントやプラットフォームに参照を依頼するか、また、このように参照を依頼された側でもプロファイル情報を新たに調べるか、既に判明している既知の情報を使うかといった判断が考えられるが、具体的には自由に定めることができる。
【０１３５】
例えば、あるエージェントが独自にプラットフォームの状態を調べることができない場合、すなわちエージェントの負荷が高い場合、エージェントが目的とするプラットフォームプロファイル２１を参照するためのアクセス権限（パーミッション）を持っていない場合、目的のプラットフォームとの間の通信状態が悪い場合などには、他のエージェントに依頼する必要がある。
【０１３６】
例えば、プラットフォームＦ１上のエージェントＡ１は、別のプラットフォームＦ２のプラットフォームプロファイル２１から提供リソースリストｇなどの項目を調べようとする場合、参照判断部２３を使って以下のような判断を行う。すなわち、まず、エージェントＡ１の参照判断部２３は、現在いるプラットフォームＦ１のプラットフォームプロファイル２１を検索することによって、現在いるプラットフォームＦ１のリソース使用状況（負荷）を調べる。なお、この項目について、プラットフォームＦ１にこれを問い合わせ、プラットフォームＦ１が自己のプラットフォームプロファイル２１を検索したうえ、その結果をエージェントＡ１に返すようにしてもよい。
【０１３７】
この結果、プラットフォームＦ１の負荷が高い場合、参照判断部２３は、目的のプラットフォームプロファイル２１の参照を他のエージェントなどに依頼することを選択する。その結果、エージェントＡ１は、目的のプラットフォームＦ２上のエージェントＡ２に対して、プラットフォームＦ２のプラットフォームプロファイル２１の検索を依頼する。一方、プラットフォームＦ１の負荷が低い場合、参照判断部２３は、プラットフォームプロファイル２１を自ら直接参照して調べることを選択する。その結果、エージェントＡ１は、プラットフォームＦ２のプラットフォームプロファイル２１を自ら直接検索する。
【０１３８】
また、他のプラットフォームからプロファイル情報の調査を依頼された側のエージェントは、自分が今いるプラットフォームの現在の負荷やネットワーク状態、および調査の対象となるプラットフォームの状態などから、現在知っている限りの情報、すなわち既に判明していて自分のメモリ領域などに記録されている既知の情報に基づいて参照結果を回答するか、新たにプロファイル情報を調べ直して回答するかを動的に選択する必要がある。
【０１３９】
そこで、他のプラットフォームからプロファイル情報の調査を依頼された側のエージェントでは、参照判断部２３は、調査を依頼された情報をプラットフォームプロファイル２１の提供リソースリストｇなどを参照することで新たに調べ直すか、上に述べたような既知の情報に基づいて回答するかを選択する。例えば、上の例において、プラットフォームＦ２上のエージェントＡ２では、プラットフォームＦ２のプラットフォームプロファイル２１を調べるよう依頼されると、参照判断部２３が、プラットフォームＦ２のプラットフォームプロファイル２１を検索することによって、現在いるプラットフォームＦ２のリソース使用状況（負荷）を調べる。なお、この項目について、プラットフォームＦ２にこれを問い合わせ、プラットフォームＦ２が自己のプラットフォームプロファイル２１を検索したうえ、その結果をエージェントＡ２に返すようにしてもよい。
【０１４０】
この結果、プラットフォームＦ２の負荷が高い場合、参照判断部２３は、既知の情報に基づくことを選択する。その結果、プラットフォームＦ２上で参照を依頼されたエージェントＡ２は、依頼してきた側のプラットフォームＦ１上のエージェントＡ１に対して、現在知っている限りの情報に基づいて回答する。一方、プラットフォームＦ２の負荷が低い場合、参照判断部２３は、依頼された情報を新たに調べることを選択する。その結果、参照を依頼されたエージェントＡ２は、プラットフォームＦ２のプラットフォームプロファイル２１から改めて最新の情報を検索し、その情報に基づいて依頼側のエージェントＡ１に対して回答する。
【０１４１】
〔２−１０．指示手段〕
以上は、エージェントがプランを実行している際に他のプラットフォーム上での処理を必要とした場合についての説明であるが、エージェント自身が他のプラットフォームへの移動が必要と判断していない場合でも、プラットフォームの割り振り部９は、自プラットフォーム上のエージェントを他のプラットフォームへ移動させる必要がないかどうか、及び、他のプラットフォーム上のエージェントを自プラットフォームへの移動させる必要がないかどうかを監視して判断し、そのような移動が必要と判断すると、対象のエージェントに対して、判断にしたがった移動を指示する。
【０１４２】
すなわち、プラットフォームは自プラットフォームの状態や、自プラットフォームと関連する他のプラットフォームの状態に応じて、それらの上で動作するエージェントの割り振りを動的に行う必要がある。ここで、「関連する他のプラットフォーム」とは、例えば自プラットフォームとプラットフォームプロファイル２１の全部又は一部が共通するプラットフォームである。
【０１４３】
例えば、自プラットフォームの負荷が非常に高い場合や、エージェントから自己が有していない機能を求められた場合などに、この割り振り部９は、他のプラットフォームが該当する機能を有しているかどうかを調べ、その結果をもとに他のプラットフォームへの移動をエージェントに指示するなどが考えられる。また、他のプラットフォームの負荷が高い場合など、そのプラットフォーム上のエージェントに自プラットフォームへの移動を指示するなどが考えられる。
【０１４４】
つまり、プラットフォームの割り振り部９は、プラットフォームプロファイル２１の移動サポートａ、信頼性ｂ、永続性ｃ、パーミッションリストｄ、プラットフォーム言語リストｅ、提供リソースリストｇ、エージェントリストｈや、エージェントプロファイル２２の移動可能性ｋ、エージェント移動管理、必要リソースリストｍ、エージェント言語バージョンｏ、必要サービスリストｐなどに基づいて、エージェントに移動を指示するかどうか判断する。なお、このようなプロファイル情報を参照するときも、上に説明したのと同じように、プロファイル情報をどのように参照するかを参照判断部２３が判断する。
【０１４５】
例えば、プラットフォームＦ１は、任意のタイミングで、自プラットフォームのプラットフォームプロファイル２１と他のプラットフォームのプラットフォームプロファイル２１とを検索し、それぞれについて移動サポートａ、つまり移動エージェントをサポートしているかと、提供リソースリストｇすなわち提供するリソースの種類／量と現在のリソースの量のリストと、を調べる。
【０１４６】
その結果、両方のプラットフォームが移動エージェントをサポートし、かつ、他のプラットフォームを比較して自プラットフォームの負荷が少ない場合は、さらに、他のプラットフォームのプラットフォームプロファイル２１を検索することによって、そのプラットフォーム上に存在しているエージェントのリストであるエージェントリストｈを調べる。
【０１４７】
次に、他のプラットフォーム上のエージェントのエージェントプロファイル２２を検索することによって、エージェントリストｈに含まれている個々のエージェントについて移動可能かどうかを表す移動可能性ｋを調べる。その結果、移動可能なエージェントが含まれていた場合、そのエージェントについてエージェントプロファイル２２を検索することによって、必要リソースリストｍ、エージェント言語バージョンｏ、必要サービスリストｐを調べる。
【０１４８】
続いて、今度は自プラットフォームのプラットフォームプロファイル２１を検索することによって、パーミッションリストｄ、提供リソースリストｇ、プラットフォーム言語リストｅ、提供サービスリストｉを調べる。
【０１４９】
その結果、先にプロファイル情報を調べたエージェントが、自プラットフォーム上においても、実行パーミッションを有することになり、かつ、そのエージェントの必要とするリソース、サービス、言語、バージョンを全て提供できる場合、割り振り部９は、そのエージェントを自プラットフォームへ移動させるべきであると判断し、通信部８を通じてそのエージェントに対してそのような移動を指示する。
【０１５０】
一方で、自プラットフォームと比べて他のプラットフォームの負荷が少ない場合、割り振り部９はさらに、自プラットフォームのプラットフォームプロファイル２１を検索することによってエージェントリストｈを調べる。次に、このエージェントリストｈに含まれるエージェント、すなわち自プラットフォーム上のエージェントについて、エージェントプロファイル２２を検索することによって、移動可能性ｋを調べる。
【０１５１】
その結果、自プラットフォーム上のエージェントのなかに移動可能なエージェントが含まれていた場合は、割り振り部９はさらにそのエージェントについて、エージェントプロファイル２２を検索することによって必要リソースリストｍ、エージェント言語バージョンｏ、必要サービスリストｐを調べる。また、他のプラットフォームについて、プラットフォームプロファイル２１を検索することによってパーミッションリストｄ、提供リソースリストｇ、プラットフォーム言語リストｅ、提供サービスリストｉを調べる。
【０１５２】
その結果、先にプロファイル情報を調べたエージェントが、他のプラットフォーム上においても、実行パーミッションを有しており、かつ、そのエージェントの必要とするリソース、サービス、言語、バージョンの全てについて提供を受けられる場合、割り振り部９は、その自プラットフォーム上を他プラットフォームへ移動させるべきであると判断し、通信部８を通じてそのエージェントに対して、他のプラットフォームへの移動を指示する。
【０１５３】
〔２−１１．エージェントの移動の詳細〕
以上に説明したような処理において、エージェントが他のプラットフォームに移動することになった場合、エージェントは、例えば自分が存在しているプラットフォームの移動部６を使ってプラットフォーム間での移動を行う（ステップ３７）。ここで、移動の態様には、通常移動とクローン移動があり、エージェントＡ１は、移動の態様を選択してそれを実行する。
【０１５４】
すなわち、通常移動は、移動元のプラットフォーム（現在のプラットフォームと呼ぶ）ではエージェントが登録を解除されて抹消されるもので、例えば次のような手順で行われる。
−移動先プラットフォームへの移動要求の送信
−移動先プラットフォームからの返信の受信
−移動先プラットフォームへのエージェント情報の送信
−移動先プラットフォームからの移動成功／失敗通知の受信
−移動先プラットフォームでの実行開始
−現在のプラットフォームへのエージェントの登録解除
−現在のプラットフォーム上のエージェントの抹消
一方、クローン移動は、移動先にエージェントの複製（クローン）が送られるだけでなく、移動元である現在のプラットフォームでもクローンの原形となったエージェントが抹消されずに活動を続けるもので、ネットワーク全体としてはエージェントの総数が増えることになる。このクローン移動は、複数の違った知識やプランに基づいて複数の系統の処理を並行して行う場合に利用される。
【０１５５】
このクローン移動の手続きは、上に述べた通常移動の手順から、現在のプラットフォーム上でのエージェントの登録解除や抹消のステップを除いたもので、例えば次のような手順で行われる。
−移動先プラットフォームへの移動要求の送信
−移動先プラットフォームからの返信の受信
−移動先プラットフォームへのエージェントコードの送信
−移動先プラットフォームからの移動成功／失敗通知の受信
−移動先プラットフォームでの実行開始
このうち、上に述べた通常移動の手順を図１０に示す。すなわち、この例では、エージェントの移動元のプラットフォームをローカルノード、移動先のプラットフォームをリモートノードと呼ぶ。この場合、ローカルノードからの移動要求（ステップ５０１）を受信したリモートノードは（ステップ５０２）、エージェント用のプロセスを設定する（ステップ５０３）。
【０１５６】
続いて、リモートノードから、プロセスの設定が完了した旨の通知（ステップ５０４）を受信したローカルノードは（ステップ５０５）、エージェントのプランや変数領域などのエージェント情報をリモートノードに送信する（ステップ５０６）。このエージェント情報を受信したリモートノードは（ステップ５０７）、エージェント情報を格納し（ステップ５０８）、ローカルノードへ移動成功の通知を送信し（ステップ５０９）、プランの解釈実行を開始する（ステップ５１０）。一方、成功の通知を受信したローカルノードは（ステップ５１１）、不要になったエージェント用のプロセスを消去する（ステップ５１２）。
【０１５７】
〔２−１２．契約ネットプロトコル手続き〕
また、以上に説明したような処理において、エージェントが他のエージェントと協調を行うことになった場合、本実施形態では、それぞれのエージェントは、自分が存在しているプラットフォームの協調部７を使って、いわゆる契約ネットプロトコルによって協調を行う（ステップ３８）。
【０１５８】
ここで、契約ネットプロトコル(Contract Net Protocol) 手続きの詳細を図１１に示す（参考文献：Smith, R. G., "The Contract Net Protocol: High-level Communication and Control in a Distributed Problem Solver", IEEE Trans. Computers, Vol. 29, pp. 1104-1113(1980). ）。この契約ネットプロトコルでは、エージェントから他のエージェントに依頼される作業をタスクと呼ぶ。また、タスクをエージェント間で依頼する契約ネットプロトコルは、それぞれのエージェントが存在するプラットフォームの協調部７同士の間で、通信部８を経由して行なわれる。
【０１５９】
〔２−１２−１．タスクアナウンス〕
契約ネットプロトコルにおいてタスク実行を依頼する場合は、まず、タスクを持つエージェント（以下、タスクマネジャと呼ぶ）が、ステップ６０１において、タスクを依頼したいプラットフォーム群に対して依頼に関する情報（以下「タスク情報」という）をブロードキャストする。なお、ブロードキャストとは一定範囲の相手に対して無差別に情報を送信することであり、タスク情報をブロードキャストすることをタスクアナウンスという。ブロードキャストするタスク情報としては、例えば、タスクＩＤ、タスクの内容、タスクマネジャのＩＤ、プラン評価基準、入札期限などがある。
【０１６０】
〔２−１２−２．入札〕
上に述べたようなタスク情報を受信したプラットフォームはエージェントを生成し、それらにタスク情報を転送する（ステップ６０２）。タスク情報を受け取った各エージェントは、自らが所属しているプラットフォームにおいてタスクを実行可能かどうか判断し（ステップ６０３）、タスク内容を実行可能なエージェントは、入札する旨の情報（以下「入札情報」や「入札メッセージ」という）をタスクマネジャに送信（入札）する（ステップ６０４）。なお、入札情報を送信したエージェントを入札エージェントと呼ぶ。
【０１６１】
入札情報には、例えば、タスクＩＤ、エージェントＩＤ、タスク実行プラン評価値などがあり、このうちタスク実行プラン評価値は、タスクアナウンスで示されたプラン評価基準に基づいて、入札エージェントが、自分がタスクを実行する場合における評価を計算したものである。
【０１６２】
〔２−１２−３．入札締切と落札〕
タスクマネジャは、入札を締め切る入札期限と現在時刻を比較しながら入札情報を受信し、ステップ６０５において入札期限に到達すると、次のステップ６０６において入札締切を示すメッセージを発信する。この締切のメッセージは、タスク情報のブロードキャスト先とした全ての依頼プラットフォームに対してブロードキャストする。そして、タスクマネジャは、ステップ６０９において、落札するエージェントを決定する。この決定は、入札期限までに受信した各入札情報のタスク実行プラン評価値と、予め定めた決定の基準に基づいて、各エージェントの入札情報を比較することによって行なう。
【０１６３】
落札するエージェント（落札エージェントと呼ぶ）の決定は、タスクマネジャが、実際にタスクを依頼する先としてそのエージェントを決定することを意味するが、実際にタスクを依頼する時期は処理の内容に応じて異なっていてもよく、契約ネットプロトコルの終了後に直ちに依頼する場合もあれば、所定の時期まで待って依頼する場合もある。
【０１６４】
落札エージェントを決定すると、タスクマネジャは、ステップ６１０において、各入札エージェントに、落札の内容を表す落札情報をマルチキャスト（同報送信）する。この落札情報を受信することによって、落札エージェントは、タスクを実際に実行すべき旨の実行依頼を待つ状態となる。タスクマネジャは、落札されたタスクの実行をその後、落札エージェントに依頼し、その結果、落札エージェントは依頼されたタスクの内容を実際に実行する。
【０１６５】
上に述べたように、本実施形態では、エージェント間協調を実現するために契約ネットプロトコルを用いる。そして、契約ネットプロトコルで処理を他のプラットフォームに依頼する場合は、依頼側プラットフォームの持つ条件と請負側プラットフォームの持つ能力との間で、入札制による調和が図られる。このため、システム全体として優れた処理効率が実現される。
【０１６６】
〔３．効果〕
以上説明したように、本実施形態では、エージェントがあるプラットフォームで活動しているときに他のプラットフォームでの処理が必要になった場合、エージェントを当該他のプラットフォームに移動させるか、エージェントは現在のプラットフォームに留めたまま、当該他のプラットフォーム上のエージェントとメッセージ通信などで処理を依頼する、すなわち協調を行うかが、移動協調判断部１１によって判断される。この結果、エージェントやプラットフォームによって移動をサポートしているかどうかが異なっていたり、プラットフォームの組み合わせによって、その間の回線の信頼性が異なるような場合でも、他のプラットフォームでの処理を円滑に行うことができる。
【０１６７】
また、本実施形態では、エージェントが他のプラットフォームへ移動するための手順、例えば、エージェントのプランや内部状態などの情報転送や移動先でのエージェント用プロセスの設定といった処理を、エージェントとプラットフォームのどちらが主体的に管理するかが、主体判断部１２によって判断される。このため、エージェントの移動の仕方に自由度が増え、システムの状況や構成に応じて円滑に効率良くエージェントを移動させることができる。
【０１６８】
また、この実施形態では、エージェントが他のプラットフォームに移動しようとするとき、プラットフォームの状況や移動に使うネットワーク回線の状態などに応じて、直ちに移動するかしばらく待ってから移動するかがタイミング判断部１３によって判断されるので、エージェントの移動のタイミングが多様化し、移動を確実に効率良く行うことができる。
【０１６９】
また、この実施形態では、移動先のプラットフォームの候補が複数あるとき、移動先として最適なプラットフォームが移動先選択部１４によって選択されるので、処理が円滑に効率良く行われる。また、この実施形態では、エージェントが複数のプラットフォームに順次移動しようとするとき、それぞれのプラットフォームの負荷やそこに至るネットワーク回線の状態などに基づいて、最適な移動の順序が順序決定部１５によって決定されるので、エージェントごと、プラットフォームごと、及びシステム全体の処理効率が向上する。
【０１７０】
また、この実施形態では、それぞれのプラットフォームの状態に応じて、エージェントにプラットフォーム間での移動の指示が割り振り部９によって伝えられる。このため、エージェントがそれぞれのプラットフォームに動的に割り振られ、システム全体の処理が効率化される。
【０１７１】
また、この実施形態では、それぞれのプラットフォームについて、エージェントの移動をサポートしているか、そのプラットフォームを接続しているネットワーク回線の信頼性が高いか低いかといった情報が、予めプラットフォームプロファイル２１に用意されている。このため、移動にかかわる判断を行うとき、プラットフォームやネームサーバなどに直接アクセスして調べるまでもなく、そのような情報を容易に得ることができるので、移動にかかわる判断が効率化される。
【０１７２】
特に、この実施形態では、エージェントの移動をサポートしているかだけでなく、プラットフォームが提供するリソース、サービス、動作の種類ごとの許諾（パーミッション）など、いろいろな項目をプラットフォームプロファイル２１に登録しておくことができるので、このようなプラットフォームプロファイル２１を参照することで、移動に関してきめ細かな判断を容易に行うことが可能になる。
【０１７３】
また、本実施形態では、それぞれのエージェントについて、プラットフォーム間での移動をサポートしているか、どのようなリソースやサービスを必要とするかいった情報が、予めエージェントプロファイル２２に用意されている。このため、移動にかかわる判断を行うとき、エージェントの内部状態や生成履歴などを参照して調べるまでもなく、そのような情報を容易に得ることができるので、移動にかかわる判断が効率化される。
【０１７４】
特に、本実施形態では、プラットフォーム間での移動能力だけでなく、エージェントの動作がどのような言語やバージョンで記述されているか、どのようなリソース、サービス、パーミッションが必要かなど、いろいろな項目をエージェントプロファイル２２に登録しておくことができるので、このようなエージェントプロファイル２２を参照することで、移動に関してきめ細かな判断を容易に行うことが可能になる。
【０１７５】
さらに、本実施形態では、移動にかかわる判断を行うとき、プラットフォームプロファイルやエージェントプロファイルの参照をどのように行うかが参照判断部２３によって判断されるので、それらプロファイルがどのハードウェア上にあるかなどの状況に応じて、最も効率的な参照の仕方を選ぶことができる。
【０１７６】
〔４．他の実施形態〕
なお、本発明は上に述べた実施形態に限定されるものではなく、次に例示するような他の実施形態をも含むものである。例えば、本発明において、ネットワークの規模、形式、プラットフォーム数などは自由であり、エージェントを使って行う情報処理の種類や、それに使う具体的な言語や情報の内容も自由に決めることができる。
【０１７７】
また、上に述べた実施形態では、移動か協調かの判断、主体の判断、タイミングの判断、移動先の選択、移動順序の決定という判断の順序を示したが、これらの判断の順序はある程度入れ替えることが可能で、例えば、タイミングの判断の後で主体の判断を行ったり、移動先や移動の順序を決めた後で、個々の移動先ごとに主体やタイミングの判断を行うこともできる。また、上記実施形態を示す図２では、移動部６を、プラットフォームの構成要素としてエージェントＡに含まれない形で示したが、移動部６はエージェント内部に設けてもよい。
【０１７８】
また、エージェントが他のプラットフォームに直ちに移動しない場合の待ち時間や、複数の候補に基づいて移動先や移動順序を決める具体的な基準は自由に決めることができる。また、プラットフォームプロファイルやエージェントプロファイルに具体的にどのような項目を記録しておくかも自由である。また、上に述べた実施形態では、プランニングを行うエージェントを主に例示したが、本発明は、プランニングを行わないエージェントに適用することもできる。
【０１７９】
【発明の効果】
以上のように、本発明によれば、状況に応じてエージェントの行動プランを作成し、他のノードでの処理を実現するために、ノード間で移動するか他のエージェントと協調するか条件に応じて動的に選ぶことで、変化に対応して効率よく情報を処理することができる。
【図面の簡単な説明】
【図１】本発明の実施形態の全体の構成を示すブロック図。
【図２】本発明の実施形態におけるプラットフォームの具体的な構成を示す機能ブロック図。
【図３】本発明の実施形態におけるプラットフォームプロファイルのデータ形式の具体例を示す機能ブロック図。
【図４】本発明の実施形態におけるプラットフォームプロファイルのデータ形式の具体例を示す機能ブロック図。
【図５】本発明の実施形態における処理手順を示すフローチャート。
【図６】本発明の実施形態において、生成途中のプランの例を示す概念図。
【図７】本発明の実施形態において、完成したプランの例を示す概念図。
【図８】本発明の実施形態におけるプラン生成の手順を示すフローチャート。
【図９】本発明の実施形態において、他のプラットフォームでの処理を移動又は協調によって行う手順を示すフローチャート。
【図１０】本発明の実施形態において、プラットフォーム間でエージェントが移動する手順を示すフローチャート。
【図１１】本発明の実施形態において、エージェント間での協調の手順を示すフローチャート。
【図１２】従来技術の一例を示す機能ブロック図。
【符号の説明】
１…エージェント管理部
２…エージェント情報
３…プラン実行部
４…プラン生成部
５…プラン生成用知識
６…移動部
７…協調部
８…通信部
９…割り振り部
１１…移動協調判断部
１２…主体判断部
１３…タイミング判断部
１４…移動先選択部
１５…順序決定部
２１…プラットフォームプロファイル
２２…エージェントプロファイル
３１…エージェント情報記憶手段
４１…入出力手段
５１…エージェント管理手段
６１…解釈実行手段
１００，１１０，１２０，１３０，１４０…マシン
１０１…ＣＰＵ
１０２…メインメモリ
１０３…ハードディスク装置
１０４…出力装置
１０５…入力装置
１０６…ネットワーク接続装置
１０７，１１７，１２７，１３７，１４７…プラットフォーム
Ｎ…ネットワーク回線
Ａ，１０８，１１８，１２８，１３８，１４８…エージェント
Ｌ…ローカルノード
Ｒ…リモートノード
【図１】
0003688471.tif 000009
【図２】
0003688471.tif 000010
【図３】
0003688471.tif 000011
【図４】
0003688471.tif 000012
【図５】
0003688471.tif 000013
【図６】
0003688471.tif 000014
【図７】
0003688471.tif 000015
【図８】
0003688471.tif 000016
【図９】
0003688471.tif 000017
【図１０】
0003688471.tif 000018
【図１１】
0003688471.tif 000019
【図１２】
0003688471.tif 000020