主要内容

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

德容的第五个功能

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

德容的第五个函数是一个二维函数有很多局部最小值(25)。在接下来的情节,目前尚不清楚哪一个局部最小值是全球最低。

dejong5fcn

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

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

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

在命令行中最小化

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

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

的结果:

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

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

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

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

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

    新的生活脚本按钮

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

    插入优化生活编辑任务

    优化的任务编辑器:具体问题具体分析(推荐)和solver-based之间做出选择

  3. 单击Solver-based的任务。

    优化现场编辑任务

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

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

    0 x0 = [0];有趣= @dejong5fcn;
  6. 这些变量到工作区中,按运行部分按Ctrl + Enter

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

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

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

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

    “解决者,目标函数和初始点指定

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

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

    情节展示最好的大约1300次迭代函数值下降到10.7632

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

    解决方案和objectiveValue变量优化的回报

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

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

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

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

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

另请参阅

相关的话题