主要内容

最小化Rastrigin的功能

Rastrigin的功能

这个例子展示了如何找到Rastrigin函数的最小值,这个函数经常被用来测试遗传算法。该示例给出了两种最小化方法:使用Optimize Live Editor任务和在命令行上工作。

对于两个自变量,Rastrigin函数定义为

R 一个 年代 x 2 0 + x 1 2 + x 2 2 - 1 0 因为 2 π x 1 + 因为 2 π x 2

rastriginsfcn.m在运行此示例时,可以使用该文件,该文件计算Rastrigin函数的值。创建Rastrigin函数的曲面图。

fsurf (@ (x, y)重塑(rastriginsfcn ([x (:), y(:))),大小(x)),...“MeshDensity”, 100,...“ShowContours”“上”...“线型””:“

图中包含一个轴对象。axis对象包含一个functionsurface类型的对象。

如图所示,Rastrigin的函数有许多局部极小值——图中的“山谷”。然而,该函数只有一个全局最小值,它出现在x-y平面上的点[0 0],在那里函数的值为0。在除[0 0]以外的任意局部最小值处,Rastrigin函数的值都大于0。局部最小值离原点越远,函数在该点的值就越大。

Rastrigin函数经常被用来测试遗传算法,因为它的许多局部最小值使得标准的、基于梯度的方法很难找到全局最小值。

最小化使用优化实时编辑器任务

本节介绍如何使用遗传算法找到Rastrigin函数的最小值。

请注意:由于遗传算法使用随机数生成器,每次运行该算法都会返回不同的结果。

  • 控件创建一个新的活动脚本新的实时脚本按钮。文件章节首页选项卡。

new_live_script.png

  • 插入一个优化实时编辑器任务。单击插入TAB,然后在代码部分中,选择任务>优化

optimizelet_insert.png

optimizelet_choose.png

  • 单击Solver-based按钮。

optimizelet_initial.png

  • 控件插入一个新节,以用于输入问题数据节休息按钮。插入选项卡。新的部分出现在任务的上方和下方。

  • 在任务上面的新部分中,输入以下代码来定义变量和目标函数的数量。

rng默认的%用于再现性Nvar = 2;有趣= @rastriginsfcn;
  • 要将这些变量放置到工作区中,请按下运行该节按Ctrl + Enter

  • 指定问题类型部分的任务,单击目标>非线性按钮。

  • 选择求解> ga -遗传算法

  • 选择问题数据部分的任务,选择目标函数>函数然后选择有趣的

  • 选择变量数> nvar

optimizelet_ga_rastriginsfcn.png

  • 显示进度部分的任务,选择最好的健身情节。

  • 要运行求解器,请单击选项按钮在任务窗口的右上方,并选择运行部分.绘图显示在单独的图形窗口和任务输出区域中。请注意,您的图可能与所显示的不同,因为遗传算法是一个随机算法。

ga_out.png

  • 图底部的点表示最佳适应度值,而上面的点表示每代适应度值的平均值。图的顶部以数字形式显示了当前一代的最佳值和平均值。

  • 要查看解和适应度函数值,请查看任务的顶部。

optimizelet_ga_output.png

  • 要查看这些变量的值,请在任务下面的部分中输入以下代码。

disp(解决方案)disp (objectiveValue)

所显示的值与Rastrigin函数的实际最小值(0)不是很接近。的话题设置初始范围变异、突变和交叉,设置最大代数和失速代数描述实现一个接近实际最小值的结果的方法。或者,您可以简单地重新运行求解器以尝试获得更好的结果。

Live Editor任务的最终状态显示在这里。

生活任务
优化终止:适应度值的平均变化小于options.FunctionTolerance。

{

disp(解决方案)
0.9785 - 0.9443
disp (objectiveValue)
2.5463

在命令行最小化

要在命令行中找到Rastrigin函数的最小值,输入以下代码。

rng默认的%用于再现性选项= optimoptions(“遗传算法”“PlotFcn”“gaplotbestf”);[solution,objectiveValue] = ga(@rastriginsfcn,2,...[],[],[],[],[],[],[], 选项)
优化终止:适应度值的平均变化小于options.FunctionTolerance。

{

解决方案=1×20.9785 - 0.9443
objectivvalue = 2.5463

图底部的点表示最佳适应度值,而上面的点表示每代适应度值的平均值。图的顶部以数字形式显示了当前一代的最佳值和平均值。

这两个优化Live Editor任务和命令行允许您制定和解决问题,它们给出相同的结果。命令行更加简化,但在选择求解器、设置问题和选择绘图函数等选项方面提供的帮助较少。您还可以使用优化,然后生成用于命令行使用的代码,如使用优化实时编辑器任务或求解器的约束非线性问题

相关的话题