paretosearch
算法paretosearch
算法概述的paretosearch
算法在一组点上使用模式搜索来迭代搜索非控制点。看到多目标的术语。模式搜索满足每次迭代的所有边界和线性约束。
从理论上讲,该算法收敛于真正的帕累托前沿附近的点。有关收敛性的讨论和证明,请参见库斯托迪奥等人。[1],其证明适用于具有Lipschitz连续目标和约束的问题。
paretosearch
算法paretosearch
使用许多中间量和公差在其算法的。
数量 | 定义 |
---|---|
排名 | 一个点的排名有一个反复的定义。
|
体积 | 设定点的超体积p在满足不等式的目标函数空间中,对于每一个指标j, f我(j)<p我 哪里f我(j)是我的个分量j第个目标函数值在Pareto集合中,和M我的上界是什么我为帕累托集合中所有点的第个分量,在该图中,M称为参考点。图中的灰色阴影表示一些计算算法在包含-排除计算中使用的部分体积。 详情请见Fleischer[3]。
体积变化是停止算法的一个因素。有关详细信息,请参阅停止条件。 |
距离 | 距离是一个人与其最近的邻居的亲密程度的度量。的 该算法将个人的距离在极限位置
算法会对每个维度分别进行排序,所以这个词邻居表示每个维度中的邻居。 具有更高距离的相同等级的个体有更高的选择机会(更高的距离越好)。 距离在传播的计算,这是一个停止准则的一部分的一个因素。有关详细信息,请参阅停止条件。 |
传播 | 扩散是帕累托组的运动的量度。为了计算蔓延,
价差是很小的时候极端目标函数值不重复之间发生太大的变化(即,μ小),并当上了帕累托点前是均匀涂抹(即,σ是小的)。
|
ParetoSetChangeTolerance |
停车条件进行搜索。paretosearch 停止时,体积,蔓延,或距离不改变超过ParetoSetChangeTolerance 在迭代的一个窗口。有关详细信息,请参阅停止条件。 |
MinPollFraction |
的迭代期间位置,以轮询的最小分数。 方法时,此选项不适用 |
paretosearch
算法要创建初始点的集合,paretosearch
生成options.ParetoSetSize
默认情况下,基于问题边界的准随机样本点。详情请见Bratley和Fox[2]。当问题有超过500个维度时,paretosearch
使用拉丁超立方抽样生成初始点。
如果一个分量没有边界,paretosearch
使用一个人工下限的-10年
和人工上限的10
。
如果一个组件只有一个边界,paretosearch
使用该边界作为宽度区间的端点20 + 2 * abs(绑定)
。例如,如果一个分量没有上界,而有一个15的下界,paretosearch
使用区间宽度20 + 2*15 = 55,因此使用人为的上限15 + 55 = 70。
如果你传入一些初始点options.InitialPoints
,然后paretosearch
用这些点作为初始点。paretosearch
生成更多的点,如果需要,至少获得options.ParetoSetSize
初始点。
paretosearch
然后检查初始点,以确保它们对于边界和线性约束是可行的。如果有必要,paretosearch
通过求解线性规划问题,将初始点投射到线性可行点的线性子空间上。在这种情况下,这个过程会导致一些点重合paretosearch
删除任何重复的点。paretosearch
不为人工边界更改初始点,仅为指定的边界和线性约束。
在移动这些点以满足线性约束条件后,如有必要,paretosearch
检查点是否满足非线性约束。paretosearch
给人的惩罚值天道酬勤
到不满足所有非线性约束的任意点。然后paretosearch
计算剩余可行点的目标函数值。
目前,paretosearch
不支持非线性等式约万博1manbetx束量表(x) = 0
。
paretosearch
维持两组点:
存档
-一个结构,其中包含与以下网格大小相关联的非支配点options.MeshTolerance
并满足所有约束中options.ConstraintTolerance
。的存档
结构只包含2 * options.ParetoSetSize
点和最初是空的。每一个点的存档
包含关联的网格大小,即生成该点的网格大小。
迭代
-一个包含非控制点的结构,可能有一些控制点与较大的网格尺寸或不可行。每一个点的迭代
包含一个相关联的网目尺寸。迭代
包含不超过options.ParetoSetSize
点。
paretosearch
从投票点迭代
,与无角点从点继承关联的网目尺寸在迭代
。的paretosearch
算法使用维持相对于边界和所有线性约束可行性调查。
如果问题有非线性约束,paretosearch
计算每个投票点的可行性。paretosearch
从可行点的分数保持不可行点的得分分别。一个可行的点的分数是该点的目标函数值的向量。不可行点的得分是非线性infeasibilities的总和。
paretosearch
调查至少MinPollFraction
*(模式中的点的数量)中每个点的位置迭代
。如果投票结果至少给出了一个与现任(原)点相对的非优势点,那么投票就被认为是成功的。否则,paretosearch
继续轮询,直到找到一个非控制点或模式中的点耗尽为止。如果paretosearch
用完点,并且不会产生非支配点,paretosearch
声明轮询不成功,并将网格大小减半。
如果民调发现非优势点,paretosearch
反复延伸成功方向投票,倍增每次网眼尺寸,直到延伸产生主导点。在此扩展,如果网眼大小超过options.MaxMeshSize
(默认值:天道酬勤
),投票停止。如果目标函数值降低到负
,paretosearch
声明问题无界和停止。
存档
和迭代
结构在所有点的轮询之后迭代
,该算法在该点检查新点一起迭代
和存档
结构。paretosearch
计算每个点的秩或帕累托前沿数,然后执行以下操作。
移除所有不在第1等级的点存档
。
马克的新秩1
插入点迭代
。
标出可行点迭代
谁的关联网格大小小于options.MeshTolerance
为转移存档
。
标出控制点迭代
仅用于卸下,如果他们阻止新的非支配点被添加到迭代
。
paretosearch
然后计算每个点的体积和距离。如果存档
是否会因为包含标记点而溢出,那么容量最大的点就会占据存档
,和其他人离开。同样,新的点标记为除迭代
输入迭代
在他们的卷顺序。
如果迭代
是满的,没有优势点,然后呢paretosearch
毫无意义迭代
并声明迭代不成功。paretosearch
将网格大小乘进去迭代
的1/2。
对于三个或更少的目标函数,paretosearch
使用量和蔓延作为停止措施。对于四个或更多的目标,paretosearch
使用距离和蔓延的措施停止。在此讨论的其余部分,这两个措施paretosearch
用途表示适用措施。
该算法保持了适用措施的最后八个值的向量。经过8次迭代后,算法在每次迭代开始时检查两个适用的度量值,其中托尔= options.ParetoSetChangeTolerance
:
spread converged = abs(spread(end - 1) - spread(end)) <= tol*max(1,spread(end - 1));
volumeConverged = ABS(体积(结束 - 1) - 体积(结束))<= TOL *最大(1,体积(结束 - 1));
distanceConverged = abs(距离(端- 1)-距离(端))<= tol*max(1,距离(端- 1));
如果任何一个适用的测试是真正
,算法停止。否则,该算法计算的最大平方项的平方项的傅里叶变换的适用措施减去第一项。然后,算法将maxima与它们删除的项(转换的DC组件)进行比较。如果删除的项大于100 * TOL *(最大所有其他条款的)
,则算法停止。该测试基本上确定的措施的顺序没有波动,因此,已经收敛。
此外,绘图函数或输出函数可以停止算法,或者算法可以因为超过时间限制或函数计算限制而停止。
该算法返回帕累托前面的要点如下。
paretosearch
把这些点结合起来存档
和迭代
成一个集合。
当有三个或更少的目标函数,paretosearch
从量最大到最小的返回点,出至多ParetoSetSize
点。
当有四个或更多的目标函数时,paretosearch
返回从最大距离到最小距离,到最大距离的点ParetoSetSize
点。
当paretosearch
以并行或向量化方式计算目标函数值(UseParallel
是真正
要么UseVectorized
是真正
),算法有一些更改。
当UseVectorized
是真正
,paretosearch
忽略了MinPollFraction
选项并计算模式中的所有轮询点。
当并行计算时,paretosearch
依次检查每一点迭代
并从每个点执行一个并行轮询。回国后MinPollFraction
投票点的分数,paretosearch
确定是否有任何投票点支配基点。如果是这样,投票就被认为是成功的,任何其他平行的评估都将停止。如果没有,则继续进行投票,直到出现一个控制点或投票结束。
paretosearch
对工作人员或以向量化的方式执行目标函数评估,但不同时执行这两种方式。如果你同时设置UseParallel
和UseVectorized
来真正
,paretosearch
计算的目标函数值在工人平行的,但不是在向量化的方式。在这种情况下,paretosearch
忽略了MinPollFraction
选项并计算模式中的所有轮询点。
paretosearch
很快以最快的方式运行paretosearch
取决于几个因素。
如果目标函数的评价是缓慢的,那么它通常最快方法是使用并行计算。在并行计算的开销可能是巨大的,当目标函数的评价是快,但是当他们是缓慢的,通常最好使用更多的计算能力。
并行计算需要一个并行计算工具箱许可证。
如果目标函数评估不是很耗时,那么使用向量化评估通常是最快的。然而,情况并非总是如此,因为向量化计算可以计算整个模式,而串行计算只需要模式的一小部分。特别是在高维情况下,这种评估的减少会导致对某些问题的串行评估更快。
要使用矢量计算,你的目标函数必须接受行任意数量的矩阵。每一行代表一个点来评价。目标函数必须返回目标函数值的矩阵具有相同数目的行,因为它接受,与一列用于每个目标函数。对于单个目标的讨论,请参阅矢量化的健身功能(遗传算法
)或矢量化目标函数(patternsearch
)。
[1]库斯托迪奥,A. L., J. F. A.马德拉,A. F.瓦兹和L. N.维森特。直接多搜索多目标优化。暹罗j . Optim。,21(3), 2011, pp. 1109–1140. Preprint available athttps://estudogeral.sib.uc.pt/bitstream/10316/13698/1/Direct%20multisearch%20for%20multiobjective%20optimization.pdf。
[2] Bratley, P.和B. L. Fox。算法659:实现Sobol的准随机序列发生器。ACM跨。数学。软件14,1988年,第88-100。
[3]弗莱舍,M.帕累托舰的措施:应用到多目标超启发式。在2003年4月于葡萄牙Faro举办的“第二届演化多准则优化国际会议论文集- emo”中。由Springer-Verlag在计算机科学系列讲义中发表,第2632卷,第519-533页。预印在http://www.dtic.mil/get-tr-doc/pdf?AD=ADA441037。