如果软件自带的绘图函数都不适合您想要绘图的输出,您可以编写自己的定制绘图函数,遗传算法在每一代都调用该函数来创建绘图。这个例子展示了如何创建一个绘图函数来显示从上一代到当前一代的最佳适应度值的变化。
要为本示例创建plot函数,请将以下代码复制并粘贴到MATLAB中的一个新文件中®编辑器。
函数state = gaplotchange(options, state, flag) % gaplotchange绘制上一代中最好分数的对数变化。% persistent last_best % the Best score in the previous generation if(strcmp(flag,'init')) %甘氨胆酸axx =;axx。Yscale =“日志”;抓住;xlabel Generation title('Log Absolute Change in Best Fitness Value') end Best = min(state.Score);%当前代最佳得分状态。将last_best设置为best。last_best =最好的;Else change = last_best - best; % Change in best score last_best = best; if change > 0 % Plot only when the fitness improves plot(state.Generation,change,'xr'); end end
然后将文件保存为gaplotchange.m
在MATLAB路径的一个文件夹中。
要使用自定义绘图功能,请选择自定义在绘制函数面板和输入@gaplotchange
在田野的右边。为了将自定义图与最佳适应度值图进行比较,也要选择最好的健身.
现在,如果运行中描述的示例最小化Rastrigin的功能,工具将显示类似下图所示的图形。
该图只显示大于0的变化,即最佳适应度的改善。对数刻度使您能够看到最佳适应度函数的小变化,这是上面的图所没有显示的。
plot函数使用以下结构中包含的信息,遗传算法将这些信息作为输入参数传递给函数:
选项
—当前选项设置
状态
—当前代信息
国旗
—算法的当前状态
最重要的情节功能如下:
持久last_best
创建持久变量last_best
——上一代的最好成绩。在多次调用plot函数时,将保留持久变量。
xlim ([1, options.MaxGenerations]);
甘氨胆酸axx =;
axx。Yscale =“日志”;
在算法开始之前设置好情节。选项。MaxGenerations
是最大代数。
最佳= min (state.Score)
这个领域状态。分数
包含当前种群中所有个体的分数。的变量最好的
是最低分数。有关结构状态字段的完整描述,请参见情节功能的结构.
Change = last_best - best
变量变化是上一代的最好成绩减去当前一代的最好成绩。
如果更改> 0
情节只有在最佳适合度发生变化时才会发生。
情节(state.Generation,改变“xr”)
绘制当前代的变化,其数量包含在状态。一代
.
的代码gaplotchange
包含许多与代码相同的元素gaplotbestf
,创造最佳健身图的功能。