Source code for smt_optim.benchmarks.multiobj.constrained

import numpy as np

from smt_optim.benchmarks.base import BenchmarkProblem


[docs] class BNH(BenchmarkProblem): def __init__(self): super().__init__() self.name: str = "BNH" self.num_dim: int = 2 self.num_obj: int = 2 self.num_cstr: int = 2 self.num_fidelity = 1 self.tags = [ "multi-obj", ] self.bounds = np.array( [ [0, 5], [0, 3], ] ) # original bounds # bounds = np.array([[-15, 30]] * 2) self.objective = [ self.f1, self.f2, ] self.constraints = [ self.g1, self.g2, ]
[docs] def f1(self, x): return 4 * x[0] ** 2 + 4 * x[1] ** 2
[docs] def f2(self, x): return (x[0] - 5) ** 2 + (x[1] - 5) ** 2
[docs] def g1(self, x): return (x[0] - 5) ** 2 + x[1] ** 2 - 25
[docs] def g2(self, x): return -((x[0] - 8) ** 2) - (x[1] + 3) ** 2 + 7.7
[docs] class TNK(BenchmarkProblem): def __init__(self): super().__init__() self.name: str = "TNK" self.num_dim: int = 2 self.num_obj: int = 2 self.num_cstr: int = 2 self.num_fidelity = 1 self.tags = [ "multi-obj", ] self.bounds = np.array( [ [0, np.pi], [0, np.pi], ] ) self.objective = [ self.f1, self.f2, ] self.constraints = [ self.g1, self.g2, ]
[docs] def f1(self, x): return x[0]
[docs] def f2(self, x): return x[1]
[docs] def g1(self, x): return -(x[0] ** 2) - x[1] ** 2 + 1 + 0.1 * np.cos(16 * np.arctan2(x[0], x[1]))
[docs] def g2(self, x): return (x[0] - 0.5) ** 2 + (x[1] - 0.5) ** 2 - 0.5
[docs] class OSY(BenchmarkProblem): def __init__(self): super().__init__() self.name: str = "OSY" self.num_dim: int = 6 self.num_obj: int = 2 self.num_cstr: int = 6 self.num_fidelity = 1 self.tags = [ "multi-obj", ] self.bounds = np.array( [ [0.0, 10.0], [0.0, 10.0], [0.0, 5.0], [0.0, 6.0], [0.0, 5.0], [0.0, 10.0], ] ) self.objective = [ self.f1, self.f2, ] self.constraints = [ self.g1, self.g2, self.g3, self.g4, self.g5, self.g6, ]
[docs] def f1(self, x): return -( 25 * (x[0] - 2) ** 2 + (x[1] - 2) ** 2 + (x[2] - 1) ** 2 + (x[3] - 4) ** 2 + (x[4] - 1) ** 2 )
[docs] def f2(self, x): return np.sum(x**2)
[docs] def g1(self, x): return -x[0] - x[1] + 2
[docs] def g2(self, x): return -6 + x[0] + x[1]
[docs] def g3(self, x): return -2 + x[1] - x[0]
[docs] def g4(self, x): return -2 + x[0] - 3 * x[1]
[docs] def g5(self, x): return -4 + (x[2] - 3) ** 2 + x[3]
[docs] def g6(self, x): return -((x[4] - 3) ** 2) - x[5] + 4
if __name__ == "__main__": pass