主要内容

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

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

德容第五函数是一个具有许多(25)个局部极小值的二维函数。运行此示例时,该函数可用。在下面的图中,不清楚哪个局部最小值是全局最小值。

dejong5fcn

图中包含一个轴对象。坐标轴对象包含曲面、轮廓等2个对象。

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

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

在命令行最小化

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

rng (10,“旋风”再现率%Fun = @dejong5fcn;[x,fval] = simulannealbnd(fun,[0 0])
优化终止:最佳函数值的更改小于options.FunctionTolerance。
x =1×2-16.1292 - -15.8214
Fval = 6.9034

结果如下:

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

  • Fval为最终点的目标函数值。

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

方法也可以运行最小化操作优化Live Editor任务,它提供了一种可视化方法。

  • 控件创建一个新的活动脚本新的实时脚本按钮。文件章节首页选项卡。

new_live_script.png

  • 插入一个优化实时编辑器任务。单击插入TAB,然后在代码部分中,选择任务>优化

optimizelet_insert.png

optimizelet_choose.png

  • 单击Solver-based的任务。

optimizelet_initial.png

  • 控件插入一个新节,以用于输入问题数据节休息按钮。插入选项卡。新的部分出现在任务的上方和下方。

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

X0 = [0 0];Fun = @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

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

生活任务

{

优化终止:最佳函数值的更改小于options.FunctionTolerance。

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

另请参阅

相关的话题