例題11 組織構成プロトコルを用いたエージェントの生成

  • 概要
  • エージェント
  • 起動方法
  • 用語
  • 組織構成のための知識記述

  • (1)概要

    メンバへの落札内容の伝達方法やインスタンシエートに関するルールについて述べる。

    (2)エージェント

    全てのエージェント名が既知であり、同じリポジトリ上に存在しているものとする。

       Sample110   
    |
       Sample111   

    エージェント名 ファイル名 タスク 説明
    Sample110  Sample110.dash    manager     マネージャ  
    Sample111 Sample111.dash member メンバ

    (2.1)Sample110

       1  (agent Sample110
       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 "manager"))
      34        ~(bid :id ?id)
      35        -->
      36        (make (bid :id ?id :content (task :name "manamger")))
      37        (make
      38          (decompose :id   ?id         // 変更不可
      39                     :to   "Sample111" // エージェント名
      40                     :env  "null"      // リポジトリ名
      41                     :wait 3000        // 入札待ちでタイムアウトするまでの時間
      42                     :wp   "null"      // インスタンシエート先のワークプレース名  
      43                     :task (task :name "member")))
      44      )
      45
      46      // インスタンシエート
      47      (rule sample-instantiate
      48        (init :name "null" :facts ()) = ?init
      49        -->
      50        // インスタンシエート先のワークプレース名.
      51        (modify ?init:wp "w1:_localhost")
      52
      53        // インスタンシエート先で必要となるファクト.
      54        (unshift ?init:award ?init:facts)
      55        (unshift (URL :url "foo.example.jp") ?init:facts)
      56
      57        // インスタンシエートする前に必要な処理を記述.
      58      )
      59
      60      // コントラクタ側に落札と一緒に必要な情報を送信.
      61      // インスタンシエート後,かつコントラクタ側に落札を送信する前に発火.
      62      (rule award-check
      63        // ?award : 落札時にマネージャ側から受け取った情報(型に制限はない)
      64        (init :id ?id :award ?award) = ?init
      65        (!= ?init:name "null")
      66        (!= ?init:name "FALSE")
      67        ~(award :id ?id)
      68        -->
      69        // :name    (task :name XXX ...)と対応付ける必要がある.
      70        // :content に必要な情報をリスト形式で記述する.
      71        (make (award :id      ?id
                             :name    "member"
                             :content ((URL :url "bar.sample.jp"))))
      72      )
      73    )
      74  )
    
    51: ここに記述したワークプレース名がインスタンシエート先として優先度が最も高く、固定される。 マネージャ側から指定したい場合は記述しない。 詳しくは、(5)組織構成のための知識記述を参照。
    54: (init)ファクトの:award 属性には、マネージャ側から渡された落札内容が格納されている。
    55: また、複数追加したい場合は、必要な分だけ unshift する。
    71: タスクを複数に分割していた場合は、同ルール内で必要なサブタスクに対してのみ (award)ファクトを生成する。必要無ければ生成しなくてよい。

    (2.2)Sample111

       1  (agent Sample111
       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 "member"))
      34        ~(bid :id ?id)
      35        -->
      36        (make (bid :id ?id :content (task :name "member")))
      37      )
      38    )
      39  )
    

    (3)起動方法

    ●準備
    ●起動
    1. リポジトリとワークプレースを起動する。 起動すると環境モニタが表示される。
    2. リポジトリ上にエージェントが存在しない場合、 環境モニタのメニューから [File] > [Open] を使って、 (2)のエージェントを開く。
    3. ACLエディタを使って、直接落札(directed-award)をCnpManagerに送信する。

      :performative
      directed-award
      :to
      CnpManager
      :content
      (request :to Sample110 :content (task :name manager))
       Send 
    ●何が起きるか?
    1. 「CnpManager」から「Sample110」に対して直接落札が送信された後、 (2.1)で記述した分割内容に従って、「Sample111」に対して直接落札が送信される。 落札(award)メッセージを受信したエージェントから順にインスタンシエートされる。
    2. 一定時間経過後、「CnpManager」から「Sample110」に対して落札(award)が送信される。
    3. ワークプレースに、エージェントが2つ生成され、以下のメッセージが表示される。

         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  エージェント名: Sample110.200211271243229:w1:_localhost
        19  エージェント名: Sample111.200211271243274:w1:_localhost
        20  From: [CnpManager] Message: [インスタンシエートに成功しました。]
        21
      
      16,17: リポジトリに読み込まれたエージェントが出力したメッセージ。
      18,19: ワークプレースに生成されたエージェントが出力したメッセージ。
      ※生成時刻やホスト名は環境によって異なるので、上記の出力例とは同じにならない場合がある。

    4. 生成されたエージェントのインスペクタを開くと、それぞれ(2.1),(2.2)において記述したファクトが 生成されているのがわかる。

      □    Sample110.200211271243229:w1:_localhost    
       File  Edit  Fact  Engine - □ non-stop Action
        RuleSet  
      _default
      Dash-Org

        RuleList



        Sample110.dash

      (agent Sample110

        WorkingMemory
      (Rule-set :active (_default) :not-active (Dash-Org) :all (_default Dash-Org)) 
      (RWP :url r1:_localhost) ← CnpManagerから渡されたファクト
      (URL :url foo.example.jp) ← 55行目で追加したファクト
      (Members :manager _interface :contractor ())
      (Msg :performative __INIT_I :content (INIT))
      ...
        output  











        Variables
      waiting...



      □    Sample111.200211281401234:w1:_localhost    
       File  Edit  Fact  Engine - □ non-stop Action
        RuleSet  
      _default
      Dash-Org

        RuleList



        Sample111.dash

      (agent Sample111

        WorkingMemory
      (Rule-set :active (_default) :not-active (Dash-Org) :all (_default Dash-Org)) 
      (URL :url bar.sample.jp)
       Sample110.dashの71行目で追加したファクト

      (Members :manager Sample110.200211281401220:w1:_localhost :contractor ()) 
       マネージャ名は、依頼元のワークプレース上での名前 

      (Msg :performative __INIT_I :content (INIT))
      ...
        output  














        Variables
      waiting...


    (4)用語

    インスタンシエートと落札内容
    インスタンシエートするためのアクションであるinstantiateは、:factsの値として OAVデータを要素にするリストを指定できる。本プロトコルでは、エージェント自身がインスタンシエートルールの中で記述 する方法とマネージャ側から指定する方法の2つがある。これ以外に、マネージャ名を含む (Members)ファクトが生成される。

    (5)組織構成のための知識記述

    (5.1)インスタンシエートに関するルール  ( (2.1)Sample110の46〜58行目 )

    このルールは、落札メッセージの受信後にインスタンシエートする前に発火するルールである。 次に示す3点について必要であれば記述し、特になければルールを省略できる。

    生成先のワークプレースの優先順位について
    優先度記述箇所:wp(※)説明
     インスタンシエートルール内  (無効) メンバ側エージェントのインスタンシエートルールの中でワークプレース名が 指定されていた場合、インスタンシエートは常に固定となり、最優先される。

     (decompose)ファクト   ワークプレース名  マネージャ側から指定されたワークプレースにインスタンシエートされる。 (decompose)ファクトで記述したワークプレース名がこれに該当する。
     (decompose)ファクト   null  (decompse)ファクト内で指定しなかった場合、上位のマネージャから指定されたワークプレースに インスタンシエートされる。
    (※)マネージャ側のタスク実現可能性を判断するルール内で記述する。具体的には(decompose)ファクトの属性。

    指定したワークプレースが存在しない等の理由によりインスタンシエートに失敗した場合、上位のエージェントに対してエラーメッセージを送信する。また、動作可能(accpetance)メッセージのエージェントリストには、リポジトリにおけるエージェント名が代入される。(→ 組織構成プロトコルのエラーメッセージ)

    (5.2)落札内容に関するルール  ( (2.1)Sample110の60〜72行目 )

    このルールは、インスタンシエートに成功し、メンバとなっているエージェントに対して落札(award)メッセージを送信する前に発火する。メンバ側に伝えたい情報があれば、リスト形式にして内容(:content)属性に格納する。メンバ側では、インスタンシエート時に (init)ファクトの落札(:award)属性から利用することができる。

      1  (rule award-check
      2      (init :id ?id :award ?award) = ?init
      3      (!= ?init:name "null")
      4      (!= ?init:name "FALSE")
      5      -->
      6      (make (award :id ?id :name "tv-conf" :content ()))
      7  )
    
    2: ?award は、落札(award)メッセージと共にマネージャ側から受け取った落札内容。
    3,4: ?init:name は、機能名ではなくエージェント名が以下のように格納される。
    • インスタンシエート前   →   null
    • インスタンシエートに成功   →   ワークプレース上のエージェント名
    • インスタンシエートに失敗   →   FALSE

    6: :name は、該当する機能名を記述し、:content には、必要な情報を記述する。

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

    インデックスへ   前のページに戻る