例題 3.1 ACLによるエージェントとの対話

  • 概要
  • エージェント
  • 起動

  • (1)概要

    例題 3.1 のエージェントSimpleに組織構成のためのルールを追加する。

    (2)エージェント

    ACLエディタ(_interface)
    ここにパフォーマティブ(:perforamtive)や宛先(:to)を入力し、 CnpManagerに対してメッセージを送信する。

    組織構成エージェント(CnpManager)
    他のエージェント(ACLエディタを含む)から受信したメッセージを組織構成プロトコル に適した形式に変換し、指定されたエージェントとの通信を行う。

    Simple
    例題 3.1 で述べられていたSimpleエージェントに組織構成に必要なルールを追加したもの。

    (2.1)Simple.dash

       1  // 例題 3.1 ACLによるエージェントとの対話
       2  (agent Simple /* 簡単なメッセージに応答するエージェントSimple */
       3    (property  (create :author "太郎@ieice" :date "Apr. 15, 2000"))
       4
       5    (initial_facts)
       6
       7    // 組織構成ルールセットの読み込み
       8    (include :file Dash-Org.rset)   
       9
      10    (knowledge
      11
      12      (rule accept  /* 設計者名の情報要求メッセージの処理 */
      13          (Msg :performative request-information :from ?from
      14               :content (question :sentence "Designer?")) = ?msg
      15          (create :author ?author)
      16          -->
      17          (send :performative inform :to ?from
      18                :content (answer :sentence ?author))
      19          (remove ?msg))
      20
      21      (rule deny  /* それ以外のメッセージの処理 */
      22          (Msg :from ?from :content ?content) = ?msg
      23          -->
      24          (send :performative sorry :to ?from :content ?content)
      25          (remove ?msg))
      26
      27      (rule activate /* 組織構成ルールセットをアクティブにする */
      28          (Msg :performative __INIT_C :content (INIT))
      29          -->
      30          (activate Dash-Org))
      31    )
    10行目の knowledge からここまで(青枠で囲まれた部分)がルールセット _default となる。
      32    (rule-set Dash-Org
      33      (property)
      34      (initial_facts)
      35      (rule task-check
      36          (task-check :id ?id :task (task :name "Simple"))
      37          ~(bid :id ?id)
      38          -->
      39          (make (bid :id ?id :content (task :name "Simple")))))
    32行目の rule-set からここまでが、ルールセット Dash-Org となる。
      40  )
    

    組織構成を可能にするために追加した記述(プログラム内の赤枠で囲んだ箇所)について

    7: タスク通知や直接落札を処理するために必要なルールセットを読み込む。 Dash-Orgルールセットは、Dash-Org.rsetに記述されているが、 ファイルに記述されているルールセット名とファイル名は一致していなくてもよい。
    27〜30: ルールセットを読み込んだだけでは、メッセージを受信しても発火しないので アクションでアクティブにする。メッセージを受け取るまでにアクティブになっていればよいので このルールのように起動時にアクティブにしなくてもよく、記述形式に制限はない。
    32〜 組織構成ルールセットである Dash-Org を読み込んだだけでは、入札等を返すことが できないので、タスク実現可能性の判断をするルールを追加する。ここでは、読み込んだルールセット の前に追加する形で記述してあるが、優先順位が高くなるように設定してあれば、他のルールセット に記述することも可能である。
    35〜39: タスク実現可能性を判断するためのルール。タスク通知と直接落札のどちらに対しても条件を満たせば 発火する。ここに記述されている内容は、必要最低限の状態なのでこれ以上は省略できない。
    (→タスク実現可能性の判断)

    (3)起動

     1. 起動と読み込み
    リポジトリとワークプレースを起動すると(2)で示したエージェントがリポジトリ上に読み込まれる。

       リポジトリ   




     Simple 
      
     ワークプレース 

     _interface  (ACLエディタ) 
        
     CnpManager.xxx... 
    全てのエージェント名が既知であり、同じリポジトリ上に存在しているものとする。

     2. リポジトリ上での確認
    ここで、 Simple のインスペクタを開くと以下のように表示される。

    □    Simple    
     File  Edit  Fact  Engine - □ non-stop Action
      RuleSet
    Dash-Org
    8行目の記述によって読み込まれたルールセット。
    27〜30行目のルールによってアクティブになって
    いるので文字が赤くなっている。

    _default

      RuleList






      Simple.dash

    (agent Simple
    ...



      WorkingMemory
    Rule-set :active (Dash-Org) :not-active (_default) :all (_default Dash-Org))
    (Msg :performative __INIT_C :content (INIT))
    (Members :manager null)
    (Status :cname Simple :name Simple :environment r1:_localhost :origin r1:_localhost) 
    (create :author "太郎@ieice" :date "Apr. 15, 2000")
      output  











      Variables
    waiting...



     3. メッセージの送信
    次に、 [acl-editor] タブの各空欄に以下のように入力し、 [Send] ボタンを押す。

    :performative
    directed-award
    :to
    CnpManager
    :content
    (request :to Simple :content (task :name Simple))
     Send 

    :contentの内容について
    :to Simple
    この属性に、本当に依頼をしたいエージェント名を記述する。
    :content (task :name Simple)
    (2.1)の36行目の :task 属性と同じ内容を記述する。Simpleには、この記述が そのまま渡される。

     4. 直接落札の送信
    以下のように直接落札(directed-award)メッセージが送信される。

       リポジトリ   






     Simple 











     <--[ directed-award ]-- 
     ワークプレース 

     _interface  (ACLエディタ) 
    |
    [ directed-award ]
     CnpManager.xxx... 

     5. タスク実現可能性の判断
    (2.1)の35〜39行目のルールが発火する。依頼されたタスクは実現可能なので 拒否(refusal)メッセージは送信しない。

     6. 落札の送信
    一定時間経過後、 CnpManager から落札(award)メッセージが送信される。

       リポジトリ   



     Simple 










     <--[ award ]-- 

     ワークプレース 

     _interface  (ACLエディタ) 
     CnpManager.xxx... 
     
     

     7. インスタンシエート
    エージェントSimpleがインスタンシエートを行い,ワークプレースにSimple.xxx...が生成される.

       リポジトリ   






     Simple 











     --[ _createInstance ]--> 

     <--[ createdInstance ]-- 
     ワークプレース 

     _interface  (ACLエディタ) 
     CnpManager.xxx... 
     Simple.yyy... 
     

     8. 動作可能の送信
    エージェントSimpleから動作可能(acceptance)メッセージが送信され、 CnpManagerは結果を出力する。

       リポジトリ   



     Simple 












     --[ acceptance ]--> 
     ワークプレース 

     _interface  (ACLエディタ) 
     CnpManager.xxx... 
     Simple.yyy... 
     

    CnpManagerが出力する結果
    From: [CnpManager] Message: [インスタンシエートに成功しました。

     9. インスタンシエートの完了
    ワークプレースに生成されたエージェントに対して、例題の request-information メッセージが 送信可能な状態になる。



    Last modified: Fri Jan 24 17:18:28 JST 2003

    前のページに戻る ]   [ インデックスへ ]   [ 次の例題に進む ]