ビルトインコンポーネントを選んで差し替える#
前提は、高レベルAPIまたは Optimizer の実行経路を使うことです。
このページでできるようになること
このページを終えると、変更したい責務に対応するビルトインコンポーネントを選び、適切な差し替え点へ渡せます。
構成要素の索引は 最適化の構成要素 で、独自コンポーネントが必要な場合は 独自Component を参照します。
importの方針は Canonical Imports にまとめています。
変更したい責務から選ぶ#
コンポーネントは、同じ処理の別実装を選ぶための差し替え点です。AcquisitionFunctionとSurrogateManagerは独立した差し替え点であり、一方が他方を内包することはありません。
このページでできるようになること |
このページでできるようになること |
参照先 |
|---|---|---|
このページでできるようになること |
|
|
このページでできるようになること |
|
|
このページでできるようになること |
|
|
このページでできるようになること |
|
|
このページでできるようになること |
|
|
真の評価に送るサロゲート候補の割合または順序 |
|
|
このページでできるようになること |
|
高レベル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()を直接呼び出すこともできます。ビルトインコンポーネントで責務を満たせない場合に限り、独自コンポーネントの実装へ進みます。