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