ビルトインコンポーネントを選んで差し替える#

Layer 2: Compose

前提は、高レベルAPIまたは Optimizer の実行経路を使うことです。

このページでできるようになること

このページを終えると、変更したい責務に対応するビルトインコンポーネントを選び、適切な差し替え点へ渡せます。

構成要素の索引は 最適化の構成要素 で、独自コンポーネントが必要な場合は 独自Component を参照します。

importの方針は Canonical Imports にまとめています。

変更したい責務から選ぶ#

コンポーネントは、同じ処理の別実装を選ぶための差し替え点です。AcquisitionFunctionとSurrogateManagerは独立した差し替え点であり、一方が他方を内包することはありません。

このページでできるようになること

このページでできるようになること

参照先

このページでできるようになること

Algorithm

Algorithm concept、Algorithm reference

このページでできるようになること

Operator

交叉の概念、突然変異の概念、演算子リファレンス

このページでできるようになること

Surrogate

サロゲートモデルの概念、サロゲートモデルの参照

このページでできるようになること

SurrogateManager

SurrogateManager concept、Reference

このページでできるようになること

AcquisitionFunction

AcquisitionFunction concept、Reference

真の評価に送るサロゲート候補の割合または順序

Strategy

Strategyの概念、参照

このページでできるようになること

Comparator

Comparatorの概念、参照

高レベルAPIで交換する#

高レベルAPIでは、algorithm、surrogate、strategyに文字列またはインスタンスを渡します。利用できる文字列は、アルゴリズムが"GA"と"PSO"、Surrogateが"rbf"、Strategyが"ib"、"gb"、"ps"です。

import numpy as np
from saealib import minimize


def objective(x):
    return np.sum(x**2)


result = minimize(
    objective,
    dim=3,
    lb=[-5.0] * 3,
    ub=[5.0] * 3,
    algorithm="PSO",
    strategy="ib",
    max_fe=100,
    seed=0,
    verbose=False,
)

Surrogate単体のインスタンスは内部でLocalSurrogateManagerにラップされます。ManagerやAcquisitionFunctionを個別に構成する場合はOptimizerを使います。

Optimizerで独立した差し替え点を構成する#

Optimizer.set_*()はコンポーネントを独立して構成するためのビルダーです。たとえばset_surrogate_manager()とset_acquisition()は別々に呼び出します。

import numpy as np
from saealib import MeanPrediction, Optimizer, Problem
from saealib.surrogate import GaussianKernel, GlobalSurrogateManager, RBFSurrogate


def objective(x):
    return np.sum(x**2)


problem = Problem(
    objective,
    dim=3,
    n_obj=1,
    direction=np.array([-1.0]),
    lb=[-5.0] * 3,
    ub=[5.0] * 3,
)
manager = GlobalSurrogateManager(RBFSurrogate(kernel=GaussianKernel()))

optimizer = (
    Optimizer(problem, seed=0)
    .set_surrogate_manager(manager)
    .set_acquisition(MeanPrediction())
)

Optimizerに必要な他のコンポーネントは既定値から解決できます。set_*()で構成したコンポーネントと省略したコンポーネントは、run()またはiterate()が既定値を解決した後に検証されます。必要なコンポーネントをすべて明示した場合は、実行前にvalidate()を直接呼び出すこともできます。ビルトインコンポーネントで責務を満たせない場合に限り、独自コンポーネントの実装へ進みます。

関連するConceptとReference#