基于问题指定 surrogateopt
的起点和值
对于某些求解器,您可以将目标函数和约束函数值(如果有)传递给 solve
中的 x0
参量。这可以节省求解器的时间。传递 OptimizationValues
对象的向量。使用 optimvalues
函数创建此向量。
可以使用目标函数值的求解器有:
ga
gamultiobj
paretosearch
surrogateopt
可以使用非线性约束函数值的求解器有:
paretosearch
surrogateopt
例如,使用 surrogateopt
从初始点网格中的值开始,最小化 peaks
函数。使用 x
变量创建一个从 -10 到 10 的网格,使用 y
变量创建一个从 –5/2
到 5/2
的网格,间距为 1/2。计算在初始点的目标函数值。
x = optimvar("x",LowerBound=-10,UpperBound=10); y = optimvar("y",LowerBound=-5/2,UpperBound=5/2); prob = optimproblem("Objective",peaks(x,y)); xval = -10:10; yval = (-5:5)/2; [x0x,x0y] = meshgrid(xval,yval); peaksvals = peaks(x0x,x0y);
使用 optimvalues
传递 x0
参量中的值。这可以为 solve
节省时间,因为 solve
不需要计算这些值。将这些值作为行向量传递。
x0 = optimvalues(prob,'x',x0x(:)','y',x0y(:)',... "Objective",peaksvals(:)');
使用 surrogateopt
和初始值求解问题。
[sol,fval,eflag,output] = solve(prob,x0,Solver="surrogateopt")
Solving problem using surrogateopt.
surrogateopt stopped because it exceeded the function evaluation limit set by 'options.MaxFunctionEvaluations'.
sol = struct with fields:
x: 0.2279
y: -1.6258
fval = -6.5511
eflag = SolverLimitExceeded
output = struct with fields:
elapsedtime: 23.4029
funccount: 200
constrviolation: 0
ineq: [1x1 struct]
rngstate: [1x1 struct]
message: 'surrogateopt stopped because it exceeded the function evaluation limit set by ...'
solver: 'surrogateopt'
另请参阅
surrogateopt
| solve
| optimvalues