Matlab中GlobalSearch算法基本思路

Matlab本身的GlobalSearch英文说明,看得让人有点晕,自己看了一些资料,结合了自己的理解,尽力翻译过来,方便有需要的朋友一起学习,翻译和数学水平都有限,请大家不吝赐教,但是别拍砖啊!谢谢!

正文开始

1.Run fmincon from x0
首先,利用fmincon以x0为初始点做局部优化,获得终止点,记为点A。
某一点的评分函数(score function),等于该点目标函数值+ 惩罚因子*限制条件越界程度,因此可行点的评分函数值等于其目标函数值。评分函数值越小表示该点越优。
2.Generate Trial Points
使用scatter search algorithm生成NumTrialPoints个测试点,组成测试点集合(已经得到了一定程度的全局优化搜索,该集合是较优秀的)。
3.Obtain Stage 1 Start Point, Run
从测试点集合选出部分测试点(抽取比例没有说明,估计30%这个样子吧),选择其中最优点,记为点B。以点B为初始点利用fmincon做局部优化,获得终止点,记为点C。将已经测试过点从测试点集合删除。
4.Initialize Basins, Counters, Threshold
比较点A与点C的评分函数值,取其中小的一个赋值给localSolverThreshold。
GlobalSearch的启发搜索是基于一定假设的,那就是“引力池”(basin of attraction,局部解周围的局部目标函数)是球面的(译注:应该是近似于半球面)。“引力池”是以局部解为中心的。“引力池”的半径设为初始点到局部解的距离。每个近似最优解都对应一个“引力池”。


GlobalSearch中,一个“引力池”有1个计数器:
计数器C1:落入该“引力池”的测试点个数(距离局部解小于DistanceThresholdFactor*半径)。
GlobalSearch中,总体有一个计数器(C2全局就一个):

计数器C2:分数比localSolverThreshold大的测试点个数。


此时只有一个“引力池”,点A与点C中目标值小的一个,这个点也是当前仅有的近似最优解。


5.Begin Main Loop
///循环遍历每个测试点//

//判断是否需要局部优化
遍历测试点集合(第一阶段用于建立“引力池”的测试点已经被删去了),当测试点p满足以下全部条件时,利用fmincon做局部
优化:
1)点p不落于任何现有“引力池”;
2)点p的分数比localSolverThreshold还低;
3)点p是可行点。StartPointsToRun属性被设置为'bounds'或'bounds-ineqs'时,该条件才有效。

//局部优化
(i)所有C1与C2
计数器清零;(因为已经达到了C1与C2的目的,那就是放松点p局部优化的限制条件,所以要重新加强限制条件,使得点p不能轻易进行局部优化,以达到限制“近似最优解”数量的目的);

(ii)如果点p符合局部优化条件,那么利用fmincon做局部优化,有两种可能结果:
1)与每个现有局部解比较,如果点p的位置离局部解都较远,或者点p的目标函数值与局部解都差较大。此时,算法认为点p是一个新的“引力池”,并新建一个GlobalOptimSolution。设从点p找到的局部解为点xp,即近似的最优解
2)与每个现有局部解比较,如果存在一个局部解点o,点p的位置和目标值与该解都十分相近。那么算法认为从点o与点p相当,修改点o的GlobalOptimSolution中的X0属性,把点p加入X0(译注:就是说从点p可到达点o)。
(iii)将localSolverThreshold设为点p的目标函数值(这是当前全局最小的了,其实xp应该更小)。同时设置xp的“引力池”的半径为xp与p的距离。


//不局部优化(计数器,以及基于计数器的调整,都是为了使后续测试点有机会满足局部优化的条件,来产生新的“引力池”)
(i)更新计数器。对点p落入的所有“引力池”C1计数器加1,其他“引力池”C1计数器清零;如果点p的目标值大于等于localSolverThreshold,则C2计数器加1,否则C2计数器清零;
(ii)根据计数器调整系统参数。如果某“引力池”C1达到MaxWaitCycle,缩小其半径并C1清零;如果C2达到MaxWaitCycle,放松localSolverThreshold并C2清零;

///结束循环遍历每个测试点//
6.Create GlobalOptimSolution
将所有的局部解GlobalOptimSolution排序输出。

附录:
Scatter Search算法
1.多样化地产生很多测试点,从中挑选优秀点组成reference solutions(索引点集);
2.从索引点集中抽取N个子集(可采用聚类的方式选择子集),每个子集中的点线性组合,从而生成新点;
3.将第二步的新点集作为测试点集,回到第一步,从中挑选优秀点更新索引点集(保留一部分历史优秀点),直到满足停机准则。


Scatter Search算法假设前提
1.最优解的信息,是被较优解的信息所包含的;
2.线性组合,应能够保证产生的新点可以跳出原始点集的范围;新点是同过启发式择优过程产生的。这两点保证了多样性和质量;
3.多个较优解的同时产生,提升了挖掘最优解信息的几率。

可以给我发邮件,如果需要讨论的话,以上有些地方也许说的不对,也请指正,方便大家学到真正的知识。

你可能感兴趣的:(科研,软件理论,matlab,算法,测试,优化,search,reference)