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。