主要内容

最小化函数有很多局部最小值

这个例子展示了如何找到一个局部最小值的一个函数使用模拟退火。最小化的例子提出了两种方法:在命令行和使用工作优化住编辑任务。

德容的第五个函数是一个二维函数有很多局部最小值(25)。当您运行这个例子中可用的函数。在接下来的情节,目前尚不清楚的局部最小值是全球最低。

dejong5fcn

图包含一个坐标轴对象。坐标轴对象包含2类型的对象表面轮廓。

许多标准的优化算法陷入局部最小值。由于模拟退火算法执行广泛的随机搜索,被困在一个局部最小值的机会减少。

请注意:因为模拟退火使用随机数生成器,每次运行该算法可以得到不同的结果。看到复制你的结果为更多的信息。

在命令行中最小化

运行模拟退火算法没有约束,电话simulannealbnd在命令行中使用目标函数dejong5fcn.m引用匿名函数@dejong5fcn在以下代码。

rng (10,“旋风”)%的再现性有趣= @dejong5fcn;[x, fval] = simulannealbnd(有趣,[0 0])
优化终止:变化函数值小于options.FunctionTolerance最好。
x =1×2-16.1292 - -15.8214
fval = 6.9034

的结果:

  • x是返回的最后一点算法。

  • fval最后一点的目标函数值。

尽量减少使用优化住编辑任务

您还可以运行最小化使用优化生活任务编辑器,它提供了一个可视化的方法。

  • 创建一个新的脚本通过单击生活新的生活的脚本按钮文件上节选项卡。

new_live_script.png

  • 插入一个优化住编辑任务。单击插入选项卡,然后在代码部分中,选择任务>优化

optimizelet_insert.png

optimizelet_choose.png

  • 单击Solver-based的任务。

optimizelet_initial.png

  • 用于进入问题数据,通过单击插入一个新部分节休息按钮插入选项卡。新章节出现上方和下方的任务。

  • 在上方的新部分任务中,输入以下代码来定义起始点和目标函数。

0 x0 = [0];有趣= @dejong5fcn;rng默认的%的再现性
  • 这些变量到工作区中,按运行部分按Ctrl + Enter

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

  • 选择解算器> simulannealbnd -模拟退火算法

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

  • 选择初始点(x0) > x0

optimizelet_simulannealbnd_setup.png

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

  • 解算器,单击选项按钮在任务的右上角的窗口,并选择运行部分。情节出现在一个单独的图窗口并在任务输出区域。注意你的情节可能不同于一个,因为simulannealbnd是一个随机算法。

optimizelet_simulannealbnd_plot.png

  • 查看解决方案和最佳目标函数值,看看任务的顶部。

optimizelet_simulannealbnd_solution.png

  • 优化住编辑任务返回变量命名解决方案objectiveValue工作区。

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

disp(解决方案)disp (objectiveValue)
  • 运行部分按按Ctrl + Enter

这个例子的结束优化任务的最终状态。

生活任务

图模拟退火包含一个坐标轴对象。坐标轴对象与标题最好的函数值:10.7632,包含迭代,ylabel函数值包含一行对象显示它的值只使用标记。

优化终止:变化函数值小于options.FunctionTolerance最好。

这两个优化生活任务和命令行编辑器允许您制定和解决问题,他们给相同的结果。命令行更精简,但提供了更少的帮助选择解算器,设置问题,选择选项,例如图功能。你也可以开始使用问题优化命令行中使用,然后生成代码,如使用优化约束非线性问题编辑任务或解决生活

另请参阅

相关的话题