ベンチマーク関数
PHYSBO には、最適化アルゴリズムを試したり比較したりするためのベンチマーク(テスト)関数が
physbo.test_functions に用意されています。
以下の表は、関数を選ぶ際に必要な性質をまとめたものです。
各関数の定義、参考文献、超体積の計算に用いる参照箱は API リファレンス
(physbo.test_functions.multi_objective および
physbo.test_functions.single_objective) に記載されており、
表のクラス名からリンクされています。
使い方
テスト関数オブジェクトは形状 (n, dim) の点の配列に対して呼び出すことができ、
形状 (n, nobj) の配列を返します。
また、探索範囲 (min_X, max_X)、制約によるフィルタ (constraint)、
制約を適用した格子点の生成 (make_grid)、多目的関数では超体積の参照箱
(reference_min, reference_max) を提供します。
import physbo
fn = physbo.test_functions.multi_objective.SRN()
X = fn.make_grid(101) # 制約を満たす候補点
Y = fn(X) # 形状 (N, 2)
# ... 探索の後 ...
vid = res.pareto.volume_in_dominance(fn.reference_min, fn.reference_max)
各関数は、従った文献と同じ向き(最小化または最大化)で実装されています
(表の「原著の向き」の列)。
PHYSBO は目的関数を最大化するので、テスト関数が返す値は既定
(test_maximizer=True) では最大化問題として表されます。
最小化問題の関数は符号を反転した値が、最大化問題の関数はそのままの値が返ります。
test_maximizer=False を指定すると、最小化問題としての値が返ります。
参照箱も同じ規約に従います。
多目的関数
別名の探索範囲は、「別名」の列に注記がない限り、参照先のクラスと同じです。 Pareto 最適集合は、閉じた形で知られているものについて記載しています。
クラス |
別名 |
目的数 |
変数の数 |
制約 |
原著の向き |
既定の探索範囲 |
Pareto 最適集合 |
|---|---|---|---|---|---|---|---|
K |
N |
なし |
最大化 |
\([-2, 2]^{N}\) |
\(\text{convex hull of the centers } \boldsymbol{c}_n \text{ (for } w_n = w \text{)}\) |
||
2 |
N(既定 2) |
なし |
最小化 |
\([-4, 4]^{N}\) |
\(x_1 = \cdots = x_N \in [-1/\sqrt{N}, 1/\sqrt{N}]\) |
||
3 |
2 |
なし |
最小化 |
\([-3, 3]^{2}\) |
|||
2 |
2 |
あり |
最小化 |
\([0, 5] \times [0, 3]\) |
\(x_1 = x_2 \in [0, 3];\ x_1 \in [3, 5], x_2 = 3\) |
||
2 |
2 |
あり |
最小化 |
\([-20, 20]^{2}\) |
|||
2 |
2 |
あり |
最大化 |
\([0, 7]^{2}\) |
\(x_1 \in [0, 3],\ x_2 = 13/2 - x_1/6\) |
||
2 |
2 |
なし |
最小化 |
\([-5, 10]^{2}\) |
\(x_1 = x_2 \in [0, 5]\) |
||
2 |
2 |
なし |
最小化 |
\([0.1, 1] \times [0, 1]\) |
|||
2 |
4 |
なし |
最小化 |
\([-3, 3]^{4}\) |
\(x_3 = x_4 = 1\ (x_1, x_2 \text{ arbitrary})\) |
||
2 |
2 |
なし |
最小化 |
\([0, 1]^{2}\) |
\(x_1 \in [0, 1],\ x_2 = 0\) |
||
2 |
2 |
なし |
最小化 |
\([0, 1]^{2}\) |
|||
2 |
3 |
なし |
最小化 |
\([-5, 5]^{3}\) |
|||
2 |
1 |
なし |
最小化 |
\([-10, 10]\) |
\(x \in [0, 2]\) |
||
2 |
1 |
なし |
最小化 |
\([-5, 10]\) |
\(x \in [1, 2] \cup [4, 5]\) |
||
2 |
2 |
なし |
最大化 |
\([-\pi, \pi]^{2}\) |
|||
2 |
N(既定 30) |
なし |
最小化 |
\([0, 1]^{N}\) |
\(x_1 \in [0, 1],\ x_i = 0\ (i \ge 2)\) |
||
2 |
N(既定 30) |
なし |
最小化 |
\([0, 1]^{N}\) |
\(x_1 \in [0, 1],\ x_i = 0\ (i \ge 2)\) |
||
2 |
N(既定 30) |
なし |
最小化 |
\([0, 1]^{N}\) |
\(x_1 \in [0, 0.083] \cup [0.182, 0.258] \cup [0.409, 0.454] \cup [0.618, 0.653] \cup [0.823, 0.852],\ x_i = 0\ (i \ge 2)\) |
||
2 |
N(既定 10) |
なし |
最小化 |
\(x_1 \in [0, 1],\ x_i \in [-5, 5]\ (i \ge 2)\) |
\(x_1 \in [0, 1],\ x_i = 0\ (i \ge 2)\) |
||
2 |
N(既定 10) |
なし |
最小化 |
\([0, 1]^{N}\) |
\(x_1 \in [0, 1],\ x_i = 0\ (i \ge 2)\) |
||
2 |
6 |
あり |
最小化 |
\([0, 10] \times [0, 10] \times [1, 5] \times [0, 6] \times [1, 5] \times [0, 10]\) |
|||
2 |
2 |
あり |
最小化 |
\([0.1, 1] \times [0, 5]\) |
単目的関数
大域最小点と最小値は最小化問題 (test_maximizer=False) としての値です。
変数の数を変えられる関数については、既定の変数の数での値を示しています。
クラス |
別名 |
変数の数 |
制約 |
既定の探索範囲 |
大域最小点 |
最小値 |
|---|---|---|---|---|---|---|
N(既定 2) |
なし |
\([-5, 5]^{N}\) |
\((0, 0)\) |
\(0\) |
||
N(既定 2) |
なし |
\([-5.12, 5.12]^{N}\) |
\((0, 0)\) |
\(0\) |
||
N(既定 2) |
なし |
\([-32.768, 32.768]^{N}\) |
\((0, 0)\) |
\(0\) |
||
N(既定 2) |
なし |
\([-5, 10]^{N}\) |
\((1, 1)\) |
\(0\) |
||
2 |
なし |
\([-4.5, 4.5]^{2}\) |
\((3, 0.5)\) |
\(0\) |
||
2 |
なし |
\([-10, 10]^{2}\) |
\((1, 3)\) |
\(0\) |
||
2 |
なし |
\([-10, 10]^{2}\) |
\((0, 0)\) |
\(0\) |
||
2 |
なし |
\([-5, 5]^{2}\) |
\((3, 2),\ (-2.8051, 3.1313),\ (-3.7793, -3.2832),\ (3.5844, -1.8481)\) |
\(0\) |
||
2 |
なし |
\([-5, 5]^{2}\) |
\((0, 0)\) |
\(0\) |
||
2 |
なし |
\([-100, 100]^{2}\) |
\((3.1416, 3.1416)\) |
\(0\) |
||
N(既定 2) |
なし |
\([-5, 5]^{N}\) |
\((-2.9035, -2.9035)\) |
\(-78.3323\) |
||
2 |
なし |
\([-100, 100]^{2}\) |
\((0, 0)\) |
\(0\) |