主要内容

基于问题指定 surrogateopt 的起点和值

对于某些求解器,您可以将目标函数和约束函数值(如果有)传递给 solve 中的 x0 参量。这可以节省求解器的时间。传递 OptimizationValues 对象的向量。使用 optimvalues 函数创建此向量。

可以使用目标函数值的求解器有:

  • ga

  • gamultiobj

  • paretosearch

  • surrogateopt

可以使用非线性约束函数值的求解器有:

  • paretosearch

  • surrogateopt

例如,使用 surrogateopt 从初始点网格中的值开始,最小化 peaks 函数。使用 x 变量创建一个从 -10 到 10 的网格,使用 y 变量创建一个从 –5/25/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.

Figure Optimization Plot Function contains an axes object. The axes object with title Best Function Value: -6.55113, xlabel Iteration, ylabel Function value contains an object of type scatter. This object represents Best function value.

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: 17.3146
          funccount: 200
    constrviolation: 0
               ineq: [1×1 struct]
           rngstate: [1×1 struct]
            message: 'surrogateopt stopped because it exceeded the function evaluation limit set by ↵'options.MaxFunctionEvaluations'.'
             solver: 'surrogateopt'

另请参阅

| |

主题