您的位置:首页 > 其它

遗传算法与直接搜索工具箱学习笔记 七-----模式搜索工作原理详解

2009-11-25 16:53 477 查看
本节主要讲述模式搜索的工作细节。

模式搜索算法就是寻找x0, x1, x2,...,这样的一系列的点,这些点逐渐在靠近最优值。在这个点的序列中,后一个点相对于前一个点在逐渐减小(轮询成功)或者保持不变(轮询失败)。本节就详细介绍在例子ps_example(笔记五)中寻找最优解过程的工作细节。

为了描述上的简单,我们只考虑下面的情况:

1.使用GPS算法。

2.GPS算法使用的模式是最大正交基组成的模式。

3.在图形用户界面中MESH面板中,Scale设置为“off”

一、成功的轮询

GPS在提供的x0=[2.1 1.7]起始点开始运行。

1.1第一次迭代

第一次迭代,网格尺寸(SIZE)是1,算法将起始点与模式向量相加,得到下面的结果

[1 0] + x0 = [3.1 1.7]
[0 1] + x0 = [2.1 2.7]
[-1 0] + x0 = [1.1 1.7]
[0 -1] + x0 = [2.1 0.7]

算法然后计算目标函数在网格点中的函数值,计算点的顺序就如上面式子的顺序。

下面的图形表示了起始点与网格点的目标函数值



算法开始轮询搜索网格点,因为x0=[2.1 1.7]点的函数值是4.6347,所以第一个比4.6247小的点是[1.1 1.7],这个点的函数值是4.5146,因此第一轮轮询是成功的,因此将当前点x1设为[1.1 1.7]。即x1=[1.1 1.7]。

1.2 第二次迭代

经过一次成功的轮询,算法将当前的网格尺寸(1)乘以2,这样在本次的迭代中,网格尺寸将是2,有些人可能问了,算法中这个膨胀的倍数2是不是固定的,能不能修改呢?当然可以修改了,在optimtool操作界面中,在MESH面板中Expansion factor(膨胀系数)就是用来控制这个数字的。在第二次迭代过程中,网格包含以下的一些点。

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]

按照第一步的方法,画出图形



在本次轮询中,发现点[-0.9 1.7]的函数值3.25比较优秀,因此x2=[-0.9 1.7]。因为本次轮询成功,所以算法在第三次迭代时,会将网格的尺寸变为4.

二、不成功的轮询

在算法进行第四次迭代时,x3 = [-4.9 1.7],此时网格尺寸是8,因此网格包含下面的点

8*[1 0] + x3 = [3.1 1.7]
8*[0 1] + x3 = [-4.9 9.7]
8*[-1 0] + x3 = [-12.9 1.7]
8*[0 -1] + x3 = [-4.9 -1.3]

下面的图显示了各个点的目标函数值



在本次轮询中,没有一个点的函数值能够比当前点的函数值还要小,因此轮询失败,当前点还是x3,没有发生改变,因此x4=x3.

在下一次迭代中,算法会首先将网格尺寸乘以0.5,然后再轮询网格点。这里的0.5叫收缩系数,这个系数可以在mesh面板中的Contraction factor 选项进行修改。

三、显示每步迭代的详细信息

其实算法每步迭代的详细信息都可以显示出来,可以通过设置Display to command window面板中Level of display为iterative。如下图



这将使你详细了解算法运行的详细过程

在命令窗口中显示的算法运行的详细过程是

Iter f-count f(x) MeshSize Method
0 1 4.63474 1
1 4 4.29487 2 Successful Poll
2 7 0.324468 4 Successful Poll
3 11 0.324468 2 Refine Mesh
4 15 0.324468 1 Refine Mesh

至于每一列的详细的介绍就不多介绍了,其中在Method列下面的Refine Mesh就是轮询失败的情况。

四、模式搜索的停止标准

模式搜索挺值的标准都列在模式搜索图形用户界面的Stopping criteria面板中,见下图



在上面列举中的标准中,只要算法运行过程中,有一项符合标准,算法就会停止运行,并把停止运行的原因在运行结果的窗口告诉你。



好了,这一节到这里就结束吧,太长了,写的有点累了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