几代后遗传算法选择方法停留在局部最小值

Genetic algorithm selection method stuck at local minimum after few generations

我正在尝试为 GA 编写代码以最小化系统成本,问题是解决方案收敛于局部最小值并陷入其中,因此我无法再改进我的解决方案。

可能是我的选择方法导致了这个问题,我所拥有的是:

%----------------------------selection (fittest half) ----------------

probability=ones(1,population/2);
[,IX]=sort(cost(1:population))
dd=sum(1:population);
probability(1:(population/2))=[1:population/2];
probability=fliplr(probability)/dd;


Indexx=IX(1:population/2);

然后我使用 Indexx 进行交叉等,有人可以提出解决方案吗?

一般来说,优化求解算法会收敛到局部最小值。要在遗传算法中摆脱这个局部最小值,您可以使用突变。突变应用于一代人的某些个体。通常,突变是不好的,会使结果更糟,不会被选为下一代,但有时,突变会导致个体接近不同的(有时更好的)局部最小值。变异率越高,搜索到的'space'越多,找到全局最小值的几率就越大。不过有一个问题;如果变异率太高,算法将不再收敛。

希望这对您的问题有所帮助。

嗯,不仅 selection/mutation/crossover 运算符会影响不陷入局部最优的能力,还会影响解的表示和适应度景观。您可以对操作员和代表做些事情,但要克服健身环境是很棘手的。但即使是这样也有概念。

看看一些多样性保护机制(例如适应度共享),我强烈建议看看 Novelty Search. It's a new (well, not anymore probably, but I learned it as new :)) concept where you don't use the fitness for selection at all. There are also combinations of NS and classical fitness-driven search, look at the Mouret's paper at that page's Publications, or look at my master thesis,它是关于结合适应度和新颖性的。

也许我的回答来得太迟,无法满足您的需求,无论如何:从 GA 不打算在搜索中找到最佳解决方案这一点开始 space,如果您的系统陷入局部最小值并且假设这种最小值的锥体足够陡峭,摆脱它的方法是 'shake' 你的人口(即引入噪音)。一种有效的技术是只要稳定世代的数量增加,就可以降低交叉概率并增加突变。与此同时,甚至在开始降低交叉概率之前,您可以开始在您的种群中引入新鲜的、随机的个体,只要您的稳定世代增加,就可以增加它们的数量。 一旦健身开始再次滚动,回到初始配置。顺便说一下,一个很好的训练方法,同时避免局部最小值,是随机选择交叉等位基因并与大量人群一起工作,只为下一代选择最好的 1-2%,当然这在很大程度上取决于你搜索 space.

我的回答是基于我使用遗传算法的工作经历的一个特定案例。我使用了 pymoo,一个非常好的 python 框架来解决多 Objective 问题。我遇到了和你类似的问题,也许不一样,但我想把它写在这里以防有人遇到同样的事情,尤其是使用 pymoo。

我不得不解决一个有很多约束的二次问题,这个问题有 2 个目标和两种类型的变量,二元变量和实变量,并且实变量在某些约束条件下与二元变量有依赖关系。我有一个自定义抽样算法,它生成了一个非常多样化的初始种群,满足了问题的所有限制。我使用 pymoo 的内置运算符进行变异、交叉和生存,问题与 生存 完全一致。大多数survivals方法保留满足约束(可行解)的种群成员,变异和交叉算子没有生成可行种群成员,那么初始种群用我生成生存法无法克服抽样问题。 将突变率设置得尽可能高并不会离开初始种群(我使用的是均匀交叉和 bin bitflip 突变)。所以我不得不做我自己的变异和交叉算法,我还引入了一个 repair 运算符来处理每次迭代中的约束!! 可能不是参数设置的问题,而是运算符的设置以及它们之间的关系。