主要内容

本页采用了机器翻译。点击此处可查看最新英文版本。

使用 varindex 在基于问题的方法中设置选项

要在使用基于问题的方法时设置某些选项,您必须通过调用 varindex 将问题变量转换为索引。例如,ga 求解器接受一个名为 InitialPopulationRange 的选项,它是一个两行矩阵。第一行表示问题变量的下限,第二行表示问题变量的上限。矩阵的列代表种群中的个体,即问题变量。要将列索引与问题变量匹配,请使用 varindex

例如,将目标函数设置为本示例末尾给出的辅助函数 mrosenbrock。对于所有 xi=yi=1,该目标函数在点 i 附近接近于 0。以行形式创建 3-D 问题变量 xy,这是 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

另请参阅

主题