直接落札メッセージ(directed-award)のみを用いたエージェント組織の構成方法について述べる。
全てのエージェント名が既知であり、同じリポジトリ上に存在しているものとする。
Sample090 | |
Sample091
Sample092 | |
Sample093
Sample094
エージェント名 ファイル名 機能名 説明 Sample090 Sample090.dash manager マネージャ Sample091 Sample091.dash member1 メンバ1 Sample092 Sample092.dash member2 メンバ2 Sample093 Sample093.dash member3 メンバ3 Sample094 Sample094.dash member4 メンバ4
1 (agent Sample090 2 3 (property 4 (create :author "Maemur@CIT") 5 ) 6 7 (initial_facts) 8 9 // 組織構成ルールセットの読み込み 10 (include :file Dash-Org.rset) 11 12 (knowledge 13 (rule cnp-activate 14 (Msg :performative __INIT_C) 15 --> 16 (activate (Dash-Org _default)) 17 ) 18 19 (rule show-my-name 20 (Status :name ?name) 21 --> 22 (print "エージェント名: " ?name) 23 ) 24 ) 25 26 // 組織構成のために追加するルール 27 (rule-set Dash-Org 28 (property) 29 (initial_facts) 30 31 // タスク実現可能性の判断(分割する場合) 32 (rule decompose-check 33 (task-check :id ?id :task (task :name "manager")) 34 ~(bid :id ?id) 35 --> 36 (make (bid :id ?id :content (task :name "manager"))) 37 (make 38 (decompose :id ?id // 変更不可 39 :to "Sample091" // エージェント名 40 :env "null" // リポジトリ名 41 :wait 3000 // 入札待ちでタイムアウトするまでの時間 42 :wp "null" // インスタンシエート先のワークプレース名 43 :task (task :name "member1"))) 44 (make 45 (decompose :id ?id 46 :to "Sample092" 47 :env "null" 48 :wait 3000 49 :wp "null" 50 :task (task :name "member2"))) 51 ) 52 ) 53 ) |
| 10: | ここで、組織構成プロトコルのためのルールセット(Dash-Org.rset)を読み込んでいる。 |
| 13〜16: | ルールセットDash-Orgをアクティブにする。 (これを行わないとタスク通知/直接落札を受信しても反応しなくなるので注意) |
| 33, 36: | 「manager」が機能名に相当する。必ず、「:name」属性は記述する。その他の属性については任意。 |
| 38〜43, 45〜50: | decompose知識。詳細は、(5)組織構成のための知識記述を参照。 |
1 (agent Sample092 2 3 (property 4 (create :author "Maemur@CIT") 5 ) 6 7 (initial_facts) 8 9 // 組織構成ルールセットの読み込み 10 (include :file Dash-Org.rset) 11 12 (knowledge 13 (rule cnp-activate 14 (Msg :performative __INIT_C) 15 --> 16 (activate (Dash-Org _default)) 17 ) 18 19 (rule show-my-name 20 (Status :name ?name) 21 --> 22 (print "エージェント名: " ?name) 23 ) 24 ) 25 26 // 組織構成のために追加するルール 27 (rule-set Dash-Org 28 (property) 29 (initial_facts) 30 31 // タスク実現可能性の判断(分割しない場合) 32 (rule task-check 33 (task-check :id ?id :task (task :name "member2")) 34 ~(bid :id ?id) 35 --> 36 (make (bid :id ?id :content (task :name "member2"))) 37 ) 38 ) 39 ) |
| 32〜36: | 分割しない場合は、(decompose)ファクトを生成しない。 |
●準備
●起動
- クイックスタートに目を通しておくこと。
- クイックスタートの手順(3)に利用するホスト名を調べる方法があるので確認しておく。
●何が起きるか?
- リポジトリとワークプレースを起動する。 起動すると環境モニタが表示される。
- リポジトリ上にエージェントが存在しない場合は、 環境モニタのメニューFile->Openで、(2)のエージェントを開く。
- ACLエディタを使って、直接落札(directed-award)をCnpManagerに送信する。
:performative
directed-award :to
CnpManager :content
(request :to Sample090 :env "r1:ホスト名" :content (task :name manager))
Send
- 「CnpManager」から「Sample090」に対して直接落札が送信された後、 (2)で記述した分割内容に従って、「Sample091」〜「Sample094」に対して直接落札が送信される。 落札(award)メッセージを受信したエージェントから順にインスタンシエートされる。
- ワークプレースに、エージェントが5つ生成され、logタブかコンソールに以下のメッセージが表示される。
1 2 hostname = _localhost 3 dvmname = r1:_localhost 4 hostname = _localhost 5 dvmname = w1:_localhost 6 エージェント名: Sample090 7 エージェント名: Sample091 8 エージェント名: Sample092 9 エージェント名: Sample093 10 エージェント名: Sample094 11 エージェント名: Sample100 12 エージェント名: Sample101 13 エージェント名: Sample102 14 エージェント名: Sample103 15 エージェント名: Sample104 16 エージェント名: Sample110 17 エージェント名: Sample111 18 エージェント名: Sample090.200211261951498:w1:_localhost 19 エージェント名: Sample091.200211261951509:w1:_localhost 20 エージェント名: Sample092.200211261951511:w1:_localhost 21 エージェント名: Sample093.200211261951523:w1:_localhost 22 エージェント名: Sample094.200211261951527:w1:_localhost 23 From: [CnpManager] Message: [インスタンシエートに成功しました。] 24※生成時刻やホスト名は環境によって異なるので、上記の出力例とは同じにならない場合がある。
6〜10: リポジトリに読み込まれたエージェントが出力したメッセージ。 18〜22: ワークプレースに生成されたエージェントが出力したメッセージ。
| エージェント名 | 環境名 | メッセージ形式 | :to | :env |
|---|---|---|---|---|
| 分らない | 分らない | タスク通知 | null | null |
| 分かる | リポジトリ名 | |||
| 分かる | 分らない | 直接落札 | エージェント名 | null |
| 分かる | リポジトリ名 |