模式搜索登上华盛顿山
这个例子直观地展示了模式搜索如何优化函数。函数是华盛顿山附近地形的高度,作为x-y位置的函数。为了找到华盛顿山的顶部,我们将高度的负数作为目标函数最小化。(本例中的华盛顿山是美国东北部的最高峰。)
美国地质调查局(US Geological Survey)提供了地形高度的数据,作为网格上x-y位置的函数。为了能够计算任意点的高度,目标函数从附近的网格点插值高度。
方法可以更快地找到网格上指定的高度的最大值马克斯
函数。这个例子的重点是展示模式搜索算法是如何操作的;它适用于定义在连续区域上的函数,而不仅仅是网格点。此外,如果评估目标函数的计算成本很高,则在一个完整的网格上执行该评估马克斯
函数,将大大低于使用模式搜索算法的效率,该算法对网格点的一小部分进行采样。
模式搜索的工作原理
模式搜索通过以下方法找到目标函数的局部最小值,称为轮询。在此描述中,描述模式搜索量的单词以粗体显示。搜索从一个初始点开始,这个点被视为当前点第一步:
1.生成一个模式点的,通常是正负坐标方向,乘以a筛孔尺寸,并将此图案居中当前点.
2.求目标函数的每一点模式.
3.如果最低目标在模式的值小于当前点,则民意测验为成功的,结果如下:
3 a。找到的最小值点就是当前点.
3 b。的筛孔尺寸是翻了一倍。
3 c。算法继续执行步骤1。
4.如果投票不是成功的,则发生以下情况:
4 a。的筛孔尺寸是减半。
4 b。如果筛孔尺寸低于阈值时,迭代停止。
4 c。否则,当前点保留,算法在第1步继续。
这个简单的算法,经过一些小的修改,为优化提供了一个健壮而直接的方法。它不需要目标函数的梯度。它也适用于约束条件,但是这个示例和描述只处理不受约束的问题。
准备模式搜索
要准备模式搜索,请加载数据mtWashington.mat
其中包含了美国地质调查局472 × 345网格上的数据。仰角Z的单位是英尺。向量x和y分别包含了东向和北向网格间距的基值。数据文件还包含搜索的起点X0。
负载mtWashington
有三个MATLAB®文件执行目标函数的计算和绘图例程。它们是:
1.terrainfun
,它在任意x-y位置处求高度的负值。terrainfun
使用MATLAB函数interp2
进行二维线性插值。它接受Z数据,并允许在所有x-y点处求高度的负值。
2.psoutputwashington
它绘制了华盛顿山的3d效果图。此外,随着运行的进行,它在每个点周围绘制比之前访问的点更好(更高)的球体。
3.psplotwashington
它会绘制华盛顿山的等高线地图,并监控一个控制跑步速度的滑块。它展示了模式搜索算法通过在这些点上画+号来寻找最优值的位置。它还在每个点周围绘制了比之前访问过的点更好的球体。
在这个例子中,patternsearch
使用terrainfun
作为目标函数,psoutputwashington
作为输出函数,和psplotwashington
作为一个绘图函数。我们准备要传递给的函数patternsearch
在匿名函数语法中:
mtWashObjectiveFcn = @(xx) terrainfun(xx, x, y, Z);mtWashOutputFcn = @(xx,arg1,arg2) psoutputwashington(xx,arg1,arg2, x, y, Z);mtWashPlotFcn = @(xx,arg1) psplotwashington(xx,arg1, x, y, Z);
模式搜索选项设置
接下来,我们为模式搜索创建选项。这组选项在网格尺寸缩小到1以下时,算法停止,保持网格不缩放(每个方向的大小相同),设置初始网格尺寸为10,并设置输出函数和绘图函数:
选项= optimoptions(@patternsearch,“MeshTolerance”, 1“ScaleMesh”假的,...“InitialMeshSize”10“UseCompletePoll”,真的,“PlotFcn”mtWashPlotFcn,...“OutputFcn”mtWashOutputFcn,“UseVectorized”,真正的);
观察模式搜索的进展
运行此示例时,您会看到两个窗口。其中一个显示了模式搜索算法在华盛顿山二维等高线地图上选择的点。该窗口有一个滑块,用于控制算法迭代之间的延迟(当它返回到模式搜索如何工作的描述中的第1步时)。设置滑块到一个低的位置,以加快运行,或到一个高的位置,以减慢运行。
另一个窗口显示了华盛顿山的三维图形,以及模式搜索算法的步骤。您可以在运行过程中旋转这个图以获得不同的视图。
[xfinal ffinal] = patternsearch (mtWashObjectiveFcn X0 ,[],[],[],[],[],...[]、[]选项)
优化终止:网格尺寸小于options.MeshTolerance。
xfinal =1×2316130 4904295
final = -6280
最后一点,xfinal
,表示模式搜索算法完成的位置;这是华盛顿山顶的x-y坐标。最后一个目标函数,ffinal
是华盛顿山高度的负数,为6280英尺。(根据华盛顿山天文台的数据,这应该是6288英尺)。
检查文件terrainfun.m
,psoutputwashington.m
,psplotwashington.m
看看插值和图形是如何工作的。
模式搜索算法有许多可用的选项。例如,算法可以取它发现的第一个改进点,而不是轮询模式中的所有点。它可以以不同的顺序轮询这些点。它可以使用不同的投票模式,包括确定的和随机的。详细信息请参考全局优化工具箱用户指南。