Source code for smt_optim.benchmarks.misc.edge_cases

import numpy as np
from smt_optim.benchmarks.base import BenchmarkProblem


[docs] class Rosenbrock2(BenchmarkProblem): def __init__(self): super().__init__() self.num_dim = 2 self.num_cstr = 2 self.num_fidelity = 1 self.bounds = np.array([[-2, 2], [-2, 2]]) self.costs = [1] self.objective = [self.hf_objective] self.constraints = [[self.hf_constraint], [self.hf_constraint2]]
[docs] def hf_objective(self, x): res = (1 - x[0]) ** 2 + 100 * (x[1] - x[0] ** 2) ** 2 return res
# def lf_objective(self, x): # res = self.hf_objective(x) + 0.1*np.sin(10*x[0] + 5*x[1]) # return res
[docs] def hf_constraint(self, x): res = -(x[0] ** 2) - (x[1] - 1) ** 1 / 2 return -res
# def lf_constraint(self, x): # res = self.hf_constraint(x) - 0.1*np.sin(10*x[0] + 5*x[1]) # return res
[docs] def hf_constraint2(self, x): # return -1 - 2*x[0] + (x[1]+15/9)**2 # return -x[1] + 0.2 + x[0] return -0.5 * np.sin(5 * (x[0] - 0.5) ** 2 - x[1] - np.pi / 8)
# def lf_constraint2(self, x): # x[0] = x[0] + 0.1 # x[1] = x[1] - 1 # return 0.9 * self.hf_constraint2(x)
[docs] class TwoConstraints(BenchmarkProblem): def __init__(self): super().__init__() self.num_dim = 2 self.num_cstr = 2 self.num_fidelity = 1 self.bounds = np.array([[1, 4], [1, 4]]) self.costs = [1] self.objective = [self.func] self.constraints = [[self.cstr1], [self.cstr2]]
[docs] def func(self, x): if x.ndim == 1: x = x.reshape(1, -1) return (x[:, 0] ** 2 + x[:, 1] ** 2).ravel()
[docs] def cstr1(self, x): if x.ndim == 1: x = x.reshape(1, -1) return (0.15 * (x[:, 0] - 4) ** 2 + 0.1 * (x[:, 1] - 4) ** 2 - 1).ravel()
[docs] def cstr2(self, x): if x.ndim == 1: x = x.reshape(1, -1) return (x[:, 0] - 0.8 * x[:, 1]).ravel()