Global Optimization Toolbox 求解器的初始点
一些 Global Optimization Toolbox 求解器需要初始点 x0
:patternsearch
、simulannealbnd
、GlobalSearch
和 MultiStart
。当使用基于问题的方法解决优化问题时,您可以在 solve
和 prob2struct
的第二个参量中指定 x0
。要指定初始点,请创建一个结构体,其中变量名称作为字段,变量值作为结构体值。例如,对于标量变量 x
和 patternsearch
求解器的 2×2 矩阵 y
,输入以下代码。
x0.x = 5; x0.y = eye(2) + 0.1*randn(2); [sol,fval] = solve(prob,x0,"Solver","patternsearch")
您还可以使用 optimvalues
为这些求解器指定一个初始点,如下所示。
其他 Global Optimization Toolbox 求解器不需要初始点,但可以接受初始点或一组初始点:ga
、gamultiobj
、paretosearch
和 surrogateopt
。要将初始点传递给这些求解器,请使用 optimvalues
创建点。
注意
当使用基于问题的方法时,您不能使用以下选项传递初始点或初始种群:
InitialPopulationMatrix
(用于ga
)InitialSwarmMatrix
(用于particleswarm
)InitialPoints
(用于surrogateopt
)
例如,对于 ga
求解器,取二维变量 x
和 2×2 矩阵 y
。
x = optimvar('x',2,"LowerBound",-1,"UpperBound",1); y = optimvar('y',2,2,"LowerBound",-1,"UpperBound",1); prob = optimproblem("Objective",... cosh(dot(y*x,[2;-1])) - sinh(dot(y*x,[1;-2]))); prob.Constraints = y(1,2) == y(2,1); % Set initial population: x0x for x, x0y for y rng default x0x = [1;1/2]; x0y = eye(2)/2 + 0.1*randn(2); x0 = optimvalues(prob,'x',x0x,'y',x0y); % Solve problem [sol,fval] = solve(prob,Solver="ga")
ga stopped because the average change in the fitness value is less than options.FunctionTolerance. sol = struct with fields: x: [2×1 double] y: [2×2 double] fval = -48.6317
该解仅在约束容差 y(1,2) == y(2,1)
内满足约束 1e-3
:sol.y(2,1) = -1.0000
,但 sol.y(1,2) = -0.9990
。