主要内容

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

德容的第五个功能

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

De Jong的第五个函数是一个具有多(25)个局部极小值的二维函数。在下图中,不清楚这些局部极小值中的哪一个是全局极小值。

德容5FCN

图中包含一个轴对象。轴对象包含两个类型为“曲面”、“轮廓”的对象。

许多标准优化算法陷入局部极小。由于模拟退火算法执行广泛的随机搜索,因此被困在局部极小值中的几率降低。

笔记:由于模拟退火使用随机数生成器,因此每次运行此算法时,都可以得到不同的结果。看见复制你的结果了解更多信息。

在命令行中最小化

要在没有约束的情况下运行模拟退火算法,请调用同时退火在命令行中使用中的目标函数德容5fcn.m,由匿名函数引用@德容5FCN在下面的代码中。

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

在结果中:

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

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

使用优化实时编辑器任务

您还可以使用优化实时编辑器任务,它提供了一种可视化方法。

  1. 通过单击新的现场脚本按钮文件关于标签。

    新建实时脚本按钮

  2. 插入优化实时编辑器任务。单击插入选项卡,然后,在密码节,选择任务>优化.

    插入优化实时编辑器任务

    优化Live Editor任务

  3. 用于输入问题数据,通过单击分段按钮插入选项卡。新部分显示在任务的上方和下方。

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

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

  6. 指定的问题类型在任务的第节中,单击目标>非线性按钮

  7. 选择解算器>模拟退火BND-模拟退火算法.

  8. 选择问题数据在任务的第节中,选择目标函数>函数句柄然后选择享乐.

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

    “已指定解算器、目标函数和初始点

  10. 显示进度在任务的第节中,选择最好的价值情节

  11. 要运行解算器,请单击“选项”按钮在任务窗口的右上角,选择运行段. 绘图显示在单独的图形窗口和任务输出区域中。请注意,您的绘图可能与显示的绘图不同,因为同时退火是一种随机算法。

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

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

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

    这个优化Live Editor任务返回名为解决方案客观价值到工作区。

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

    显示(解决方案)显示(目标值)
  14. 按运行该部分Ctrl+Enter.

    disp(解决方案)
    -32.0285 -0.1280
    显示(目标值)
    10.7632

两者优化Live Editor任务和命令行允许您制定和解决问题,它们给出相同的结果。命令行更加精简,但在选择解算器、设置问题和选择诸如打印函数等选项方面提供的帮助较少。您还可以使用优化,然后生成供命令行使用的代码,如中所示基于解算器求解约束非线性问题.

另见

相关的话题