Adopt

Java enabled browser is necessary.

(要JRE1.4)

P. J. Modiらにより提案されたAdopt[1]は分散最適化問題(DCOP)の完全な解法です. この解法では,前処理により各ノードが, 2項制約網に対する深さ優先探索木に従って, 順序付けされていることを前提とします. この順序付けに基づいて分枝限定法に基づく非同期探索を行います. 深さ優先探索木はサブツリー間に制約辺が無いため, 探索に並列性が得られます. また,このような木構造は,非同期分散探索を伴うシステムを検討する上で, 重要であると考えられます. アルゴリズムの概要は次のとおりです. アルゴリズムの詳細は文献[1]を参照してください.

各ノードは, 自ノードの変数値, 親ノードから自ノード以下のサブツリーに割り当てられたコスト値の情報を持ちます. また,上位ノードの部分解および, 現在の上位ノードの部分解に対して子ノードから 通知されたコスト値の上下界の情報を持ちます.

各ノードは自ノード以下のサブツリーのコスト値の上下界を評価し, 現在の変数値における下界値が親から割り当てられたコストを上回るとき, 変数値を変更します.変更された変数値は下位制約関連ノードに同報されます. 評価されたコスト値は親ノードに通知されます. 自ノード以下のサブツリーに割り当てられたコストが, 自ノードまでの部分解で消費されなかったとき, 残りは子ノード以下のサブツリーに配分されます.

上記のバランスをとりつづけるうちに, 根ノードではコスト値の上下界が一致します. このとき,根ノードは自ノードの変数値を上界値に対応する値に設定し, 子ノードに終了を通知します. 子ノードは自ノード以下のサブツリーに割り当てられたコスト値と上界値が一致したとき, 自ノードの変数値を上界値に対応する値に設定し, 子ノードに終了を通知します.これにより,探索は大域的に終了します.

ここでは,文献[1]を参考に実装されたJAVAアプレットを示します. このアプレットは3色の彩色問題を解くデモンストレーションを実行します. 探索の過程における,各ノードの変数値を表示します. また,各ノード以下のサブツリーについて集計されたコスト値の下界l,上界u, および親ノードから配分されたコスト値tを表示します. ここでは簡単のため,システム全体がサイクル動作するものとしています. 各サイクルで各ノードはメッセージの受信,内部処理,メッセージの送信を行います. また,メッセージの遅延は考慮されていません. なお,赤線で示される制約辺は大域的に違反であることを示していますが, 探索の過程では各ノードが知る状態とは合致しないかもしれません.

  1. (1)problemボタンで問題を生成します. ノード数n=10です.制約辺密度d=2,3を選択できます. 生成される問題の制約辺の数はn・dとなります.各制約辺の重みは1です.
  2. (2)treeボタンで深さ優先探索木を生成します.ここまでが前処理です.
  3. (3)Adoptボタンで探索アルゴリズムの初回のサイクルが実行されます. Start/Stopボタンで続きのサイクルが実行/中断されます. Stepボタンで次のサイクルが実行されます. Skipボタンで終了までの処理を待ち時間無しに実行します. Startボタンを押す前に秒あたりのステップ数step/sを設定できます.

参考文献

[1] P. J. Modi, W. Shen, M. Tambe and M. Yokoo, "An Asynchronous Complete Method for Distributed Constraint Optimization," Proc. Autonomous Agents and Multi-Agent Systems, pp.161-168, 2003.