エージェント指向プログラミング

エージェント指向プログラミング
(AOP: Agent Oriented Programming)
エージェント: メッセージパッシングによって互いに通信を行い、自律的かつ並
行実行的に動作するコンピュータシステム上のプロセス
AOPの構成要素
(a) エージェントの状態や機能(仕様)を表現する論理体系
---> 目標、信念、責務などの心的状態、および
時間概念を含む様相論理の体系
(b) エージェントプログラミング(記述)言語とその処理系
---> Agent-0(言語)とその処理系
(c) 設計仕様からエージェントを生成するエージェント化機構
---> 明確な解は与えられていない
Y.Shoham, "Agent-oriented Programming", Artificial Intelligence, 60(1), pp.51-92, Elsevier, 1993.
© Tetsuo Kinoshita
1
心的状態の表現
・認識している事柄や知識
・処理目標(達成したいこと)や処理しなければならない事柄
・選択可能/実行可能な動作
[AOPで導入されたオペレータ]
・時刻(Time): 各記述に付与される離散時間による指標
holding(t; robot; cup)
・動作(Action): エージェントの振る舞いやその結果
raise-arm(t; robot)
・信念(Belief): エージェントaが時刻tで事柄fが成立すると信じる状態
B(t; a; f)
再帰的な記述:B(3; a; B(10; b; like(7; a,b)))
© Tetsuo Kinoshita
2
心的状態の表現 (続き)
[AOPで導入されたオペレータ](続き)
・責務(Obligation): 時刻tにおいて、エージェントaがエージェントbに対して、ある事柄fの
達成に関する責務を負う(エージェントaが事柄fの達成にコミット)という状態
OBL(t; a,b; f)
・判断(Decision/Choice): 可能な動作の選択肢のひとつを選択する状態
DEC(t; a; f) = OBL(t; a,a; f)
「時刻tにおいてエージェントaが事柄fを選択する」=
「時刻tでエージェントa は、事柄fの成立に関して、自分自身に対して責務を負う」
・能力(Capability): 時刻tで、エージェントaによる事柄fの達成可能であるという状態
(aがfを達成する能力を持っている状態)
CAN(t; a; f)
例: robot が、時刻5の時点で「時刻8にドアが開く」ことが可能と確信している状態: CAN(5; robot; open(8; door))
ABLE(a) = CAN(time(f); a; f)
© Tetsuo Kinoshita
3
Agent-0のプログラム構造
[ エージェントプログラム ]
心的状態(初期状態) Initial Beliefs ::= <fact>* 能力(動作) コミットメントルール
Capabilities ::= ( <action> <mntlcond> )*
Commitment Rules ::= <commitrule>*
・事実: <fact> ::= ( <time> ( <predicate> <arg>*) )
例: (10 (Employee Smith G))
・能力: Capabilities ::= ( <action> <mntlcond> )*
© Tetsuo Kinoshita
<mntlcond>
(B <fact>) : 信念の記述
((CMT <agent>) <action>) : 責務の記述
(NOT <mntlpattern>) : 心的状態パターンの否定形
4
・動作プリミティブと通信プリミティブ
エージェント動作
固有動作 (DO <time> <privateaction>)
条件付き動作 (IF <mntlcond> <action>)
動作抑制 (REFRAIN <action>)
エージェント間通信
情報通知 (INFORM <time> <agent> <fact>)
情報要求 (REQUEST <time> <agent> <action>)
要求無効化 (UNREQUEST <time> <agent> <action>)
例: (INFORM 5 a (DO 8 update-database))
(REQUEST 1 a (REQUEST 5 b (INFORM 10 c fact)))
© Tetsuo Kinoshita
5
・コミットメントルール
心的状態とメッセージに基づくエージェントの振る舞い
(COMMIT <msgcond> <mntlcond> (<agent> <action>)* )
例: (COMMIT (?a REQUEST ?action)
(B (now (myfriend ?a)))
( ?a ?action) )
内容;
if エージェント?aから処理?actionに関する要求を受信
そのとき(now)?aが友人であると信じている
then エージェント?aから依頼された処理?actionを実行
© Tetsuo Kinoshita
6
Agent-0のインタプリタ
心的状態と能力の初期化
コミットメントルールの定義
メッセージ(入力)
心的状態の更新
クロック
データベース
心的状態
信念の更新
信念
責務
責務の更新
コミットメントルール
の実行
© Tetsuo Kinoshita
能力
メッセージ(出力)
7
Agent-0の特徴
・エージェントプログラム:心的状態の変更規則を表現したコミットメントルール.
・エージェント間通信:発話行為(speech act)理論[Austin62]に基づく通信プリ
ミティブ(通知、情報要求、反復など)に基づく.
・エージェントプログラムは、クロック同期型のインタプリタによって解釈・実行.
・コミットメントルールによる心的状態の変更によって処理(推論)を実行.
心的状態そのものに関する推論は行わない.
Austin, J. L., “How to Do Things with Words”, Oxford University Press, 1962.
Searle, J. R., “Speech Acts”, Cambridge University Press, 1969.
© Tetsuo Kinoshita
8
適用例: 航空券予約カウンタの処理
航空会社の職員(airline)と顧客(smith)
[職員エージェントのプログラム]
・搭乗券発行: (issue-bp pass flightnum time) ・・・ 簡略表記
その意味内容を詳細表記で記述すれば・・・
(IF (AND (B ((- time h) (present pass)) )
(B (time (flight ?from ?to flightnum))) )
(DO time-h (physical-issue-bp pass flightnum time)) )
搭乗便の出発時間の一時間以上前の時点で、
まだ座席の割り当てが済んでいないとき、搭乗券を発行する
・質問: (query-which t asker askee q)
・確認: (query-whether t asker askee q)
© Tetsuo Kinoshita
9
・発券: ((issue_bp ?a ?flight ?time) true)
顧客(?a)の搭乗便(?flight)への発券が可能と信ずるとき発券処理実行
・座席情報更新:
( (DO ?time (update_remaining_seats
?time1 ?flight_number ?additional_seats))
(B (?time (remaining_seats ?time1
?flight_number ?current_seats))) )
搭乗便(?flight_number)の座席情報を更新(update_remaining_seats)し、
その時点での空席状況(remaining_seats)を信念として記憶
© Tetsuo Kinoshita
10
・問い合わせ処理(コミットメントルール):
(COMMIT (?pass REQUEST
(IF (B ?p) (INFORM ?t ?pass ?p)) )
true
(?pass (IF (B ?p)
(INFORM ?t ?pass ?p))) )
顧客(?pass)から、事柄(?p)に関する問い合わせがあり、
それに答えられる場合には、顧客に回答を返す
注) (COMMIT <msgcond> <mntlcond> (<agent> <action>)* )
© Tetsuo Kinoshita
11
・発券処理(コミットメントルール):
(COMMIT (?cust REQUEST (issue-bp ?pass ?flight ?time))
(AND (B (?time (remaining_seats ?flight ?n)))
(?n > 0)
(NOT ((CMT ?anyone)
(issue_bp ?pass ?anyflight ?time))) )
(myself (DO (+ now 1)
(update_remaining_seats ?time ?flight -1)))
(?cust (issue_bp ?pass ?flight ?time)) )
顧客(?cust)からの発券依頼(出発便?flight)があり、
その便に空席があり、その予約が確認されれば、
職員(myself)は、座席情報を更新して発券する
© Tetsuo Kinoshita
12
動作例
Agent
Action
3月1日 予約カウンタにて
smith
(query-which 1march/1:00 smith airline (18april/?!time
(flight sf ny ?!num)))
4月18日、SFからNYへの便はありますか.
airline
(INFORM 1march/2:00 smith (18april/8:30 (flight sf ny #354)))
8時30分発354便があります.
airline
(INFORM 1march/2:00 smith (18april/10:00 (flight sf ny #293)))
10時発293便があります.
airline
(INFORM 1march/2:00 smith (18april/ ...
・・・
© Tetsuo Kinoshita
13
Agent
Action
smith
(REQUEST 1march/1:00 airline (issue-bp smith #354 18april/8:30))
じゃあ、354便にしよう.
smith
(query-whether 1march/4:00 smith airline
((CMT smith) (issue-bp smith #354 18april/8:30)))
354便にブッキングしてください.
airline
(INFORM 1march/5:00 smith airline
(NOT ((CMT smith) (issue-bp smith #354 18april/8:30))))
354便は満席です.
smith
(REQUEST 1march/6:00 airline (issue-bp smith #293 18april/10:00))
じゃあ、293便にしよう.
smith
(query-whether 1march/7:00 smith airline
((CMT smith) (issue-bp smith #293 18april/10:00)))
293便にブッキングしてください.
airline
(INFORM 1march/8:00 smith
((CMT smith) (issue-bp smith #293 18april/10:00)))
了解しました.
© Tetsuo Kinoshita
14
Agent
Action
・・・
4月18日 空港カウンタにて
smith
(INFORM 18april/9:00 airline (present smith))
293便に予約しているスミスですが・・・
airline
(DO 18april/9:00 (issue-bp smith #293 18april/10:00)))
確認しました.293便の搭乗券をどうぞ.
© Tetsuo Kinoshita
15
エージェントプログラミングの性質
概念
抽象化概念
構成要素と
その特性
動作モデル
設計モデル/
アーキテクチャ
© Tetsuo Kinoshita
手続き型言語
型
命令、データ
静的
手続き/呼び出し
計算(機能)
機能階層
オブジェクト指向言語
エージェント言語
クラス
社会, チーム
オブジェクト
エージェント
静的
動的、目標指向
メッセージパッシング、
メッセージ交換、
メソッド起動
生成/活性化
計算主体、相互関係、
タスク(問題)、組織、
継承、多重視点 協調分散問題解決
16