ベンチマーク関数

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 最適集合

Gaussian

K

N

なし

最大化

\([-2, 2]^{N}\)

\(\text{convex hull of the centers } \boldsymbol{c}_n \text{ (for } w_n = w \text{)}\)

FonsecaFleming

Binh3, VLMOP2 (探索範囲 \([-2, 2]^{N}\))

2

N(既定 2)

なし

最小化

\([-4, 4]^{N}\)

\(x_1 = \cdots = x_N \in [-1/\sqrt{N}, 1/\sqrt{N}]\)

Viennet

VLMOP3

3

2

なし

最小化

\([-3, 3]^{2}\)

BinhKorn

2

2

あり

最小化

\([0, 5] \times [0, 3]\)

\(x_1 = x_2 \in [0, 3];\ x_1 \in [3, 5], x_2 = 3\)

SRN

Binh2, ChankongHaimes

2

2

あり

最小化

\([-20, 20]^{2}\)

KitaYabumotoMoriNishikawa

Binh4

2

2

あり

最大化

\([0, 7]^{2}\)

\(x_1 \in [0, 3],\ x_2 = 13/2 - x_1/6\)

Binh1

2

2

なし

最小化

\([-5, 10]^{2}\)

\(x_1 = x_2 \in [0, 5]\)

Binh5

2

2

なし

最小化

\([0.1, 1] \times [0, 1]\)

Binh6

2

4

なし

最小化

\([-3, 3]^{4}\)

\(x_3 = x_4 = 1\ (x_1, x_2 \text{ arbitrary})\)

Binh8

2

2

なし

最小化

\([0, 1]^{2}\)

\(x_1 \in [0, 1],\ x_2 = 0\)

Binh9

2

2

なし

最小化

\([0, 1]^{2}\)

Kursawe

2

3

なし

最小化

\([-5, 5]^{3}\)

Schaffer1

VLMOP1

2

1

なし

最小化

\([-10, 10]\)

\(x \in [0, 2]\)

Schaffer2

2

1

なし

最小化

\([-5, 10]\)

\(x \in [1, 2] \cup [4, 5]\)

Poloni

2

2

なし

最大化

\([-\pi, \pi]^{2}\)

ZDT1

2

N(既定 30)

なし

最小化

\([0, 1]^{N}\)

\(x_1 \in [0, 1],\ x_i = 0\ (i \ge 2)\)

ZDT2

2

N(既定 30)

なし

最小化

\([0, 1]^{N}\)

\(x_1 \in [0, 1],\ x_i = 0\ (i \ge 2)\)

ZDT3

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)\)

ZDT4

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)\)

ZDT6

2

N(既定 10)

なし

最小化

\([0, 1]^{N}\)

\(x_1 \in [0, 1],\ x_i = 0\ (i \ge 2)\)

OsyczkaKundu

2

6

あり

最小化

\([0, 10] \times [0, 10] \times [1, 5] \times [0, 6] \times [1, 5] \times [0, 10]\)

ConstrEX

2

2

あり

最小化

\([0.1, 1] \times [0, 5]\)

単目的関数

大域最小点と最小値は最小化問題 (test_maximizer=False) としての値です。 変数の数を変えられる関数については、既定の変数の数での値を示しています。

クラス

別名

変数の数

制約

既定の探索範囲

大域最小点

最小値

Sphere

N(既定 2)

なし

\([-5, 5]^{N}\)

\((0, 0)\)

\(0\)

Rastrigin

N(既定 2)

なし

\([-5.12, 5.12]^{N}\)

\((0, 0)\)

\(0\)

Ackley

N(既定 2)

なし

\([-32.768, 32.768]^{N}\)

\((0, 0)\)

\(0\)

Rosenbrock

N(既定 2)

なし

\([-5, 10]^{N}\)

\((1, 1)\)

\(0\)

Beale

2

なし

\([-4.5, 4.5]^{2}\)

\((3, 0.5)\)

\(0\)

Booth

2

なし

\([-10, 10]^{2}\)

\((1, 3)\)

\(0\)

Matyas

2

なし

\([-10, 10]^{2}\)

\((0, 0)\)

\(0\)

Himmelblau

2

なし

\([-5, 5]^{2}\)

\((3, 2),\ (-2.8051, 3.1313),\ (-3.7793, -3.2832),\ (3.5844, -1.8481)\)

\(0\)

ThreeHumpCamel

2

なし

\([-5, 5]^{2}\)

\((0, 0)\)

\(0\)

Easom

2

なし

\([-100, 100]^{2}\)

\((3.1416, 3.1416)\)

\(0\)

StyblinskiTang

N(既定 2)

なし

\([-5, 5]^{N}\)

\((-2.9035, -2.9035)\)

\(-78.3323\)

Schaffer2

2

なし

\([-100, 100]^{2}\)

\((0, 0)\)

\(0\)