POSA 本でアーキテクチャパターンを勉強しよう(4) - アーキテクチャパターン「混沌から構造へ」より「Blackboard」
- パターンとは何か?
- アーキテクチャパターン「混沌から構造へ」より「Layers(レイヤパターン)」
- アーキテクチャパターン「混沌から構造へ」より「Pipes and Filters」
- アーキテクチャパターン「混沌から構造へ」より「Blackboard」
課題
ブラックボードを採用する前提としては、「分割が必要なシステムであること」「システムへの入力に対して期待される出力を得るための手順が一定ではない」「不確かなデータや近似値などが含まれる」ということが挙げられます。
ブラックボードを採用する際には、以下のフォースのバランスを取る必要があります。
- 問題の計算量が大きい、もしくは負荷が大きい
- 問題解決のための専門知識が多岐にわたって必要となる
- 問題を分割することができる
- あるアルゴリズムは他のアルゴリズムの結果を使用する
- 各アルゴリズムは独立しており、適用順も一定ではない
- アルゴリズムの結果には不確かな値が含まれる
- 分割された処理の並列実行の可能性がある
解決策
ブラックボードは、問題を解決するシステムを複数のコンポーネントに分割します。そして、それらのコンポーネントを共通のデータ構造上で動作させることで、それぞれを独立に動作させつつも、システム全体では問題の解を得られるようにします。各コンポーネントを適切に動作させるために、「司会役」のコンポーネントが登場します。
静的側面
ブラックボードに登場するコンポーネントは以下3種類になります。共通のデータ構造を実現する Blackboard(黒板)、処理を担当する Knowledge Source(知識源)、Blackboard をモニタリングして Knowledge Source をスケジューリングする Control(制御担当)です。
図「Blackboard 静的側面(by Kodougu)」
Blackboard コンポーネントはデータ書庫です。一般的には前述のホワイトボードで説明した Linda のようなシステムを採用します。データを管理する責務(inspect, update)を持ちます。
Knowledge Source コンポーネントは、分割されたそれぞれの問題を、自身が持っている専門領域の知識に従って処理する独立して動作するサブシステムです。システムは、さまざまな Knowledge Source を組み合わせて処理を実行します。Knowledge Source コンポーネントは、Blackboard コンポーネントの状態を見て自身の適用性を判断する責務「executeCondition」、結果を計算する責務「executeAction」、Blackboardを更新する責務「updateBlackboard」を持ちます。
POSA本では、Knowledge Source を条件節(condition-part)と実行節(action-part)に分けています。条件節では、Blackboard 上に貯められた情報を評価して、自身がその情報を処理するかどうか判断します。実行節では、条件節の判断に従って Blackboard の情報を取得して、処理した結果を Blackboard に格納します。
Control は Blackboard 上の変化をモニタして、次にどの Knowledge Source を活性化するのか判断し、実際に活性化を行います。また、資源(処理能力、メモリ資源、時間制約など)に応じたスケジューリングも行います。
POSA本によると、Control の制御戦略も Knowledge Source に委譲する場合があるそうです。その場合、制御情報は黒板に格納されます。また、Controlの設計で注意しなくてはならないことは、ブラックボードを採用したシステムが、どの Knowledge Source を適用してもシステムの求める解を見つけられなくなるような状態に陥ることがあり得るということです。
ブラックボードパターンはホワイトボードパターンと異なり、Control コンポーネントを登場させることによって制御戦略が可視化されていることに注意してください。このコンポーネントは省略可能だと思いますが、本パターンの本質には資源的な制約や解の発見に対する不確実性への対策が含まれているのです。
将棋の手を読むプログラムなどを考えてみましょう。こうしたプログラムがブラックボードを採用するかどうかはわかりませんが、現在の将棋盤上の評価(過去の棋譜との比較など)、次の手の先読みなどの Knowledge Source が考えられます。無限に時間があればいくらでもこうした処理を行うことができますが、ゲームのルール上時間的な制約があります。このため、先読みする数を制限したり、先読みする優先度を決めたりするわけです。Control コンポーネントをこのパターンに登場させた意図は、そういった制御戦略に注目したからと考えられます。
動的側面
POSA本によると、ブラックボードパターンの振る舞いをいかのようなシナリオにして紹介しています。
- Control はメインループを開始する
- Control は次に適用する Knowledge Source を選択する
- Control は Knowledge Source に処理を実行させる
図「Blackboardの動的側面(by Kodougu)」
このサイトについて
TrackBack URL :
