这个例子展示了如何使用模拟退火来寻找函数的局部极小值。这个例子给出了两种最小化函数的方法:在命令行上工作和使用优化实时编辑器任务。
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
是算法返回的最后一个点。
未来值
为目标函数在末点处的值。
您还可以使用优化实时编辑器任务,它提供了一种可视化方法。
通过单击新的现场脚本按钮文件关于家标签。
插入优化实时编辑器任务。单击插入选项卡,然后,在密码节,选择任务>优化.
用于输入问题数据,通过单击分段按钮插入选项卡。新部分显示在任务的上方和下方。
在任务上方的新部分中,输入以下代码以定义初始点和目标函数。
x0=[0];fun=@dejong5fcn;
要将这些变量放置到工作区中,请按下运行该部分Ctrl+Enter.
在指定的问题类型在任务的第节中,单击目标>非线性按钮
选择解算器>模拟退火BND-模拟退火算法.
在选择问题数据在任务的第节中,选择目标函数>函数句柄然后选择享乐
.
选择初始点(x0) > x0.
在显示进度在任务的第节中,选择最好的价值情节
要运行解算器,请单击“选项”按钮⁝在任务窗口的右上角,选择运行段. 绘图显示在单独的图形窗口和任务输出区域中。请注意,您的绘图可能与显示的绘图不同,因为同时退火
是一种随机算法。
要查看解决方案和最佳目标函数值,请查看任务顶部。
这个优化Live Editor任务返回名为解决方案
和客观价值
到工作区。
要查看这些变量的值,请在任务下面的部分中输入以下代码。
显示(解决方案)显示(目标值)
按运行该部分Ctrl+Enter.
disp(解决方案)
-32.0285 -0.1280
显示(目标值)
10.7632
两者优化Live Editor任务和命令行允许您制定和解决问题,它们给出相同的结果。命令行更加精简,但在选择解算器、设置问题和选择诸如打印函数等选项方面提供的帮助较少。您还可以使用优化,然后生成供命令行使用的代码,如中所示基于解算器求解约束非线性问题.