带约束进化算法问题分析Constrained Evolutionary Algorithms

Posted tostq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带约束进化算法问题分析Constrained Evolutionary Algorithms相关的知识,希望对你有一定的参考价值。

经典论文《Evolutionary Algorithms for Constrained Parameter Optimization Problems》对带约束的进化算法进行了综述,本文不涉及其内容的翻译,主要为个人对论文理解和思考。

1. 进化算法定义Evolutionary Algorithms

论文中所讨论的进化算法主要为以遗传算法genetic algorithms等传统进化算法,其解决的问题定义为一个寻优目标优化函数(最大值或最小值)的解x的问题:

其基本思路是根据种群进化的观点,为了达到最大化(或最小化)目标函数,其大体的执行步骤为:

  1. 初始采样生成大量样本x;
  2. 根据目标函数f(x)排序,从中选择一定比例的样本x作为该轮胜出,对应于种群进化的自然选择;
  3. 上一轮胜出的样本,经过自身挠动(Mutation)和彼此交互(Crossover)得到一轮样本,对应于种群进化中基因变异和遗传繁衍;
  4. 重复2->3的过程,直到目标函数f(x)收敛。

遗传算法是一类典型的model-free的算法,其可以用黑盒的方式来解决很多目标函数优化的问题,带约束的优化问题,是指在优化的目标函数外,对样本x本身有约束条件,比如线性规划问题就是一类带约束的优化问题,其可以通过拉格朗日方法来解决。带约束的优化问题可以定义为,下式中表示某一约束条件。

论文发表于近30年前,虽然当前的进化学习有了很大的发展,不仅仅只是遗传算法,其很多算法已经过时,但是其对于model-free带约束的优化问题的解决思路仍然很值得学习。

2. 带约束的进化学习解决思路

A)构造满足约束的样本法

这种方法的思路是指在构造样本时,强制使其满足约束条件,同时在进化中,设计合理的挠动算子使其下轮的样本也天然满足约束条件,此时就能将问题转换为不带约束的优化问题。这种方法大概有两种思路:

  • 当约束条件均为线性的情况下(即可行解空间是凸的),通过初始化大量的满足约束的解,设计合理的进化挠动算子,使其下轮的样本也天然满足约束条件,在线性约束情况下,进化挠动算子满足如下条件得到的下轮样本必然也是满足约束的。

  • 当约束条件不是线性的情况下,我们基于这样的假设:最优点往往位于约束边界上的位置。所以在初始化时,大量筛选恰好满足约束条件的样本,在进化挠动时,根据约束条件合理设计自身挠动(Mutation)算子和彼此交互(Crossover)算子,使下轮样本必然也是满足约束的。论文中给出了如下非线性约束例子:

B) 基于惩罚函数penalty functions的方法

这种方法的思路是原来的优化目标函数的基础上添加了惩罚项,类似于拉格朗日方法,惩罚项一般同约束项的偏离程度有关,其大体上分为如下思路:

  • 静态惩罚权重:是指对不同约束项的偏离程度添加不同的权重值R,下式中f(x)表示原来的优化目标函数,j表示约束条件的标号,h(x)表示同约束项的偏离程度,i表示偏离等级(约束项在比较接近的情况下权重值R可以低一些,但当偏离特别夸张时可以放大)。这个静态惩罚权重最大的问题是当约束项太多时,权重参数也会很多。

  • 动态惩罚项:在静态惩罚项的基础上添加随迭代时间增强的系数,论文中给出一种如下基础形式,基中r,α,β都是超参数,t是迭代轮数

  • 退火惩罚项:也是一种动态惩罚项,基于了模拟退火的理论。

  • 自适应惩罚项:其基于的思想是如果最优个体持续不满足约束项,则加大惩罚,如果最优个体持续满足约束项,则减少惩罚,论文中给出一种形式如下,其中λ是惩罚项的权重值,S满足约束项的样本,β都是超参数。

  • 双组惩罚项选优法:这种方法基于这样的思想:当惩罚项较小时,得到解虽然目标函数值高,但约束项很难满足,而惩罚项较大时,约束项能满足而目标函数往往不是最优。因此分别设计两个优化任务,一个惩罚项较小,另一个惩罚项较大,分别各自生成一组最优样本,然后结合生成子样本。这种方法认为惩罚项较小的解往往分布在不可用空间,惩罚项较小的解往往分布在可用空间,两者结合会逼近不可用空间和可用空间的边界,而最优解很多情况下都是在这个边界上。
  • 绝对惩罚法:这种方法是对不可行约束项添加一个较大惩罚项,其使得所有可行解的优化函数都比所有不可行解的优化函数要大:

C) 基于对可行解搜索的方法

这种方法的思路是从可行空间的解出发去搜索最优解,其大体上分为如下几类:

  • 行为记忆法behavioral memory method:这种方法针对于约束条件很多的情况下,先寻找到基本能满足一个约束条件的解空间,然后依次在该空间继续寻找满足剩下约束条件的解,直到到最后约束条件时,直接寻找满足所有约束条件的目标函数最优的解。这种方法通过不断压缩可行解空间的方式,当样本足够的情况下能拟合多约束条件解空间边界。
    • 只考虑满足约束1下进行寻优,直到解空间中特定比例的样本都满足约束1;
    • 在上轮样本空间上,只考虑满足约束2下进化寻优,直到解空间中特定比例的样本都满足约束2;
    • 重复上述过程直到最后一个约束条件,只考虑优化目标函数,筛选满足所有约束的样本。
  • 不可用样本修复法:这种方法将样本分成仅满足线性约束的空间和满足全部约束的空间,其中提供了虽不完全可行但更为贴近最优目标的样本,而提供完全满足约束的解。所以通过将的样本进行cross加工,使其保留两部分的特性,其主要的执行要点如下:
    • 初始满足线性约束的空间并评估其目标,初始化方式可以采用上方A中提到的方法
    • 初始化满足全部约束的空间并评估其目标
    • 中筛选样本解,目标函数更高的有更大机率被选中
    • 评估中的样本,如果不可行,则根据中的可行样本做cross修复加工得到
    • 选择经过反复加工直到是可行的,当则将用替换空间的,同时一定比例的用替换空间的,以增加空间的变动性。
    • 空间迭代是在空间每经过k轮迭代后进行的,因为主要是用于修复加工,而才是用于搜索。其迭代过程为生成(根据上轮生成当前样本)、评估(评估其目标函数值)、筛选(按目标函数排序筛选满足约束的解) 

D) 其他方法

  • 混合法:这种方法是将进化算法与其中确定性的数值计算结合起来,比如针对于存在大量局部最优点的非凸优化问题,可以先通过进化学习找到全局最优点的附近位置,然后再通过类似于梯度下降法的数值计算的方式更精确找到最优点。
  • 多目标优化法:这种方法是将优化函数和约束项偏离值以一个向量表示,将其视为一个多目标优化问题。

以上是关于带约束进化算法问题分析Constrained Evolutionary Algorithms的主要内容,如果未能解决你的问题,请参考以下文章

装配线调度基于遗传算法混合模拟退火算法求解带约束的流水线调度问题matlab源码

错误记录约束布局报错 ( Missing Constraints in ConstraintLayout. This view is not constrained. It only has )

论文翻译:BinaryNet: Training Deep Neural Networks with Weights and Activations Constrained to +1 or ?1

[LeetCode in Python] 1425 (H) constrained subsequence sum 带限制的子序列和

matplotlib 进阶之Constrained Layout Guide

遗传算法混合模拟退火算法求解带约束的流水线调度问题matlab代码