エージェントなのか、分散オブジェクトなのか?

Javaによる知的エージェント入門

Javaによる知的エージェント入門

批判的な読者であれば、次のような質問をするかもしれない。エージェントをやるとどんないいことがあるのか? それらは単に、分散オブジェクトに別の名前を付けただけではないか。CORBAは何年も前からあったし、Microsoftのオブジェクト(OLE、DCOMなど)も何年も前から存在している。一体、何が違うのか?

この問題を論じるためには、まず、分散オブジェクトアプリケーションと、分散マルチエージェントシステムアプリケーションについて調べてみよう。分散オブジェクトアプリケーションは、オブジェクト、データ、そして、必要とされる機能を実現するのに必要な振る舞い(メゾッド)で定義される。オブジェクト間のやりとりは、明示的に定義される。すなわち、メソッドの呼び出しの手順は、かなり具体的な形で指定されることになる。オブジェクトはソフトウエアエンティティであり、それは状態(データ)とその振る舞い(機能)を隠蔽し、手続きあるいはメソッドの組をその状態に操作するために公開する。オブジェクトは自分自身の意思作用の動作を起動しない。

マルチエージェントシステムでは、我々は、ソフトウエアエンティティの組として、自律的に動作を行うものを考える。それぞれのエージェントは、オブジェクトよりも複雑な内部状態を持っている。さらに重要なことは、それぞれ自身が内部のゴール(目標)を持っている。エージェントは、何をすべきか、それをいつすべきかを決定する。エージェントはある動作を実行せよという要求に対して、「ノー」ということができる。オブジェクトは固定された役割を持っている。エージェントはアプリケーションが実行される途中で、役割を動的に変えることができる。

分散オブジェクトアプリケーションでは、すべてのオブジェクトは、ひとつのアプリケーションゴールを達成するための機能の一部を供給する。エージェントシステムでは、ゴール指向のソフトウエアエンティティが、あるアプリケーションゴールを達成するために協調動作を行う。オブジェクトはメソッドを呼び出す。エージェントは会話をする。オブジェクトはプッシュされるのを待っているボタンを持つデータパケットである。エージェントはどのボタンを押すかを能動的に決定する。