使用 varindex 在基于问题的方法中设置选项
要在使用基于问题的方法时设置某些选项,您必须通过调用 varindex 将问题变量转换为索引。例如,ga 求解器接受一个名为 InitialPopulationRange 的选项,它是一个两行矩阵。第一行表示问题变量的下限,第二行表示问题变量的上限。矩阵的列代表种群中的个体,即问题变量。要将列索引与问题变量匹配,请使用 varindex。
例如,将目标函数设置为本示例末尾给出的辅助函数 mrosenbrock。对于所有 ,该目标函数在点 附近接近于 0。以行形式创建 3-D 问题变量 x 和 y,这是 ga 所期望的形式。
x = optimvar("x",1,3); y = optimvar("y",1,3);
用目标函数 mrosenbrock(x,y) 创建一个优化问题。
prob = optimproblem("Objective",mrosenbrock(x,y));将 x 变量的初始范围设置为 [-1 2],将 y 变量的范围设置为 [0 3]。为此,找到变量的索引。
xidx = varindex(prob,"x")xidx = 1×3
1 2 3
yidx = varindex(prob,"y")yidx = 1×3
4 5 6
将初始范围设置为两行矩阵,第一行包含下界,第二行包含上界。
poprange = zeros(2,max([xidx,yidx])); poprange(1,xidx) = -1; poprange(2,xidx) = 2; poprange(1,yidx) = 0; poprange(2,yidx) = 3; disp(poprange)
-1 -1 -1 0 0 0
2 2 2 3 3 3
设置随机数生成器,并使用初始范围矩阵解决问题。
rng default % For reproducibility opts = optimoptions("ga","InitialPopulationRange",poprange); [sol,fval] = solve(prob,"Solver","ga","Options",opts)
Solving problem using ga. ga stopped because the average change in the fitness value is less than options.FunctionTolerance.
sol = struct with fields:
x: [1.2583 0.7522 1.2317]
y: [1.5830 0.5653 1.5167]
fval = 0.1818
返回的解具有相当小的目标函数值。
辅助函数
以下代码创建 mrosenbrock 辅助函数。
function F = mrosenbrock(x,y) F = [10*(y - x.^2),1 - x]; F = sum(F.^2,2); end