抽象エージェントプログラミング言語、人工自律エージェントプログラミング言語、または3APL(トリプルAPLと発音)は、信念・欲求・意図(BDI)アプローチを使用して複数の認知エージェントを開発、実装、テストするための実験ツールおよびプログラミング言語です。
3APLは、オランダのユトレヒト大学コンピュータサイエンス学科のチームによって開発・保守されています。行動、信念、目標、計画、ルールを用いて認知エージェントの振る舞いを記述することを容易にします。これまでに少なくとも15件の論文や学会発表、そして少なくとも4件の学位論文で取り上げられています。
3APLプラットフォームには、実行中のエージェントの監視とデバッグのためのビジュアルインターフェースと、ソースコード編集のための構文色付けエディタが備わっています。Javaベースのソフトウェアとしてリリースされており、Javaベースのプラグインやライブラリの開発に使用できる仕様Javaインターフェースが付属しています。これらは、例えば仮想環境の視覚的な表現を提供するために使用できます。3APLプラットフォームは、クライアントまたはサーバーの役割でネットワークを介して他の3APLプラットフォームに接続し、各プラットフォーム上の3APLエージェント間の通信を可能にすることもできます。モバイルアプリケーション向けの軽量版3APLである3APL-M「Toymaker」もリリースされています。
3APL言語は比較的シンプルです。構文は、基本的なブール論理演算子AND、OR、NOT、IF-THEN-ELSE条件文、およびWHILE-DO制御フローループ構造を備えています。一時変数はプラグインメソッドまたは信念/目標条件の呼び出し以外では作成できませんが、WHILE-DOループ、信念、および機能の組み合わせを使用して反復カウンタループを構築できます。
3APLエージェントには、エージェントの信念、能力、目標、計画に関する正式な定義が含まれています。具体的には、定義しなければならない6つの基本要素があります。
プログラム「エージェント」 信念基盤 {} 機能 {} ゴールベース {} プランベース {} PGルール {} PRルール {} Prolog構文を用いて定義された信念は、情報を記憶し、論理計算を実行するために使用されます。信念は相互に読み取ることができ、能力によって編集でき、計画内の条件文によって読み取ることができます。エージェントの初期信念は、その信念ベースで定義できます。
信念基盤 { 状態(スタンバイ)。 (0,0)にて。 位置(r1,2,4)。 位置(r5,6,1)。 ダーティ(r1)。 ダーティ(r5)。 } 機能は、 STRIPSのような形式で行動の前提条件と効果を定義し、既存の信念を読み込み、NOT演算子を使用して一部を削除し、新しい信念を記述することによって追加します。
機能 { {status(S1)} SetStatus(S2) {NOT status(S1), status(S2)}, {at(X1,Y1)} NowAt(X2,Y2) {NOT at(X1,Y1), at(X2,Y2)}, {dirty(R)} Clean(R) {NOT dirty(R)} } 目標はProlog構文を用いて定義され、実行時に新しい目標を追加することも可能です。初期目標は目標ベースに定義されます。
ゴールベース { cleanRoom(r1)。 cleanRoom(r5)。 } 理想的には、各目標には関連する目標計画ルール、すなわちPGルールが存在します。PGルールは抽象的な計画として機能し、そのガード条件が満たされている限り、目標から呼び出されます。
PGルール { cleanRoom(R) <- dirty(R) | { SetStatus(cleaning(R)); goTo(R); クリーン(R) SetStatus(standby); } } PGルールは、サブルーチンとして機能する計画改訂ルール(PRルール)を呼び出すことができ、これらのルールは、ガード条件が満たされている限り、下位レベルのタスクや反復的なタスクを実行するために呼び出されます。初期計画は計画ベースで定義され、審議サイクルの開始時に実行されます。
PLANBASE { SetStatus(started); } PRルール { goTo(R) <- location(R,X,Y) AND NOT at(X,Y) | { NowAt(X,Y) } clean(R) <- location(R,X,Y) AND at(X,Y) | { クリーン(R) } } プラグインでモデル化された環境にアクセスするには、外部メソッドを呼び出すことができます。ただし、パラメータをメソッドに直接渡すことはできないため、既知の環境はエージェントの信念の中で適切にモデル化されている必要があります。呼び出しはPrologリストを返し、そのリストはエージェント自身の述語論理によって処理されます。
Java("JanitorWorld", moveNorth(), M); エージェントは、 Sendコマンドを使用して互いに通信することもできます。エージェントAからエージェントBへ、実行Pとともに情報Xが送信されると、送信アクションはAの信念ベースにsent(B,P,X)として記録され、Bの信念ベースにreceived(A,P,X)として登録されます。
Send(Partner,inform,dirty(R));
3APLは、ユトレヒト大学の3APLウェブサイトからダウンロードでき、サンプルとなる単独エージェントと通信エージェント、およびBlockWorldと呼ばれる離散型マルチエージェント前景環境プラグインが同梱されています。