gamultiobj 算法
简介
本节描述了 gamultiobj 用于在帕累托前沿创建一组点的算法。gamultiobj 使用受控的精英遗传算法(NSGA-II [3] 的变体)。精英遗传算法始终偏爱具有更好适应度值(排名)的个体。受控精英遗传算法也偏爱那些有助于增加种群多样性的个体,即使它们的适应度值较低也是如此。
多目标术语
gamultiobj 算法的大部分术语与 遗传算法术语 相同。但是,还有一些其他术语,将在本节中进行描述。有关术语和算法的更多详细信息,请参阅 Deb [3]。
支配关系 - 当满足以下条件时,对于向量值目标函数 x,点 y 支配点 f:
fi(x) ≤ fi(y)(对于所有 i)。
fj(x) < fj(y)(对于某些 j)。
术语“支配”与术语“劣于”相对应:当 x 劣于 y 时,y 支配 x。
对于点集合 P,其非支配集 Q 是点集合 P 中不被 P 中任何其他点支配的点所构成的集合。
排名 - 对于可行个体,对个体的排名有一个迭代定义。排名 1 的个体不受任何其他个体支配。排名 2 的个体仅受排名 1 的个体支配。一般而言,排名
k的个体仅受排名k - 1或更靠前的个体支配。
排名越靠前的个体被选中的机会就越大(排名越靠前越好)。
所有不可行个体的排名都比任何可行个体的排名差。在不可行种群中,排名是按不可行性测度排序的顺序,加上可行成员的最后排名。
gamultiobj使用排名来选择父代。拥挤距离 - 拥挤距离是衡量个体与其最近邻居的接近程度的标准。
gamultiobj算法测量同一排名的个体之间的距离。默认情况下,该算法在目标函数空间中测量距离。但是,您可以通过将DistanceMeasureFcn选项设置为{@distancecrowding,"genotype"}来测量决策变量空间(也称为设计变量空间)中的距离。该算法将极端位置上个体的距离设置为
Inf。对于其余个体,该算法将距离计算为该个体已排序邻居之间归一化绝对距离在各维度上的总和。换句话说,对于维度m和已排序、缩放的个体i:distance(i) = sum_m(x(m,i+1) - x(m,i-1)).该算法对每个维度分别进行排序,因此术语邻居表示每个维度上的邻居。
同一排名的个体,距离越大,被选择的机会就越大(距离越大越好)。
您可以选择与默认的
@distancecrowding函数不同的拥挤距离测量。请参阅多目标选项。拥挤距离是计算广度的一个因素,是停止条件的一部分。当两个选定的个体具有相同的排名时,拥挤距离也在锦标赛选择中用作决胜局。
广度 - 广度是帕累托集运动的测度。为了计算广度,
gamultiobj算法首先评估 σ,即位于有限距离的帕累托前沿上的点的拥挤距离测度的标准差。Q 是这些点的数量,d 是这些点之间的平均距离测度。然后,算法评估 μ,即该指数的当前最小值帕累托点与上一次迭代中该指数的最小点之间的差的范数在 k 个目标函数指数上的总和。则广度值为spread= (μ + σ)/(μ + Qd).当极端目标函数值在迭代之间变化不大(即,μ 较小)以及帕累托前沿上的点分布均匀(即,σ 较小)时,广度较小。
gamultiobj在停止条件下使用了广度。当广度没有发生太大变化且最终广度小于近期广度的平均值时,迭代停止。请参阅停止条件。
初始化
gamultiobj 算法的第一步是创建初始种群。算法创建种群,或者您可以使用 InitialPopulationMatrix 选项给出初始种群或部分初始种群(请参阅 种群选项)。种群中的个体数量设置为 PopulationSize 选项的值。默认情况下,gamultiobj 创建的种群在边界和线性约束方面是可行的,但在非线性约束方面不一定是可行的。默认的生成算法是:
"gacreationsobol"当问题存在整数约束时"gacreationlinearfeasible"当问题包含线性约束且没有整数约束时"gacreationuniform"否则
gamultiobj 评估种群的目标函数和约束,并使用这些值为种群创建分数。
迭代次数
gamultiobj 算法的主要迭代如下。
使用当前种群的选择功能为下一代选择父母。
gamultiobj唯一可用的内置选择函数是二元锦标赛。您还可以使用自定义选择函数。通过变异和交叉从选定的父代中创建子代。
通过计算目标函数值和可行性对子代们进行评分。
将当前种群和子代合并为一个矩阵,即扩展种群。
计算扩展种群中所有个体的排名和拥挤距离。
通过保留每个排名的适当个体数量,将扩展种群修剪为拥有
PopulationSize个个体。
当问题具有整数或线性约束(包括边界)时,算法会修改种群的进化。请参阅整数和线性约束。当问题存在非线性约束时,该算法会按照非线性约束中的描述修改种群的演化过程。
停止条件
适用以下停止条件。每个停止条件都与一个退出标志相关联。
| exitflag 值 | 停止条件 |
|---|---|
1 |
|
0 | 超过最大代数 |
-1 | 优化被输出函数或绘图函数终止 |
-2 | 未找到可行点 |
-5 | 超出时间限制 |
对于退出标志 1,广度相对变化的几何平均值是第 k 个前代相对变化的 ½ k。
整数和线性约束
当问题具有整数或线性约束(包括边界)时,算法会修改种群的进化。
当问题同时具有整数和线性约束时,软件会修改所有生成的个体,使其根据这些约束变得可行。您可以使用任何创建、变异或交叉函数,并且整个种群在整数和线性约束方面仍然可行。
当问题仅有线性约束时,软件不会修改个体以使其符合这些约束的可行。您必须使用创建、变异和交叉函数来保持相对于线性约束的可行性。否则,种群将变得不可行,结果也将不可行。默认运算符保持线性可行性:
gacreationlinearfeasible或gacreationnonlinearfeasible用于创建,mutationadaptfeasible用于变异,crossoverintermediate用于交叉。
整数和线性可行性的内部算法与 surrogateopt 的内部算法类似。当问题具有整数和线性约束时,算法首先创建线性可行点。然后,该算法尝试通过使用启发式方法将线性可行点四舍五入为整数来满足整数约束,该启发式方法试图保持点的线性可行。当此过程无法获取足够的可行点来构建种群时,算法将调用 intlinprog 来尝试查找更多符合边界、线性约束和整数约束的可行点。
之后,当变异或交叉产生新的种群成员时,算法通过采取类似的步骤确保新成员是整数且线性可行的。如果有必要,每个新成员都会被修改,以尽可能接近其原始值,同时满足整数和线性约束和边界。
非线性约束
当问题存在非线性约束时,gamultiobj 会按以下方式调整种群评分。
gamultiobj对所有个体计算非线性约束函数的值。每个不可行性超过ConstraintTolerance选项值的个体均被视为不可行。其余个体的方案是可行的,其评分方式与无约束情况完全相同。
该算法计算所有不可行个体的总不可行性(即约束函数的正部分之和)。该不可行个体的评分,加上所有可行个体中的最差(最高)评分,即为该不可行个体的最终评分。该评分与
ga中的惩罚算法评分类似;参阅惩罚算法。
参考文献
[1] Censor, Y. “Pareto Optimality in Multiobjective Problems,” Appl. Math. Optimiz., Vol. 4, pp 41–59, 1977.
[2] Da Cunha, N. O. and E. Polak. “Constrained Minimization Under Vector-Valued Criteria in Finite Dimensional Spaces,” J. Math. Anal. Appl., Vol. 19, pp 103–124, 1967.
[3] Deb, Kalyanmoy. “Multi-Objective Optimization using Evolutionary Algorithms,” John Wiley & Sons, Ltd, Chichester, England, 2001.
[4] Zadeh, L. A. “Optimality and Nonscalar-Valued Performance Criteria,” IEEE Trans. Automat. Contr., Vol. AC-8, p. 1, 1963.