主要内容

具有多个局部极小值的最小函数

德容的第五功能

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

德容第五函数是一个具有多个(25)局部极小值的二维函数。在下面的图中,我们不清楚哪个局部最小值是全局最小值。

dejong5fcn

图中包含一个坐标轴。轴线包含曲面、轮廓两种对象。

许多标准的优化算法都陷入局部极小。由于模拟退火算法执行广泛的随机搜索,因此陷入局部最小值的机会减少了。

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

在命令行最小化

若要运行无约束的模拟退火算法,调用simulannealbnd在命令行中使用目标函数dejong5fcn.m,由匿名函数引用@dejong5fcn在以下代码中。

rng (10,“旋风”%的再现性有趣= @dejong5fcn;[x,fval] = simulannealbnd(fun,[0 0])
优化终止:更改的最佳功能值小于选项。功能公差。X = -16.1292 -15.8214 fval = 6.9034

的结果:

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

  • fval为目标函数在末点处的值。

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

您还可以使用优化Live Editor任务,它提供了一种可视化的方法。

  1. 单击。创建一个新的活动脚本新的生活的脚本按钮文件上节首页选项卡。

    新增实时脚本按钮

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

    插入优化实时编辑器任务

    优化Live Editor任务

  3. 用于输入问题数据,通过单击节休息按钮插入选项卡。新的部分出现在任务的上面和下面。

  4. 在任务上面的新部分中,输入以下代码来定义初始点和目标函数。

    X0 = [0 0];有趣= @dejong5fcn;
  5. 要将这些变量放置到工作区中,请按下运行该部分按Ctrl + Enter

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

  7. 选择Solver > simulannealbnd模拟退火算法

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

  9. 选择初始点(x0) > x0

  10. 显示进度部分,选择最好的价值情节。

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

    图中显示最佳函数值在大约1300次迭代中下降到10.7632

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

    优化返回解决方案和objectiveValue变量

    优化Live Editor任务返回命名的变量解决方案objectiveValue工作区。

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

    disp(解决方案)disp (objectiveValue)
  14. 按下按钮使型材运行按Ctrl + Enter

    disp(解决方案)
    -32.0285 - -0.1280
    disp (objectiveValue)
    10.7632

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

另请参阅

相关的话题