実行と評価#
既存のStageベース経路では、Initializerが初期集団を作り、OptimizationStrategyが世代ごとの処理を進めます。 Algorithmが候補を生成し、SurrogateManagerとAcquisitionFunctionが予測とスコア計算を行った後、Evaluatorが高コストな真の評価を実行します。 評価結果はAlgorithmの集団とArchiveへ反映され、Terminationが停止条件を満たすまで世代処理を繰り返します。
パイプラインの流れ#
次の図は、初期化から終了判定までのデータの流れを示します。 Surrogateを使わない構成では、予測とスコア計算の部分を省略できます。
flowchart TD
INIT["Initializer<br/>Create initial population"] --> STEP
subgraph STEP["OptimizationStrategy.step()<br/>Process one generation"]
direction TB
ASK["Algorithm.ask()<br/>Generate candidates"] --> PREDICT["SurrogateManager.predict()<br/>Predict"]
PREDICT --> SCORE["AcquisitionFunction<br/>Score candidates"]
SCORE --> SEL["Select candidates for true evaluation"]
SEL --> EVAL["Evaluator → Problem<br/>Expensive evaluation"]
EVAL --> TELL["Algorithm.tell()<br/>Update population"]
end
STEP --> TERM{"Termination?"}
TERM -- "No" --> STEP
TERM -- "Yes" --> RESULT([Result])
EVAL -- "Evaluated points" --> ARC[("Archive")]
ARC -. "Training data" .-> PREDICT
各StageはCallbackManagerを通じて型付きイベントを発行します。 そのため、Stageをサブクラス化せずに進行状況を観測したり、実行時の差し替えを行ったりできます。
コンポーネントの役割#
コンポーネント |
役割 |
|---|---|
目的関数、設計変数、探索範囲、制約、最適化方向を定義します。 |
|
ループ開始前の初期集団とArchiveを生成します。 |
|
|
|
一世代の処理を組み立て、真の評価へ送る候補を決めます。 |
|
Surrogateの学習と予測を調整します。 |
|
学習データから予測します。スコア計算の方法は持ちません。 |
|
予測結果を候補選択用のスコアへ変換します。 |
|
目的関数を逐次または並列に評価します。 |
|
評価済みの個体と集団のデータを保持します。 |
|
世代処理を終了する条件を判定します。 |
|
パイプライン全体のイベントを観測し、記録します。 |
初期集団とArchiveを生成する方法を選びます。
目的関数の逐次評価と並列評価を実行します。
候補生成、予測、評価計画、状態更新の流れを組み立てます。
評価回数や世代数などの終了条件を組み合わせます。