実行と評価#

Cross-layer

既存の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をサブクラス化せずに進行状況を観測したり、実行時の差し替えを行ったりできます。

コンポーネントの役割#

コンポーネント

役割

Problem

目的関数、設計変数、探索範囲、制約、最適化方向を定義します。

Initializer

ループ開始前の初期集団とArchiveを生成します。

Algorithm

ask()で候補を生成し、tell()で評価結果を集団へ反映します。

OptimizationStrategy

一世代の処理を組み立て、真の評価へ送る候補を決めます。

SurrogateManager

Surrogateの学習と予測を調整します。

Surrogate

学習データから予測します。スコア計算の方法は持ちません。

AcquisitionFunction

予測結果を候補選択用のスコアへ変換します。

Evaluator

目的関数を逐次または並列に評価します。

Population

評価済みの個体と集団のデータを保持します。

Termination

世代処理を終了する条件を判定します。

CallbackManager

パイプライン全体のイベントを観測し、記録します。

初期化(Initializer)

初期集団とArchiveを生成する方法を選びます。

Initializer
Evaluator

目的関数の逐次評価と並列評価を実行します。

Evaluator
OptimizationStrategy

候補生成、予測、評価計画、状態更新の流れを組み立てます。

OptimizationStrategy
Termination

評価回数や世代数などの終了条件を組み合わせます。

Termination