ソフトウェアエージェント

**ソフトウェアエージェント**（software agent）とは、ユーザーや他のソフトウェアとの仲介 (Agency) 的関係において動作するソフトウェアを説明する計算機科学上の抽象概念であり、論理的モデルである。そのような代行的行動は行動の適切さの判断や時期の判断の権限を暗示している。

関連する派生概念として、知的エージェント（人工知能的要素である学習や推論を取り入れたもの）、自律エージェント（目的を達成するための方法を自律的に更新できるもの）、分散エージェント（物理的に別個のコンピュータ群上で動作するもの）、マルチエージェントシステム（単体では目的を達成できず、互いに通信する分散エージェント群）、モバイルエージェント（ネットワーク上で自身を実行するプロセッサを乗り換えていくことができるエージェント）などがある。

## コンセプト
ソフトウェアエージェントの持つ基本特性は次の通りである。
* タスクとして厳密に管理されないが、自分自身が勝手に起動することはない。
* ホスト上で所定のイベントの発生を待ち続けることがある。
* 動作条件が整うと動作状態になる。
* ユーザーからの指示を必要としない。
* 通信などの他のタスクを呼び出すことがある。

「エージェント」という用語はソフトウェアの抽象化/アイデア/概念を説明するものであり、その意味でオブジェクト指向プログラミングの各種用語（メソッド、クラス、オブジェクトなど）と同類である。エージェントの概念は、ユーザーの代理である程度自律的に行動できる複雑なソフトウェアを説明するための便利で強力な方法を提供する。しかし、メソッドや属性といった用語で定義されるオブジェクトとは異なり、エージェントはその振る舞いで定義される。

様々な人々がそれぞれにエージェントの定義を提案しているが、それらには以下のような概念が共通して含まれている。
* **[[永続性 (計算機科学)|永続性]]**(persistence) - そのコードは要求されて実行されるのではなく、常に起動された状態で、何らかの行動を起こす時期を自身で判断する。
* **自律性**(autonomy) - エージェントは、実行すべきタスクの選択、優先順位付け、目標に向けた行動、意思決定を人間の手助けなしで行う機能を持つ。
* **社会性**(social ability) - エージェントは他のコンポーネントと何らかの通信や協調をする機能を持ち、1つのタスクを共同で処理する。
* **反応性**(reactivity) - エージェントは周囲の環境を把握し、その変化に適切に反応する。
「エージェント」の概念は規範としてよりもシステムを解析するツールとして最も役立つ。上述したエージェントの概念は人間が複雑な仕事を考える場合の自然な方法を反映したものであり、そのためにエージェントはそのような複雑なタスクのモデルとして有効である。

### 一般的コンピュータプログラムとの相違点
Fanklin &amp; Graesser (1996) では、一般的プログラムとエージェントを区別する4つの点を指摘した。それは「**環境への反応、自律性、ゴール指向、永続性**」である。

### オブジェクトとの直観的相違点
* エージェントの方がオブジェクトよりも自律的である。
* エージェントは柔軟な動作が可能（反応的、自発的、社会的）。
* エージェントは少なくとも1つのスレッドを持つ（通常もっと多い）。
: (Wooldridge, 2002)

### エキスパートシステムとの相違点
* エキスパートシステムは自身の置かれた環境とは隔絶されている。
* エキスパートシステムは、反応的・自発的振る舞いをするよう設計されていない。
* エキスパートシステムは社会性を考慮しない。
: (Wooldridge, 2002)

### 知的ソフトウェアエージェントと人工知能における知的エージェントとの相違点
人工知能の分野では、知的エージェント (Intelligent agent) はコンピュータプログラムとは限らず、システム、人間、コミュニティ（企業など）といった目的を持って振る舞う何らかのものを指す。

## 歴史
エージェントの起源はカール・ヒューイットのアクターモデル (Hewitt, 1977) にまで遡ることができる。「自己充足的で対話的かつ並行的に実行されるオブジェクトであり、内部状態を持っていて通信機能を備えている」

学問的には、ソフトウェアエージェントシステムはマルチエージェントシステム(MAS)から生まれた。MAS は分散人工知能や分散問題解決の研究から出てきたものである。したがって、ソフトウェアエージェントは分散人工知能や人工知能の性格を継承している。

1987年当時、AppleのCEOであったジョン・スカリーがコンセプトを提案した  のビデオではエンドユーザーとエージェントの関係が描かれていた。まず最初に理想像があったため、この分野ではボトムアップ的手法ではなくトップダウン的手法を採用して何度も失敗を繰り返してきた（例: 1990年代前半から2001年にかけてのGeneral MagicのTelescript）。エージェントの種類は現在では非常に幅広く、World Wide Web やサーチエンジンなどに利用されている。

## 例
 
Haag (2006) は知的ソフトウェアエージェントを次の4種類に分類している。
# バイヤーエージェント（買い物ボット）
# ユーザー（個人）エージェント
# 監視（予測）エージェント
# データマイニング・エージェント

