主要内容

遗传算法的自定义输出功能

这个例子展示了在遗传算法求解器中使用自定义输出函数遗传算法.自定义输出函数执行以下任务:

  • 用矩形表示种群的前两个组成部分的范围。矩形的左边和下面的边是的最小值x (1)x (2)分别,和右侧和上方在各自的最大值。

  • 当最佳函数值下降到下面时,停止迭代0.1(目标函数的最小值为0).

  • 在名为的变量中记录整个人口GapopulationHistory.在你的MATLAB®工作空间每10代。

  • 将初始交叉分数修改为自定义值0.2,然后将其更新回默认值0.825代。初始设定0.2使前几个迭代主要通过突变进行随机搜索。后期的设定0.8导致以下迭代主要通过现有人口成员的组合搜索。

目标函数

目标函数是四维的x前两个分量是整数值的。

功能F = rastriginsfcn([x(1)-6 x(2)-13]);F = F + rastriginsfcn([x(3)-3* x(4)-5*pi]);

输出函数

自定义输出函数在初始化期间设置绘图,并在迭代期间维护绘图。输出函数还暂停迭代0.1秒所以你可以看到情节的发展。

功能[选项,optchanged] = gaoutfun(选项、状态标志)持续的H1历史R OPTCHANGED = FALSE;转变国旗情况下'在里面'h1 =图;甘氨胆酸ax =;斧子。XLim = [0 21];斧子。YLim = [0 21];l1 = min (state.Population (: 1));m1 = max (state.Population (: 1));l2 = min (state.Population (:, 2));m2 = max (state.Population (:, 2)); r = rectangle(ax,'位置',[l1 l2 m1-l1 m1- l2]);历史(::1)= state.Population;assignin ('根据'“gapopulationhistory”、历史);情况下“通路”%每10代更新历史。如果rem(state.Generation,10) = 0 ss = size(history,3);历史(:,:,ss + 1) = state.Population;assignin ('根据'“gapopulationhistory”、历史);结束%寻找最佳目标函数,如果低就停止。ibest = state.best(结束);ibest = find(state.score == ibest,1,“最后一次”);: bestx = state.Population (ib);bestf = gaintobj (bestx);如果Bestf <= 0.1状态。StopFlag =“y”;DISP(“有低于0.1”结束%更新图。图1 l1 = min(state.Population(:,1));m1 = max (state.Population (: 1));l2 = min (state.Population (:, 2));m2 = max (state.Population (:, 2));r.位置= [l1 l2 m1-l1 m1- l2];暂停(0.1)%更新25代后突变和交叉的比例。如果状态。生成== 25个选项。CrossoverFraction = 0.8;optchanged = true;结束情况下“完成”%在历史中包含最终人口。SS =大小(历史,3);历史(:,:,ss + 1) = state.Population;assignin ('根据'“gapopulationhistory”、历史);结束

问题设置和解决方案

设置下界和上界。

Lb = [1 1 -30 -30];Ub = [20 20 70 70];

设置整数变量和变量数。

IntCon = [1 2];据nvar = 4;

设置选项以调用自定义输出函数,最初有很少的交叉。

选项= Optimoptions(“遗传算法”“OutputFcn”@gaoutfun,“CrossoverFraction”, 0.2);

为了再现性,请设置随机数发生器。

rng (10)

设置目标函数并调用求解器。

有趣= @gaintobj;[x, fval] = ga(有趣,据nvar ,[],[],[],[], 磅,乌兰巴托,[],IntCon选项)
得到0.1优化终止:Y X = 6.0000 13.0000 9.4217 15.7016 FVAL = 0.0098

输出函数停止求解器。

查看已记录历史的大小。

disp(大小(gapopulationhistory))
40 4 7

有7条40 × 4种群矩阵的记录(40个个体,每个4元素行向量)。

相关话题