例題9 直接落札による組織構成

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

  • (1)概要

    直接落札メッセージ(directed-award)のみを用いたエージェント組織の構成方法について述べる。

    (2)エージェント

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

       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

    (2.1)Sample090

       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)組織構成のための知識記述を参照。
    ※「Sample091.dash」は、エージェント名と機能名を変更しただけなので省略する。

    (2.2)Sample092

       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)ファクトを生成しない。
    ※「Sample093.dash」,「Sample094.dash」は、エージェント名と機能名を変更しただけなので省略する。

    (3)起動方法

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

      :performative
      directed-award
      :to
      CnpManager
      :content
      (request :to Sample090 :env "r1:ホスト名" :content (task :name manager))
        Send  
    ●何が起きるか?
    1. 「CnpManager」から「Sample090」に対して直接落札が送信された後、 (2)で記述した分割内容に従って、「Sample091」〜「Sample094」に対して直接落札が送信される。 落札(award)メッセージを受信したエージェントから順にインスタンシエートされる。
    2. ワークプレースに、エージェントが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: ワークプレースに生成されたエージェントが出力したメッセージ。
      ※生成時刻やホスト名は環境によって異なるので、上記の出力例とは同じにならない場合がある。

    (4)用語

    本組織構成プロトコルを用いると階層的な木構造の組織を構成することができる。
    上記の例では階層は2層だが、2層以上の階層も可能である。
    マネージャ、メンバ
    あるタスクTを担当する組織構成エージェントAは、 タスクTを複数のサブタスクt1, t2, ..., tnに分割し、 それぞれのサブタスクをエージェントa1, a2, ..., anに担当させる。 このとき、 Aから見たa1, a2, ..., anをメンバと呼ぶ。 また、a1, a2, ..., anから見たAをマネージャと呼ぶ。

    ルールセット「Dash-Org
    DASH/S知識のときに存在したプリミティブエージェントや組織構成エージェントといった区別はなく、 全てのエージェントは、同じルールセットをインクルードする。 分割を必要とするタスクが記述されていないエージェントはメンバにしかなれないが、記述されている場合は、 状況によってマネージャやメンバになる。

    直接落札(directed-award)と拒否(refusal)メッセージ
    タスク実現可能性の判断においてタスク分割を行い、その依頼を直接落札で行った場合、いずれかのメンバから一定時間内に拒否メッセージが送られてこなければ,サブタスクは実現可能であると判断する。以降は、上位マネージャから落札(award)メッセージが送られてくるまで待機する。

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

    マネージャとなるリポジトリエージェントがメンバを呼び出す方法には、 (1)直接落札による方法と、(2)タスク通知による方法の2種類がある。 本例題では(1)について説明している。(2)については例題10で述べる。

    タスクを分割するには、ルールのアクション部において必要な数だけ(decompose)ファクトを生成する。 分割する必要がない場合は、何も記述しない。以下に、(decompose)ファクトの各属性値について述べる。
    :id
    タスク識別子。プロトコルによって自動的に割り振られるので、特定の値を記述する必要はない。

    :to
    タスクを依頼するエージェント名。

    :env
    上記のエージェントが存在するリポジトリ名。「null」を記述した場合、 自身が存在するリポジトリ内にいるものと仮定して送信される。

    :task
    分割したタスクの内容。OAV形式で記述し、機能名である「:name」属性は、 必ず付加する。また機能名は、重複しないように気をつける。その他の属性については、 目的に応じて任意に付加できる。

    :wait
    待ち時間(ミリ秒)。入札待ちや拒否待ちでタイムアウトするまでの時間を設定する。 分割したタスク毎に異なる値を設定できる。

    :wp
    インスタンシエート先のワークプレース名。ただし、メンバ側でインスタンシエートに 関するルールが記述されていた場合は、そちらが優先される。「null」を記述した場合、 上位のマネージャから指定されたワークプレース名になる。
    送信先のエージェント名と環境名の組合せ表
      エージェント名     環境名     メッセージ形式     :to     :env  
    分らない  分らない  タスク通知 null null
    分かる  リポジトリ名 
    分かる 分らない 直接落札  エージェント名  null
    分かる リポジトリ名

    ※(decompose)ファクトを記述した順に契約が成立するわけではないので、 ある分割タスクが不成立だった場合、それ以降に書かれている(decompose)ファクトで 条件を変えて依頼をするといったことはできない。
    (これを実現するには、改めて依頼をする必要があり、CnpManagerに相当するエージェントを 別途作成しなければならない。)
    ※複数に分割したタスクのどれか1つでも不成立だった場合は、全体が不成立となる。

    (6)初期ファクト

    本プロトコルを使用した場合、ワークプレースエージェントの生成直後に ワーキングメモリ内に自動的に生成されるファクトについて説明する。 これらはエージェントインスペクタで確認できる。
    (Members :manager マネージャ名 :contractor ())
    マネージャ名を保持するファクト。メンバの場合、ワークプレース上のマネージャ名になるが、 「CnpManager」から直接メッセージを受けたエージェントについては、 「CnpManager」に依頼したエージェント名が入る(上記の例では、「_interface」)。

    Last modified: Fri Jan 24 21:52:27 JST 2003

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