🤖Sotware Agentsの協調によるシステム.
🖥エージェント指向プログラミング(AOP)
Agent-Oriented Programming. Multi-Agent Programming. プログラミングパラダイム.
特徴
- 自律性 - エージェントは外部からの直接制御なしに自分自身の行動を決定できます
- 社会性 - エージェント同士が相互作用し、協調・交渉・競争などを行います
- 反応性 - 環境の変化に対して適切に反応する能力を持ちます
- 能動性 - 目標達成のために自発的に行動を起こします
- BDI - エージェントのもつ知識.
BDI
BDI(Belief-Desire-Intention)モデル.
- 哲学者Bratmanが提唱(1987)
- 人間の目的達成に向けての行為選択の説明. 意図の理論.
多くのエージェントシステムでは、信念(環境に関する知識)、欲求(達成したい目標)、意図(実行する計画)という概念が用いられます.
- 信念(belief)
- 願望(desire)
- 意図(intention)
Active Objects Programming(Object-Based Agent)
オブジェクト指向におけるオブジェクトを, 自ら判断し処理できる機能を持ったエージェントと呼ばれるモジュールに置き換えたもの.
Object-Oriented Programming と Multi-Agent Programming の 2 つのパラダイムを合体させてできたパラダイム.
オブジェクトの属性ではなくて振る舞いが重要視される.
English の Wikipedia に OOP と AOP の対応比較表がある.
🖥マルチエージェントデータフロープログラミング
Multi-agent dataflow programmming.
- 📝決定性データフロープログラミングからの発展.
- Concurrency を解決するためのいろいろなパラダイムのなかで, 最強のパラダイムがこれだとピーターバンロイさんはいう. なぜなら, Deterministic Dataflow Programming をベースに, NonDeterminism の制御を機能追加したから.
- Deterministic Dataflow Programming に, Port という明示的状態をくわえた
Distributed System ともいう.
CTMCP, Chapter 5
- up: 📝並行プログラミング
マルチエージェントデータフローの基礎概念
Port
ボート. Named Steram.名前のつけられたストリーム.
以下の操作をもつ, Abstruct Data Structure.
- Port Creation
- Message Sending
- Asyncronize
- Syncronize
Agents
通信モデルは大きく 2 つに分けられる.
- Client-Server Architectures
- Pear-to-Pear Architectures
Client,Server,Pear を Agent という.
以下の構成要素をもつ.
- have identity … mail address
- recieve messages … mailbox
- process messeges … orderd mailbox
- reply to messeges … pre-addressed return letter
エージェントは独立実体で, 自身の局所的な目的を目指して仕事をする. 相互作用が適切に設計されていればエージェントは大局的仕事も達成する.
CTMCP, Chapter 5 より.
Agent をもちいるプログラミングを, Object-Oriented Programming と対比されて, Agent-Oriented Programming ということもある.
ただし, Agent は必ずしも Object でなくてもよい. 2 つのうちのどちらか.
- Object
- Transition state-functions
-
Coordinator
Agent のなかでほかの Agent をまとめる Agent を Coordinator という. 以下の性質をもつ.
- 代理性 ・・・他の Agent の代理をして処理をおこなう. 処理の結果を Agent に通知.
- 知性 ・・・ 他の Agent から情報をあつめを代表して判断を下す.
- 移動性 ・・・他の Agent を代表して判断を下す.
Master (Coordinator)-Slave Archtecture.
-
Stateless Agent
あるメッセージを受信したときに, そのメッセージに応じてアクションをとる Agents. アクションは受信メッセージに依存する.
Agent はひとつのスレッドと複数のポートをもつ. ボートは明示的変数 (Cell) と同義.
この Port 以外は Immutable なデータ構造. Port のみがメモリ上に確保される.
-
State with Agent
ポートの他に State (明示的状態) をもつこともある.
処理の実行自体は Stream データ構造に入った function のプロシージャごとに実施する(Immutable and incremental) が, State によって Reply の方法を変える.
Protocol
Message の送信と受信のルール.
プロトコルにしたがうことで, デッドロックを防ぐ.
-
BroadCast
他の複数のエージェント (Multi-Agent) に通信を送る.
-
Contract Net
契約ネットプロトコル.
Ozma
Multi-agent dataflow programmming を実現するための言語. Scala と Oz を合体させた.
ピーターバンロイさん直々の説明動画は以下で見れる.
github repository. sjrd/ozma