patternsearch
找到一个点序列,x0
,x1
,x2
,……,即接近最优点。从序列的每一点到下一点,目标函数的值要么减少,要么保持不变。本节解释模式搜索如何为中描述的函数工作优化GPS算法.
为了简化解释,本节介绍了广义模式搜索(GPS)如何使用默认的最大正基2N,ScaleMesh
选项设置为假
.
本节不显示patternsearch
算法适用于边界或线性约束。对于边界和线性约束,patternsearch
修改轮询点,使其在每次迭代时都是可行的,即满足所有的边界和线性约束。
本节不包括非线性约束。了解patternsearch
适用于非线性约束,见非线性约束求解算法.
模式搜索从初始点开始x0
在这个例子中,X0 = [2.1 1.7]
.
在第一次迭代时,网格尺寸为1,GPS算法将模式向量添加到初始点X0 = [2.1 1.7]
计算以下网格点:
[10]+x0=[3.11.7][01]+x0=[2.12.7][10]+x0=[1.11.7][0-1]+x0=[2.10.7]
该算法按上图所示的顺序计算网格点处的目标函数ps_示例
在起始点和网格点。
该算法通过计算网格点的目标函数值,对网格点进行轮询,直到找到小于4.6347的网格点x0
.在本例中,它找到的第一个这样的点是(1.1 - 1.7)
,此时目标函数的值为4.5146
,所以迭代1的轮询是成功的.算法将序列中的下一个点设置为
X1 = [1.1 1.7]
请注意
缺省情况下,GPS模式搜索算法一旦找到适合度值小于当前适合度值的网格点,就会停止当前迭代。因此,该算法可能不会轮询所有的网格点。你可以让算法轮询所有的网格点通过设置UseCompletePoll
选择符合事实的
.
轮询成功后,算法将当前网格大小乘以2,即默认值网格扩展因子
选项。由于初始网格尺寸为1,所以第二次迭代时网格尺寸为2。迭代2的网格包含以下点:
2 * [1 0] + x1 = (3.1 - 1.7) 2 * [0 1] + x1 = (1.1 - 3.7) 2 * [1 0] + x1 = (-0.9 - 1.7) 2 * [0 1] + x1 = (1.1 - -0.3)
下图显示了这一点x1
和网格点,以及相应的值ps_示例
.
算法对网格点进行轮询,直到找到一个值小于4.5146的网格点x1
.它找到的第一个这样的点是(-0.9 - 1.7)
,此时目标函数的值为3.25
,因此迭代2的轮询再次成功。该算法设置序列中的第二个点为
X2 = [-0.9 1.7]
由于轮询成功,因此该算法将当前网格大小乘以2,在第三次迭代时获得4的网格大小。
到第四次迭代时,当前的点是
X3 = [-4.9 1.7]
网格尺寸为8,所以网格由点组成
8*[10]+x3=[3.11.7]8*[01]+x3=[-4.9.7]8*[-10]+x3=[-12.9 1.7]8*[0-1]+x3=[-4.9-1.3]
下图显示了网格点及其目标函数值。
在该迭代中,没有一个网格点的目标函数值小于x3
调查结果也是如此不成功的. 在这种情况下,算法不会在下一次迭代中更改当前点。就是,
x4 = x3;
在下一次迭代时,算法将当前网格大小乘以0.5,即默认值MeshContractionFactor
选项,以便下一次迭代的网格大小为4。然后,该算法使用较小的网格大小进行轮询。
设置PollMethod
选择“MADSPositiveBasis2N”
或“MADSPositiveBasisNp1”
原因patternsearch
使用不同的轮询类型,并以不同于其他轮询算法的方式对轮询作出反应。
MADS轮询在每次迭代中使用新生成的伪随机网格向量。这些向量是随机下三角矩阵列中随机洗牌的分量。矩阵的分量的整数大小最大为1/ .在轮询中,网格向量乘以网格大小,所以轮询点可以达到 从现在的角度看。
不成功的民意测验缩小了一个因素的网格4
,忽略MeshContractionFactor
选择。类似地,成功的民意调查将网状结构扩大了一倍4
,忽略网格扩展因子
选择。最大网目尺寸为1
,尽管任何设置MaxMeshSize
选择。
此外,当投票成功时,patternsearch
从成功点开始,再民调一次。这个额外的投票使用相同的网格向量,按因子展开4
在尺寸不足的时候1
.额外的民意调查再次沿着刚刚成功的方向进行。
属性,可以在每次迭代中显示模式搜索的结果显示
选择“通路”
.这使您能够评估模式搜索的进度,并对选项
如果有必要的话)。
通过此设置,模式搜索将在命令行显示有关每个迭代的信息
Iter f-count f(x) MeshSize Method 0 1 4.63474 1 14 4.51464 2 Successful Poll 2 7 3.25 4 Successful Poll 3 10 -0.264905 8 Successful Poll 4 14 -0.264905 4 Refine Mesh
条目成功的调查
在下面方法
指示当前迭代成功。例如,迭代2中的轮询是成功的。因此,迭代2时计算的点的目标函数值如下所示f (x)
,小于迭代1时的值。
在迭代4,条目细化网格
告诉你投票不成功。因此,迭代4中的函数值与迭代3保持不变。
默认情况下,模式搜索在每次成功轮询后将网格大小加倍,在每次不成功轮询后将网格大小减半。
模式搜索在停止之前执行60次迭代。下图显示了在模式搜索的前13次迭代中计算的序列中的点。
点下方的数字表示算法找到该点的第一次迭代。该图仅显示与成功轮询相对应的迭代数,因为最佳点在轮询失败后不会改变。例如,迭代4和5的最佳点与迭代3的最佳点相同。
在每次迭代时,模式搜索对当前网格中的点进行轮询,即计算网格点上的目标函数,看是否有一个函数值小于当前网格点上的函数值。模式搜索轮询如何工作提供轮询示例。属性可以指定定义网格的模式PollMethod
选择。默认的模式,“GPSPositiveBasis2N”
,由以下2N的方向,N为目标函数的自变量个数。
[1 0 0...0]
(0 0 1 0…)
...
(1 0 0 0…)
(1 0 0 0…)
(0 0 1 0…)
0 0 0…1。
例如,如果目标函数有三个自变量,则GPS正基2N
,由以下六个向量组成。
[1 0 0]
(0 1 0)
[0 0 1]
(1 0 0)
(0 1 0)
(0 0 1)。
或者,您可以设置PollMethod
选择“GPSPositiveBasisNp1”
,该模式包括以下内容N+ 1的方向。
[1 0 0...0]
(0 0 1 0…)
...
(1 0 0 0…)
[1 1 1…]。
例如,如果目标函数有三个自变量,则“GPSPositiveBasisNp1”
由以下四个向量组成。
[1 0 0]
(0 1 0)
[0 0 1]
(1 1 1)。
使用模式搜索有时会运行得更快“GPSPositiveBasisNp1”
而不是“GPSPositiveBasis2N”
随着PollMethod
,因为该算法在每次迭代时搜索的点更少。虽然在本例中没有提到,但是在使用“MADSPositiveBasisNp1”
在“MADSPositiveBasis2N”
,对于GSS也是如此。例如,如果在中的线性约束示例上运行模式搜索使用模式搜索和优化实时编辑器任务的约束最小化,算法执行1588个函数计算“GPSPositiveBasis2N”
,默认的PollMethod
,但只有877个函数求值使用“GPSPositiveBasisNp1”
.有关更多细节,请参见比较Poll选项的效率.
但是,如果目标函数有许多局部极小值,则使用“GPSPositiveBasis2N”
随着PollMethod
可能会避免发现不是全局最小值的局部最小值,因为搜索在每次迭代时都会探索当前点周围的更多点。
默认情况下,如果模式搜索发现一个网格点可以改进目标函数的值,它将停止轮询,并将该点设置为下一次迭代的当前点。当发生这种情况时,一些网格点可能不会被轮询。有些未轮询点的目标函数值甚至比模式搜索找到的第一个值还要低。
对于存在多个局部极小值的问题,有时采用轮询模式搜索的方法更为可取全部的每次迭代时网格点,并选择具有最佳目标函数值的网格点。这使模式搜索能够在每次迭代时探索更多点,从而潜在地避免局部最小值而不是全局最小值。让模式搜索轮询整个网格设置UseCompletePoll
选择符合事实的
.
当出现下列任何一种情况时,算法停止:
网目尺寸小于MeshTolerance
选择。
算法执行的迭代次数达到MaxIterations
选择。
算法执行的目标函数求值总数达到MaxFunctionEvaluations
选择。
时间,以秒为单位,算法运行直到它达到MaxTime
选择。
在一次成功的轮询后,前两次迭代中找到的点与网格尺寸之间的距离都小于StepTolerance
选择。
成功轮询后,前两次迭代中目标函数的变化小于FunctionTolerance
选项和网格尺寸小于StepTolerance
选择。
的ConstraintTolerance
选项不用作停止条件。它决定了非线性约束下的可行性。
MADS算法使用了一个称为poll参数的附加参数Δp,在网格大小停止条件中:
Δ在哪里米为网目尺寸。MADS停止标准为:
Δp≤MeshTolerance
.
模式搜索算法对目标函数失效具有鲁棒性。这意味着patternsearch
允许函数评估导致南
,Inf
,或复数值。当目标函数在初始点时x0
是一个实的,有限的值,patternsearch
将轮询点故障视为目标函数值较大,并忽略它们。
例如,如果投票中的所有点都等于南
,patternsearch
认为投票不成功,缩小网格并重新评估。即使民调中有一个点的值比任何一个都小,patternsearch
认为轮询成功,并展开网格。