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