(57)【特許請求の範囲】
【請求項１】
複数の独立に動作するエージェントを有し、かつ、前記各エージェントが、ネットワークで結合されたコンピュータ間を移動できるモバイルエージェントから構成されるモバイルエージェントシステムにおいて、
前記コンピュータの各々は、エージェントスレッド制御部、プログラム制御部、定理証明エンジン、アクション解釈部及びアクション実行部と、エージェント情報データベースとを有し、
前記エージェント情報データベースは、前記モバイルエージェントごとに、エージェントプログラム格納部、プログラム実行状態記憶部及びエージェント知識ベースからなるエージェント情報を格納し、
前記エージェントプログラム格納部は、対応するモバイルエージェントの構成要素であるプログラムを実行単位であるテスト−アクションの列からなるサブプログラムにあらかじめ分割して格納し、
前記プログラム実行状態記憶部は、対応するモバイルエージェントの実行状態を格納し、
前記エージェント知識ベースは、他のエージェントとの交信により得た知識を様相論理式で格納し、
前記エージェントスレッド制御部は、前記エージェント情報データベースから処理対象のモバイルエージェントのエージェント情報を選択し、
前記プログラム制御部は、前記エージェント情報の実行状態に基づき、前記エージェント情報のテスト−アクションを抽出し、
前記定理証明エンジンは、前記テスト−アクションの実行において、当該テスト部が正しいかどうかを判断し、
前記テスト部が正しい場合、前記テスト−アクションのアクションを、前記アクション解釈部が解釈し、前記アクション解釈部が解釈したアクションを前記アクション実行部が実行する、
ことを特徴とするモバイルエージェントシステム。
【請求項２】
前記プログラム実行状態記憶部に、現在実行中のサブプログラムのＩＤを格納するスタックと、現在実行中のテスト−アクションＩＤを格納するプログラムカウンタとを有する、請求項１に記載のモバイルエージェントシステム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、ネットワークでつながれた複数のコンピュータ上で分散・協調処理を行うシステムに関し、特に、エージェントと呼ばれる自律的に実行可能なソフトウェアプログラムを各コンピュータ間で移動させながら実行させるモバイル（移動）エージェントシステムに関する。
【０００２】
【従来の技術】
モバイルエージェントシステムには、そのエージェントを記述するためのプログラム言語の観点から分類して、モバイルエージェントシステム専用の独自のプログラム言語に基づいたものと、従来の汎用のプログラム言語の拡張言語に基づくものとがある。前者の例としては、ＴｅｌｅＳｃｒｉｐｔ言語のＭａｇｉｃ  Ｃａｐ（Ｇｅｎｅｒａｌ  Ｍａｇｉｃ社）、プラニング言語のプランジェント（東芝）、後者の例としては、Ｊａｖａ言語を拡張したＯｄｅｓｓｅｙ（Ｇｅｎｅｒａｌ  Ｍａｇｉｃ社）、Ａｇｌｅｔｓ（日本ＩＢＭ）、Ｖｏｙａｇｅｒ（Ｏｂｊｅｃｔ  Ｓｐａｃｅ社）、Ｋａｆｕｋａ（富士通）などがある。
【０００３】
Ｊａｖａ言語の拡張言語に基づくシステムは、プログラマが新しい言語を新たに修得する必要がないという利点があるが、一般には、これらのシステムでは、エージェントの実行状態をネットワーク上で移動させることが難しい。一方、独自言語に基づくシステムでは、エージェントの実行状態の移動が容易であるが、新しい言語の習得の必要性に加え、Ｔｅｌｅｓｃｒｉｐｔのように独自の実行環境を必要としたり、プランジェントのように、セマンティクスが複雑でプログラミングが困難であったりするという問題点がある。
【０００４】
さらに、モバイルエージェントシステムでは、他のプログラマが作ったエージェントとの交信や、リモートマシンの未知の環境でのエージェントプログラムの実行などのため、プログラムが思った通り動作するかをデバッグすることが非常に困難である。
【０００５】
【発明が解決しようとする課題】
本発明の目的は、知識と信念の論理にもとづくプログラム言語を備えたモバイルエージェントシステムであって、実行状態の移動が可能なものを実現することにある。
【０００６】
【課題を解決するための手段】
本発明のモバイルエージェントシステムは、複数の独立に動作するエージェントを有し、かつ、各エージェントが、ネットワークで結合されたコンピュータ間を移動できるモバイルエージェントから構成されるモバイルエージェントシステムにおいて、
コンピュータの各々は、エージェントスレッド制御部、プログラム制御部、定理証明エンジン、アクション解釈部及びアクション実行部と、エージェント情報データベースとを有し、
エージェント情報データベースは、モバイルエージェントごとに、エージェントプログラム格納部、プログラム実行状態記憶部及びエージェント知識ベースからなるエージェント情報を格納し、
エージェントプログラム格納部は、モバイルエージェントの構成要素であるプログラムを実行単位であるテスト−アクションの列からなるサブプログラムにあらかじめ分割して格納し、
プログラム実行状態記憶部は、対応するモバイルエージェントの実行状態を格納し、
エージェント知識ベースは、他のエージェントとの交信により得た知識を様相論理式で格納し、
エージェントスレッド制御部は、エージェント情報データベースから処理対象のモバイルエージェントのエージェント情報を選択し、
プログラム制御部は、エージェント情報の実行状態に基づき、エージェント情報のテスト−アクションを抽出し、
定理証明エンジンは、前記テスト−アクションの実行において、そのテスト部が正しいかどうかを判断し、
テスト部が正しい場合、テスト−アクションのアクションを、アクション解釈部が解釈し、アクション解釈部が解釈したアクションをアクション実行部が実行する、
ことを特徴とする。
【０００８】
本発明で利用されるプログラム言語は、例えばＲ．  Ｆａｇｉｎ，  Ｊ．  Ｙ．  Ｈａｌｐｅｒｎ，  Ｙ．  Ｍｏｓｅｓ，  Ｍ．  Ｙ．  Ｖａｒｄｉ著、「Ｒｅａｓｏｎｉｎｇ  ａｂｏｕｔ  Ｋｎｏｗｌｅｄｇｅ」、Ｔｈｅ  ＭＩＴ  Ｐｒｅｓｓで論じられているような、Ｋｎｏｗｌｅｄｇｅ−Ｂａｓｅｄ  Ｐｒｏｇｒａｍ（知識ベースプログラム）をモバイルエージェント用に拡張したものである。これにより、独自のプログラム言語でありながら論理にもとづく普遍的な意味を持つ言語が提供できる。また、本発明のモバイルエージェントシステムは、論理に基づくシステムであるため、論理に基づく形式的検証手法との親和性も高く、モバイルエージェントシステムのデバッグシステムも実現しやすいと考えられる。この簡明な言語に基づき、インタープリタレベルのプログラムスタックを考案し、エージェント移動時の実行状態の完全な保持を実現する。
【０００９】
さらに本発明のシステムでは、未知の環境において、エージェントの目的達成の可能性をより高めるために、従来のプログラムの移動機能に加えて、他のエージェントからのプログラムの獲得機能も与える。
【００１０】
以下、本明細書で用いられる言語の定義、装置の構成及び装置の動作に関するアルゴリズムを示す。
【００１１】
１．知的モバイルエージェントのプログラムの基本構成を以下に定義する。
【００１２】
（１）  プログラムはサブプログラムＳ１，Ｓ２，…の集合である。
【００１３】
(2) サブプログラムＳは、test（テスト）-action（アクション）の列t_a1，t_a2，…からなる。
【００１４】
（３）  ｔｅｓｔ−ａｃｔｉｏｎはｔｅｓｔ式とａｃｔｉｏｎ式の対＜ｔｅｓｔ：ｔｅｓｔ式，  ａｃｔｉｏｎ：ａｃｔｉｏｎ式＞である。
【００１５】
（４）  ｔｅｓｔ式は、様相論理Ｋの論理式である（詳しくは小野寛晰著「情報科学における論理」日本評論社参照）。これは、Ｋ＿ａ１，Ｋ＿ａ２，…を様相オペレータとする様相論理式である。ただし、Ｋ＿ａ１，Ｋ＿ａ２，…は、それぞれ、エージェントａ１，ａ２，…に対応する。
【００１６】
（５）  ａｃｔｉｏｎ式は次にあげるもののどれかである。そのセマンティクスを各ａｃｔｉｏｎの下に付記する。
・ｇｏ（ｐｌａｃｅ＿ｉｄ）
ＩＤがｐｌａｃｅ＿ｉｄであるプレースエージェントに移動する。
・ｄｉｓｐｏｓｅ（ａｇｅｎｔ＿ｉｄ）
ＩＤがａｇｅｎｔ＿ｉｄであるエージェントの活動を終了させる。
・ａｄｄ（ａｇｅｎｔ＿ｉｄ，φ）
ＩＤがａｇｅｎｔ＿ｉｄであるエージェント知識ベースにφを加える。
・ｄｅｌｅｔｅ（ａｇｅｎｔ＿ｉｄ，φ）
ＩＤがａｇｅｎｔ＿ｉｄであるエージェント知識ベースにφがあれば、そのφを取り除く。
・ｃｒｅａｔｅ（ａｇｅｎｔ＿ｉｄ，  ｐｒｏｇｒａｍ，  ｓｔａｃｋ，  ｋｂ）；
ＩＤがａｇｅｎｔ＿ｉｄであるエージェントを生成し、そのプログラムをｐｒｏｇｒａｍとし、そのｍａｉｎサブプログラムのＩＤをｍａｉｎ＿ｉｄとし、その実行スタックをｓｔａｃｋとし、その知識ベースをｋｂとする。
・ｃａｌｌ  （ｓｕｂ＿ｐｒｏｇｒａｍ＿ｉｄ，  ｌｉｎｅ＿ｉｄ）
プログラムカウンタ＜ｓｕｂ＿ｐｒｏｇｒａｍ＿ｉｄ，  ｌｉｎｅ＿ｉｄ＞を実行スタックに積む。
・ｇｅｔ＿ｓｕｂ＿ｐｒｏｇｒａｍ  （ａｇｅｎｔ＿ｉｄ，  ｓｕｂ＿ｐｒｏｇｒａｍ＿ｉｄ，  ｎｅｗ＿ｓｕｂ＿ｐｒｏｇｒａｍ＿ｉｄ）
ＩＤがａｇｅｎｔ＿ｉｄであるエージェントから、ＩＤがｓｕｂ＿ｐｒｏｇｒａｍ＿ｉｄであるサブプログラムを獲得し、そのサブプログラムのＩＤをｎｅｗ＿ｓｕｂ＿ｐｒｏｇｒａｍ＿ｉｄとする。引数ｎｅｗ＿ｓｕｂ＿ｐｒｏｇｒａｍ＿ｉｄが省略された場合は、ｓｕｂ＿ｐｒｏｇｒａｍ＿ｉｄをそのまま利用する。
・ｉｄｌｅ
プログラムスタックを１つ前に戻す。
【００１７】
２．プログラムの拡張機能を以下に定義する。
【００１８】
（１）  ＜ｔｅｓｔ：φ，  ａｃｔｉｏｎ：  ａｃｔｉｏｎ１  ｅｌｓｅ  ａｃｔｉｏｎ２＞は、φが成功したときａｃｔｉｏｎ１を実行し、失敗したときａｃｔｉｏｎ２を実行することを表す。
【００１９】
（２）  変数？ｘをｔｅｓｔ式内およびサブプログラム内で利用することを許す。このときｔｅｓｔ式φ（？ｘ）に対してφ（ａ）が成功するとき、このようなａを任意に選んで、そのテストを含むサブプログラム内で全ての？ｘをａで置き換える。また定数ｓｅｌｆは、その式を含むサブプログラムの所有者であるエージェントを表す。
【００２０】
３．エージェントの構造
（１）  上記の１．で定義されたプログラムを１つ持つ。プログラムは、実行のエントリポイントとして、ｍａｉｎをＩＤとするサブプログラムを１つ持つ。
【００２１】
（２）  様相論理式の集合からなる知識ベースを１つ持つ。
【００２２】
（３）  プログラムスタックからなるプログラム実行状態を１つ持つ。プログラムスタックは、プログラムカウンタが積まれるスタックであり、ここでプログラムカウンタは、サブプログラムのＩＤと、そのサブプログラムのｔｅｓｔ−ａｃｔｉｏｎ列のある行（ｌｉｎｅ）番号（ステートメントＩＤ）との対により構成される。
【００２３】
４．エージェントシステムの初期化
各エージェントのプログラムスタックの初期状態は、プログラムカウンタ＜ｍａｉｎ，  １＞が１つ積まれた状態である。
【００２４】
５．エージェントの種類
エージェントには、以下の３種類がある。
・モバイルエージェント：ネットワーク上を自由に移動できるエージェント。
・プレースエージェント：移動の対象となる場所を提供するエージェント。
・システムエージェント：プレースにいるエージェントに情報を提供するエージェントで、このエージェントは移動しない。
【００２５】
【発明の実施の形態】
次に、本発明の好ましい実施の形態について、図面を参照して説明する。図１は、本発明の実施の一形態のモバイルエージェントシステムの構成を示すブロック図である。
【００２６】
図１に示すモバイルエージェントシステムは、典型的にはネットワークに接続されたコンピュータ上に構築されるものであり、このようなモバイルエージェントシステムの複数をネットワークに接続することによって、分散・協調処理を行うシステムが得られる。
【００２７】
このモバイルエージェントシステムには、このモバイルエージェントシステムに在中するエージェントの情報を格納するエージェント情報データベース１と、各エージェントのスレッドを制御するエージェントスレッド制御部２と、プログラムの実行を制御するプログラム制御部３と、エージェントのｔｅｓｔ式の検証を行う定理証明エンジン４と、エージェントのａｃｔｉｏｎ式を解釈するａｃｔｉｏｎ解釈部５と、解釈されたａｃｔｉｏｎ式を実行するａｃｔｉｏｎ実行部６と、ネットワークに対するインターフェース部７とが設けられている。
【００２８】
エージェント情報データベース１には、１ないし複数のエージェント情報１１が格納され、各エージェント情報１１は、いずれも、エージェントのプログラムが格納されるエージェントプログラム格納部１２、エージェントが使用する知識ベースであるエージェント知識ベース１３、プログラム実行状態記憶部１４の３つのデータベースからなる。プログラム実行状態記憶部１４は、スタック及びプログラムカウンタを記憶する領域である。エージェントとエージェント情報とは、１対１で対応する。
【００２９】
また、ａｃｔｉｏｎ実行部６は、エージェント知識ベース１３を更新するエージェント知識ベース更新部６１と、エージェントのプログラムを更新するエージェントプログラム更新部６２と、エージェント情報の送受信を行うエージェント送受信部６３とから構成されている。エージェント送受信部６３は、エージェント情報データベース１と交信してエージェント情報を送受信し、またインタフェース部７とネットワークを介して他のモバイルエージェントシステムと交信する。
【００３０】
上述したようにこのモバイルエージェントシステムは、計算機システムによって実現されるものであり、エージェント情報データベース１は、計算機システムの補助メモリや外部メモリに構築される。また、エージェントスレッド制御部２、プログラム制御部３、定理証明エンジン４、ａｃｔｉｏｎ解釈部５及びａｃｔｉｏｎ実行部６は、計算機システムのＣＰＵ（中央処理装置）で実行されるソフトウェアとして構成でき、その実行の際に必要なデータは、計算機システムのＲＡＭ（ランダムアクセスメモリ）にロードされる。
【００３１】
次に、このモバイルエージェントシステムでの処理手順について、図２のフローチャートを参照して説明する。
【００３２】
まず、エージェントスレッド制御部２が、エージェント情報データベース１から、処理の対象となるエージェントを１つ選ぶ（ステップ１０１）。次に、プログラム制御部３が、選択されたエージェントのエージェント情報１１のプログラム実行状態にあるプログラムスタックの最上部から、プログラムカウンタ（＜ｓｕｂ＿ｐ＿ｉｄ，  ｎ＞）を取り出す（ステップ１０２）。ここでｎがサブプログラムｓｕｂ＿ｐ＿ｉｄの最終行かどうかを判断し（ステップ１０３）、最終行の場合はそのままステップ１０５に移行し、最終行でない場合には、ステップ１０４において＜ｓｕｂ＿ｐ＿ｉｄ，  ｎ＋１＞をプログラムスタックに積んでから、ステップ１０５に移行する。
【００３３】
ステップ１０５では、プログラム制御部３が、サブプログラムｓｕｂ＿ｐ＿ｉｄのｎ番目のｔｅｓｔ−ａｃｔｉｏｎ行（＜ｔｅｓｔ：  ｔｅｓｔ１，  ａｃｔｉｏｎ：  ａｃｔｉｏｎ１＞）を取り出し、これを定理証明エンジン４に渡す。定理証明エンジン４は、ｔｅｓｔ１を証明する（ステップ１０６）。証明ができたかどうか、すなわちｔｅｓｔ１が正しいかどうかを判断し（ステップ１０７）、証明できた場合には、ステップ１０８に移行して、ａｃｔｉｏｎ解釈部５を起動し、ａｃｔｉｏｎ解釈部５にａｃｔｉｏｎ１を渡す。証明できなかった場合には、ステップ１０１の最初のエージェントスレッド制御部２の制御に戻る。
【００３４】
ステップ１０８に移行してａｃｔｉｏｎ解釈部５が起動された場合、渡されたａｃｔｉｏｎ１の内容に従って、ａｃｔｉｏｎ実行部６はそのａｃｔｉｏｎを実行する。ａｃｔｉｏｎが上述したａｄｄやｄｅｌｅｔｅであれば、エージェント知識ベース更新部６１を起動し、対象とするエージェントのエージェント知識ベース１３を更新する。ａｃｔｉｏｎがｇｅｔ＿ｓｕｂ＿ｐの場合は、エージェントプログラム更新部６２を呼び出して、対象とするエージェントのプログラムを更新する。ａｃｔｉｏｎがｇｏの場合、エージェント送受信部６３を起動し、インターフェース部７を通じて目的のリモートシステムにエージェントを送信し、その後、エージェント情報データベース１から、該当するエージェント情報を削除する。このときエージェントを受信したリモートシステムでは、そのシステムのエージェント送受信部６３が、送られてきたエージェントのエージェント情報をそのリモートシステムのエージェント情報データベース１に格納する。また、送られてきたエージェントのａｃｔｉｏｎがｃａｌｌの場合、そのシステムのエージェント送受信部６３は、プログラム制御部３を呼び出して、呼ばれたサブプログラムをプログラムスタックに積む。
【００３５】
以上のようにしてステップ１０８でのａｃｔｉｏｎ部分の解釈・実行が行われたら、次のエージェントを処理するために、最初のエージェントスレッド制御部２の制御に戻る（ステップ１０１）。
【００３６】
図３は、エージェントのプログラム例を示すプログラムリストである。以下、このプログラム例を実行した場合の具体的な処理を説明する。ここでは、２つのコンピュータｈｏｓｔ１，ｈｏｓｔ２上に、それぞれ、上述したモバイルエージェントシステムが実現されているとする。また、コンピュータｈｏｓｔ１には、エージェントとして、モバイルエージェントａｇｅｎｔ１とプレースエージェントｐｌａｃｅ１，ｐｌａｃｅ３とシステムエージェントｓｙｓｔｅｍ１とが在中しているものとし、コンピュータｈｏｓｔ２には、モバイルエージェントａｇｅｎｔ２とプレースエージェントｐｌａｃｅ２とシステムエージェントｓｙｓｔｅｍ２とが在中しているとする。各エージェントのプログラムは、図３に示す通りとし、各エージェントの知識ベースは空で、プログラムカウンタは全て＜ｍａｉｎ，  １＞であるとする。以下、処理（１）〜処理（９）の時間順で、プログラムの実行が進む。
【００３７】
処理（１）：ｈｏｓｔ１でエージェントスレッド制御部がａｇｅｎｔ１を選んだとする。このとき、プログラム制御部は、＜ｍａｉｎ，  １＞を取り出し、＜ｍａｉｎ，  ２＞と書き換えてプログラムスタックに積みなおす。そしてプログラム制御部は、ｍａｉｎサブプログラムの１行目のｔｅｓｔ−ａｃｔｉｏｎ＜ｔｅｓｔ：ｓｙｓｔｅｍ１｜−ｃａｎ＿ｐｌａｎ，  ａｃｔｉｏｎ：  ｃａｌｌ（ｓｙｓｔｅｍ１，  ｐｌａｎ）＞を取り出し、定理証明エンジンに渡す。定理証明エンジンは、ｔｅｓｔ部「ｓｙｓｔｅｍ１｜−ｃａｎ＿ｐｌａｎ」すなわち、ｓｙｓｔｅｍ１の知識ベースがｃａｎ＿ｐｌａｎを導出するかを判定する。この時、ｓｙｓｔｅｍ１の知識ベースは空なので導出は失敗し、ａｃｔｉｏｎは実行されずに終わる。
【００３８】
処理（２）：ｈｏｓｔ１でエージェントスレッド制御部がまたａｇｅｎｔ１を選んだとする。このとき、プログラム制御部は＜ｍａｉｎ，  ２＞を取り出し、＜ｍａｉｎ，  ３＞と書き換えてプログラムスタックに積みなおす。そして、ｍａｉｎサブプログラムの１行目のｔｅｓｔ−ａｃｔｉｏｎ＜ｔｅｓｔ：ｓｙｓｔｅｍ１｜−Ｋ＿ｓｙｓｔｅｍ１（ｓｙｓｔｅｍ２＿ｃａｎ＿ｐｌａｎ），  ａｃｔｉｏｎ：ｇｏ＿ｐｌａｃｅ２  ｅｌｓｅ  ｉｄｌｅ＞を取り出し、定理証明エンジンに渡す。定理証明エンジンは、ｔｅｓｔ部「ｓｙｓｔｅｍ１｜−Ｋ＿ｓｙｓｔｅｍ１  （ｓｙｓｔｅｍ２＿ｃａｎ＿ｐｌａｎ）」を証明しようとするが、これも失敗する。今回はｅｌｓｅ付きのｔｅｓｔで、ａｃｔｉｏｎはｉｄｌｅなので、プログラムスタックを１つ前に戻す。すなわち、＜ｍａｉｎ，  ３＞を取り除き、＜ｍａｉｎ，  ２＞をスタックに積む。
【００３９】
処理（３）：ｈｏｓｔ２でエージェントスレッドがａｇｅｎｔ２を選んだとする。上記と同様に、＜ｍａｉｎ，  １＞をｈｏｓｔ２のプログラム制御部が取り出す。ｍａｉｎは１行しかｔｅｓｔ−ａｃｔｉｏｎを含まないので、プログラムスタックは空になる。そして、ａｇｅｎｔ２のｍａｉｎサブプログラムの１行目＜ｔｅｓｔ：，  ａｃｔｉｏｎ：ａｄｄ  （ｓｙｓｔｅｍ１，  ｃａｎ＿ｐｌａｎ＿ａｇｅｎｔ２＿ｐｌａｎ１）＞が選ばれる。ｔｅｓｔ部分が空なので無条件に導出は成功し、ａｃｔｉｏｎ「ａｄｄ（ｓｙｓｔｅｍ２，  ｃａｎ＿ｐｌａｎ＿ａｇｅｎｔ２＿ｐｌａｎ１）」が実行される。すなわちｓｙｓｔｅｍ２の知識ベースにｃａｎ＿ｐｌａｎ＿ａｇｅｎｔ２＿ｐｌａｎ１が格納される。
【００４０】
処理（４）：次に、ｈｏｓｔ２でエージェントスレッド制御部がｓｙｓｔｅｍ２を選んだとする。上述と同様にｓｙｓｔｅｍ２｜−ｃａｎ＿ｐｌａｎ＿？ｘ＿？ｙの証明が行われる。この場合、？ｘがａｇｅｎｔ２、？ｙがｐｌａｎ１の時、成功するので、ｓｙｓｔｅｍ１の知識ベースにｓｙｓｔｅｍ２＿ｃａｎ＿ｐｌａｎを格納する。
【００４１】
処理（５）：ｈｏｓｔ１でエージェントスレッド制御部がａｇｅｎｔ１を選んだとする。この時、プログラムスタックの１番上の＜ｍａｉｎ，  ２＞を取り出し、＜ｍａｉｎ，  ３＞を積む。また、ｍａｉｎサブプログラムの２行目のｔｅｓｔ−ａｃｔｉｏｎを試みる。今度はｓｙｓｔｅｍ１｜−Ｋ＿ｓｙｓｔｅｍ１（ｓｙｓｔｅｍ２＿ｃａｎ＿ｐｌａｎ）が成功し、それにより、ａｃｔｉｏｎに従って、ａｇｅｎｔ１はｐｌａｃｅ２に移動する。すなわち、ｈｏｓｔ１のエージェント情報データベースからａｇｅｎｔ１に対応するエージェント情報を取り除き、それをｈｏｓｔ２のエージェント情報データベースに加える。
【００４２】
処理（６）：ｈｏｓｔ２でエージェントスレッド制御部がａｇｅｎｔ１を選んだ時、＜ｍａｉｎ，  ３＞をプログラムスタックから取り出し、＜ｍａｉｎ，  ４＞を積んで、３行目のｔｅｓｔ−ａｃｔｉｏｎ＜ｔｅｓｔ：  ｓｙｓｔｅｍ２｜−ｃａｎ＿ｐｌａｎ＿？ｘ＿？ｙ，  ａｃｔｉｏｎ：  ｇｅｔ＿ｐｌａｎ（？ｘ，  ？ｙ）＞を得る。ここで、ｓｙｓｔｅｍ２｜−ｃａｎ＿ｐｌａｎ＿？ｘ＿？ｙは、？ｘがａｇｅｎｔ２、？ｙがｐｌａｎ１の時に成功するので、ａｃｔｉｏｎ  ｇｅｔ＿ｐｌａｎ（ａｇｅｎｔ２，  ｐｌａｎ１）を実行する。すなわち、ａｇｅｎｔ２のサブプログラムｐｌａｎ１およびそこからｃａｌｌされるサブプログラムを、全てａｇｅｎｔ１のプログラムに取り込む。この例では、ｐｌａｎ１だけが取り込まれる。
【００４３】
処理（７）：ｈｏｓｔ２でａｇｅｎｔ１が選ばれた時、ｍａｉｎの４行目の＜ｔｅｓｔ：，  ａｃｔｉｏｎ：  ｃａｌｌ  （？ｙ）＞が取り出される。ここでｔｅｓｔは空なので無条件で成り立ち、？ｙは、ｐｌａｎ１なので、ｃａｌｌ（ｐｌａｎ１）が実行される。すなわち、＜ｐｌａｎ１，  １＞がプログラムスタックに積まれる。
【００４４】
処理（８）：ｈｏｓｔ２でａｇｅｎｔ１が選ばれたとすると、ａｇｅｎｔ２の知識ベースがｆａｃｔ１を導けば、それを自分の知識ベースに格納する。
【００４５】
処理（９）：ｈｏｓｔ２でａｇｅｎｔ１が選ばれたとすると、ｐｌａｃｅ３に移動する。
【００４６】
上記の処理（１）〜（９）に対応するエージェントの移動状態を図４（ａ）〜（ｃ）に示す。
【００４７】
【発明の効果】
以上説明したように本発明は、論理に基づくスクリプト言語を利用して、エージェントの移動の際に実行状態を完全に保存し、また、プログラムの動的な変更も可能にするモバイルエージェントシステムが組み込まれた装置が得られるという効果がある。
【図面の簡単な説明】
【図１】本発明の実施の一形態のモバイルエージェントシステムの構成を示すブロック図である。
【図２】図１に示す装置での全体的な処理を示すフローチャートである。
【図３】図１の装置で使用されるプログラムの一例を示すプログラムリストである。
【図４】（ａ）〜（ｃ）は、それぞれ、処理の流れを図解する図である。
【符号の説明】
１    エージェント情報データベース
２    エージェントスレッド制御部
３    プログラム制御部
４    定理証明エンジン
５    ａｃｔｉｏｎ（アクション）解釈部
６    ａｃｔｉｏｎ（アクション）実行部
７    ネットワークインタフェース部
１１    エージェント情報
１２    エージェントプログラム格納部
１３    エージェント知識ベース
１４    プログラム実行状態記憶部
６１    エージェント知識ベース更新部
６２    エージェントプログラム更新部
６３    エージェント送受信部
１０１〜１０８    ステップ
【図１】
0003571256.tif 000002
【図２】
0003571256.tif 000003
【図３】
0003571256.tif 000004
【図４】
0003571256.tif 000005