### バイヤーエージェント（買い物ボット）
このタイプのボットはインターネットサーファーが商品やサービスを見つけるのを補助する。例えば、eBayで買い物をしようとしたとき、ページの下に同じ検索をした他のユーザーが購入した類似商品のリストが表示される。これはユーザーの嗜好の類似性を仮定して、同様の商品に興味を持つだろうと判断しているためである。この技術を協調フィルタリングと呼ぶ。

### ユーザー（個人）エージェント
このタイプのエージェントはユーザーのために自動的にタスクを実行する。例えば、次のようなタスクを行う。
* 電子メールの着信をチェックし、ユーザーの指定に従ってソートし、重要な着信があればユーザーに知らせる。
* 電子メールをソートしたり、カスタマイズされたニュース収集をしたり（例えば、newshub）、ユーザー情報に基づいてウェブページ上のフォームに入力したりする（たとえば、Form Filler bot）。
* コンピュータゲームでユーザーの相手をしたり、ユーザーの指示でゲームエリアを巡回したりする。
* 指定された傾向のニュースを集める。
* ウェブ上のフォームを自動的に埋める。
* ウェブページを検索し、ユーザーが重要だと思う部分をハイライト表示する。
* ウェブ上の求人を検索し、ユーザーが指定した基準に達している求人に対して履歴書を送る。
* 各種ソーシャル・ネットワーキング・サービスでのプロフィール情報を同期させる。

### 監視（予測）エージェント
このタイプのエージェントはコンピュータシステムなどの機器を監視して報告する。例えば、在庫状況を監視するエージェント、競合他社の商品価格を監視して報告するエージェント、インサイダー取引や噂などによる株価操作を監視するエージェントなどがある。

例えばNASAジェット推進研究所では、食糧も含めた在庫を監視し、コストを抑えて備品の注文をスケジューリングするエージェントを使用している。

### データマイニング・エージェント
このタイプのエージェントは、データウェアハウスでの情報発見に使われる。データウェアハウスは様々な情報源からの多量のデータを集めたものである。そこから有用な知識を見つけ出すことをデータマイニングという。例えば、売り上げを増やすのに有用な知識を得たり、離れようとしている顧客を繋ぎとめるのに有用な知識を得たりし、経営に役立てる。

データマイニングの最も一般的なものとして「クラス分類」があり、情報からパターンを見出し、それらを複数のクラスに分類する。データマイニング・エージェントは傾向の大まかな変遷や鍵となる指標を見つけることができ、新たな情報を検知して知らせることもできる。

### その他の例
その他の知的エージェントの例として、スパムフィルター、ゲームボット、サーバ監視ツールがある。検索エンジンの使用するボットも知的エージェントの一種である。その他の例は BotSpot にある。
*ユーザーエージェント - ウェブブラウザなどのこと
*メール転送エージェント - 電子メールを処理するソフトウェア。ユーザーエージェントも含めてこれらが「エージェント」と呼ばれるのは、ユーザーが知らない通信プロトコルを理解してサーバと通信することからである。動作に関する（フィルタリングなどの）ルールもユーザー設定可能で、ある程度自律的に動作する。
*SNMP エージェント  
*UNIX系システムにおける *[[デーモン (ソフトウェア)|デーモン]]*。
* 安全設計や3次元コンピュータグラフィックスで使われる群集シミュレーションも一種のソフトウェアエージェントである。

## 設計上の問題
エージェントベースのシステムの開発する際の問題として、以下のようなものが挙げられる。
* タスクのスケジューリングと同期をどのように実現するか
* エージェントがどうやってタスクの優先順位付けをするか
* エージェント間の協調動作やリソース確保をどうするか
* エージェントをどのように別の環境に生成するか、内部状態をどう保持するか
* 周囲の環境をどのようにして感知し、環境の変化を動作の変化に結びつけるか
* 通信をどう行うか
* エージェント群の階層構造はどうすべきか（例えば、タスク実行エージェント、スケジューリングエージェント、リソース確保エージェント……）
ソフトウェアエージェントが効率的に協調動作するには、データの意味論的要素を共有しなければならない。これはコンピュータシステムがメタデータを提示することで可能である。

「エージェント処理; agent processing」には相互に関連する以下の2つの定義がある。
*内部状態処理と知識表現のためのオントロジー
*協調動作のプロトコル - タスク間の通信を行うための標準

エージェントシステムは実世界を並行性や並列性でモデル化したものでもある。
* **Agent Machinery** - 各種エンジン。知能程度は様々である。
* **Agent Content** - Machinery が推論や学習に利用するデータ。
* **Agent Access** - Machinery が Content を把握し推論の結果として行動することを可能にする方法
* **Agent Security** - 分散コンピューティングに関連した懸念の中でも特にエージェントに関して指摘されている問題

