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。
rng("default") 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")
Solving problem using 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 =
-16.4669该解仅在约束容差 1e-3 内满足约束 y(1,2) == y(2,1):sol.y(2,1) = -0.9843,但 sol.y(1,2) = -0.9833。