ブラックボードパターンは、複数の独立したコンポーネントが協力して問題を解決するためのデザインパターンです。このパターンは、知識を共有する「黒板」を中心に、異なるアルゴリズムや戦略を持つコンポーネントが集まり、協力して情報を処理します。主に、人工知能やエキスパートシステムの分野で使用されることが多いです。
ブラックボードパターンには以下の主要な構成要素があります。
以下は、ブラックボードパターンをPythonで実装した簡略化した例です。この例では、気象データを処理する複数のワーカーが存在します。
class BlackBoard:
def __init__(self):
self.data = {}
def update_data(self, key, value):
self.data[key] = value
def get_data(self, key):
return self.data.get(key, None)
BlackBoard
クラスは、共有データを格納するためのクラスです。update_data
メソッドでデータを更新し、get_data
メソッドでデータを取得します。class TemperatureWorker:
def __init__(self, blackboard):
self.blackboard = blackboard
def process(self):
# 温度データを計算・更新
temperature = 25 # 例として固定値
self.blackboard.update_data('temperature', temperature)
print(f'Temperature updated to {temperature}°C')
class HumidityWorker:
def __init__(self, blackboard):
self.blackboard = blackboard
def process(self):
# 湿度データを計算・更新
humidity = 60 # 例として固定値
self.blackboard.update_data('humidity', humidity)
print(f'Humidity updated to {humidity}%')
TemperatureWorker
と HumidityWorker
クラスは、異なる種類のデータを処理するワーカーです。process
メソッドを持ち、ブラックボードにデータを更新します。class Controller:
def __init__(self, blackboard):
self.blackboard = blackboard
self.workers = [
TemperatureWorker(blackboard),
HumidityWorker(blackboard)
]
def run(self):
for worker in self.workers:
worker.process()
Controller
クラスは、ワーカーを管理する役割を果たします。run
メソッドは、すべてのワーカーの process
メソッドを呼び出します。以下のコードを実行して、ブラックボードパターンの動作を確認できます。
if __name__ == "__main__":
blackboard = BlackBoard()
controller = Controller(blackboard)
controller.run()
# ブラックボードのデータを表示
print("Blackboard Data:", blackboard.data)
if __name__ == "__main__":
ブロックで、プログラムのエントリーポイントを定義します。BlackBoard
と Controller
をインスタンス化し、コントローラーを実行します。ブラックボードパターンは、異なるコンポーネントが協力して問題を解決するための強力な手法です。このパターンを使用することで、モジュール性と拡張性を高めることができます。サンプルコードを通じて、ブラックボードパターンの基本的な実装を理解できたでしょう。実際のアプリケーションに応じて、ワーカーの数や種類を増やしたり、ブラックボードのデータ構造を拡張したりすることができます。