エージェントはアクセス手段を用いてローカルまたはリモートのデータベースを調べ、Content となるものを探す。アクセス手段としては、ネットニュースをエージェントが受け取れるようにするとか、掲示板を用意するとか、ウェブを歩き回る機能を使用したりする。あらゆる情報源を検索できるわけではないので、このようにして検索される Content は部分的にフィルタリングされているだろう。エージェントはさらに詳細な検索を行ったり、機械的言語処理を行ってキーワードやサインを Content から探し出す。この要約された Content （またはイベント）がエージェントの推論機構(Machinery)に渡され、新たな Content に対して何をすべきかを判断する。この過程でイベント Content はユーザーが提供したルールベースか知識内容と結合する。その過程で新たな Content から良い一致を検出したら、エージェントは Machinery の別の機構を使ってさらに詳細な検索を行う。最終的に、エージェントは新たな Content に基づいて採るべき行動を決定する。例えば、ユーザーに対して重要なイベントが発生したことを通知する。この行動はセキュリティ機能によって検証された後、ユーザーの権限を与えられる。

## 影響
ソフトウェアエージェントは複雑なタスクや繰り返し行うべきタスクを自動化し、それによってさまざまな利益をユーザーに提供する。しかし、ソフトウェアエージェントを実装する際には、このテクノロジーの組織への影響や文化への影響を考慮する必要がある。

### 組織への影響
組織への影響としては、電子商取引全体の形質転換、操作上の障害、セキュリティ過負荷などを含む。ソフトウェアエージェントはインターネット上で素早く検索でき、最善の申し出を識別し、その情報をまとめてエンドユーザーに提供できる。したがって、ユーザーは様々な販売業者のウェブサイトをいちいちブラウズすることなく、数秒で最も条件のよい売り手を探し当てることができる。それにより価格競争が激化し、同時に電子商取引全体が均一な価格競争市場へと変質することになる。またエージェントの実装には追加のリソースが必要であり、ネットワークの負荷を増やし、新たなセキュリティ対策の追加も必要となる。

### 仕事の満足度への影響
人々は、簡単な仕事の反復が結果に影響しない限り、簡単な仕事をこなすことで成功の感覚を得ることを好む。労働者は自分の仕事を管理することを面倒に感じることが多く、そういった管理面を実行するソフトウェアエージェントの実装は仕事満足度を向上させることになる。それにより労働者は本来の職務により多くの時間をかけられるようになる。それゆえ、ソフトウェアエージェントを活用することで階層的管理や干渉をなくし、労働者が自分で自分の仕事を管理できる可能性がある。

### 文化的影響
ソフトウェアエージェントの実装による文化面の影響として、信頼感・スキルの喪失、プライバシー侵害、社会的孤立などがある。重要なタスクをソフトウェアに任せることを必ずしも誰もが完全に快適と感じるわけではない。知的エージェントに依存するようになると、例えば情報リテラシーに関連する重要なスキルを失うかもしれない。ユーザーエージェントを使用するには、ユーザーの個人的好みなど詳細なプロフィールを必要とする。そのことが予測不能なプライバシー問題を生じる可能性もある。コミュニケーション活動においてソフトウェアエージェントに依存するようになると、エージェントの目を通してのみ他人とコンタクトするようになる可能性もある。知的エージェント技術を扱うにあたっては、そういった影響を考慮する必要がある。

## エージェント向けの記法やフレームワーク
* DAML (DARPA Agent Markup Language)
* Jason
* 3APL (Artificial Autonomous Agents Programming Language)
* GOAL agent programming language
* Web Ontology Language (OWL)
* UNIX系システムにおける *[[デーモン (ソフトウェア)|デーモン]]*
* Java Agent Template (JAT)
* Java Agent Development Framework (JADE)

## 脚注

## 参考文献
* Software Agents: An Overview, Hyacinth S. Nwana. *Knowledge Engineering Review*, 11(3):1–40, September 1996. Cambridge University Press.
* 
* Carl Hewitt and Jeff Inman.  *DAI Betwixt and Between:  From "Intelligent Agents" to Open Systems Science* IEEE Transactions on Systems, Man, and Cybernetics.  Nov./Dec. 1991.
* Hyacinth S. Nwana, Divine T. *Ndumu: An Introduction to Agent Technology,* Software Agents and Soft Computing 1997: 3-26. 
* Chyi-Ren Dow, Chi-Ming Lin, and Chen-Ming Lin, *Network Agent Application,* Mobile Computing Laboratory, Dept. of IECS, Feng Chia University, Taiwan, R. O. C., 2005.
* Padgham, L. & Winikoff, M. *Developing Intelligent Agent Systems* (2004) John Wiley & Sons, ISBN 0-470-86120-7

## 関連項目
* エージェントアーキテクチャ
* エージェント・ベース・モデル

## 外部リンク
*Foundations of Software Agent Technology - 「ソフトウェアエージェント技術の構築と展開を伝承や場当たり的技能から科学へと転換することを目的とする」ウェブサイト
**Software Agent Technology List - 関連リンク集
*Foundation for Intelligent Physical Agents
*European Co-ordination Action for Agent Based Computing
*JADE - Java Agent DEvelopment Framework
* Software Agent Research Community Europe
* SemanticAgent An Open Source framework to develop SWRL based Agents on top of JADE
* Mobile-C A Multi-Agent Platform for Mobile C/C++ Agents.
* Open source project KATO for PHP and Java developers to write software agents