此示例显示了如何查找Restrigin功能的最小值,通常用于测试遗传算法的函数。该示例呈现了两种最小化方法:使用优化活动编辑器任务和工作在命令行。
对于两个独立变量,Rastrigin的函数被定义为
全局优化工具箱包含了Restriginsfcn.m.
该文件计算Rastrigin函数的值。下图是Rastrigin的函数图。
作为情节表明,Rastrigin的函数在情节中有许多局部最小值 - “valleys”。但是,该函数只有一个全局最小值,这发生在[0 0]中发生x - y平面,如绘图中的垂直线所示,其中功能的值为0.在除[0 0]的任何局部最小值,Rastrigin函数的值大于0。局部最小值越远。起源,函数的值越大。
Rastrigin的功能通常用于测试遗传算法,因为它很多本地最小值使得标准的梯度的方法难以找到全局最小的。
下面的Rastrigin函数等值线图显示了极大值和极小值的交替变化。
本节解释如何使用遗传算法找到最小的Rastrigin函数。
请注意
因为遗传算法使用随机数生成器,所以每次运行算法都会返回不同的结果。
属性创建一个新的活动脚本新的生活的脚本按钮文件上节首页选项卡。
插入一个优化实时编辑任务。点击插入TAB,然后在代码部分中,选择任务>优化.
有关输入问题数据,请单击“插入新”部分节休息按钮插入选项卡。新的部分将出现在任务的上方和下方。
在任务上面的新部分中,输入以下代码来定义变量的数量和目标函数。
据nvar = 2;有趣= @rastriginsfcn;
要将这些变量放入工作区,请按按钮运行该部分按Ctrl + Enter.
在里面指定问题类型部分,单击目标>非线性按钮.
选择求解> ga -遗传算法.
在里面选择问题数据部分任务,选择目标函数>函数句柄然后选择乐趣
.
选择变量数量> nvar.
在里面显示进度部分,选择最好的健身情节。
要运行求解器,请单击options按钮⁝在任务窗口的右上角,然后选择运行部分.图显示在单独的图形窗口和任务输出区域中。请注意,您的情节可能与所显示的情节不同,因为遗传算法
是一种随机算法。
图底部的点表示最佳适应度值,而上面的点表示每一代适应度值的平均值。图的顶部显示了当前这一代的最佳值和平均值。
要查看解决方案和健身功能值,请查看任务的顶部。
要查看这些变量的值,请在任务下面的部分中输入以下代码。
disp(解决方案)disp (objectiveValue)
通过按压运行该节按Ctrl + Enter.
disp(解决方案)
0.9785 - 0.9443
disp (objectiveValue)
2.5463
你的价值观可能会不同,因为遗传算法
是一种随机算法。
所示值与Rastrigin函数的实际最小值不是很接近,即0
.的话题设置初始范围,设置突变的数量, 和设置最大几代数和失速生成的数量描述实现较近实际最小值的结果的方法。或者,您可以简单地重新运行求解器以尝试获得更好的结果。
要在命令行中找到Rastrigin函数的最小值,输入以下代码。
RNG.默认的重复性的%选项= Optimoptions(“遗传算法”,'plotfcn','gaplotbestf');[解决方案,客观] = GA(@ RastriginsFCN,2,...[],[],[],[],[],[],[], 选项)
优化终止:平均变化的适应度值小于选项。功能公差。解= 0.9785 0.9443 objective值= 2.5463
图底部的点表示最佳适应度值,而上面的点表示每一代适应度值的平均值。图的顶部显示了当前这一代的最佳值和平均值。
这两个优化活动编辑器任务和命令行允许您制定和解决问题,它们给出相同的结果。命令行更加精简,但在选择解决程序、设置问题和选择plot函数等选项方面提供的帮助较少。你也可以使用优化,然后生成命令行使用的代码,如解决一个约束非线性问题,基于求解器.