TAGにおけるエージェントの基本的な構造と,エージェントとの対話方法について説明します.教科書p.43 "3.1 エージェントの言葉 ACL" の内容に相当します.
- userがエージェントに設計者の名前を質問します.
- エージェントは設計者を返答します.
- userとエージェントはACLによって対話します.
- メッセージの送信にはWeb UIを使います.
- request-information メッセージを受け取ると,
- メッセージに対応できる場合は inform メッセージを返します.
- 対応できない場合は sorry メッセージを返します.
class Simple extends TAG {
def loop(msg) {
println msg
if (msg._p=='request-information' && msg.question=='Designer?') {
reply(msg, [_p:'inform', answer:'工大太郎'])
} else {
reply(msg, [_p:'sorry', msg:msg])
}
}
}
- プログラムはGroovy言語で記述します.JavaとRubyを組み合わせたような言語だそうです.
- メッセージが届くと
loop()
を実行します. msg
は届いたメッセージです.
- メッセージは
[_p:'request-information', question:'Designer?']
のようなマップ形式を取ります.[属性1:属性値1, 属性2:属性値2, ...]
という形式です.
- 属性のアクセス方法は,
変数.属性
です.msg._p
やmsg.question
などがその例です.
_p
という属性は,メッセージのパフォーマティブを表します.
reply()
は,届いたメッセージに対する返信メッセージを返します.
- TAGサーバを起動しておきます.
- Webブラウザで http://localhost:8080/tag/ を開くとWeb UI画面が表示されます.
- Web UI画面は大きく4つに分けられています.
- (左上)エージェントペイン:起動しているエージェントが表示されます.tagserver.jarを起動すると,agent/フォルダ内のすべてのエージェントプログラムも起動します.
- (左下)ログペイン:システムからの報告やエージェントの出力が表示されます.
- (右上)エディタペイン:エージェントペインのエージェントをクリックすると,そのプログラムが表示されます.編集後にエージェントペインの Save&restart をクリックすると,変更が保存されます.変更を反映するためにエージェントは再起動します.
- (右下)メッセージペイン:メッセージを送信したり,メッセージ履歴を表示するのに使います.
- エージェントSimpleにメッセージを送ってみましょう.メッセージペインを使います.
- Select some agents に送信先エージェント名を入力します.今回は
Simple
を入力します.
- その右に送信するメッセージ内容を入力します.今回は
[_p:'request-information', question:'Designer?']
を入力します
- Send message ボタンをクリックします.入力したメッセージがエージェントSimpleに送信されます.
- エージェントSimpleは
[_p:'inform', answer:'工大太郎', _f:'Simple']
をユーザに返信します.属性_f
は自動的に付加される属性です.属性値はメッセージの送信者です.
- メッセージの送信履歴は,表形式で表示されます. table-seq ボタンをクリックすると,シーケンス図形式に切り替えることができます.
[_p:'request-information', question:'Busy?']
を送信してみましょう.[_p:'sorry', msg:[_p:'request-information', question:'Busy?', _f:'user'], _f:'Simple']
が返信されます.なぜこの返信なのかを考えてみましょう.
[_p:'request-information', question:'Busy?']
を受信したら,[_p:'inform', answer:'No', _f:'Simple']
と返すようにプログラムを変更してみましょう.
- エディタペインのプログラムを変更します.
- 変更を反映するには,エージェントを再起動します.
- エージェントペインの Save&restart をクリックすると,エディタペインで変更された全てのエージェントが再起動し,変更を反映します.
- (今回は使いませんが)restart all をチェックして Save&restart をクリックすると,変更されていないエージェントを含む全てのエージェントが再起動します.
- メッセージを送信して動作確認してみましょう.