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

use*_*145 3 matlab genetic-algorithm

我正在尝试为 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);
Run Code Online (Sandbox Code Playgroud)

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

zeg*_*jan 7

嗯,不仅选择/变异/交叉算子影响不陷入局部最优的能力,而且还影响解决方案的表示和适应度景观。你可以对运营商和代表做点什么,但克服健身环境是很棘手的。但即使如此,也有一些概念。

看看一些多样性保护机制(例如健身共享),我强烈建议看看新颖性搜索。这是一个新的(好吧,可能不再是了,但我把它当作新的:))概念,你根本不使用适应度来进行选择。还有 NS 和经典的健身驱动搜索的组合,请查看该页面出版物中 Mouret 的论文,或者查看我的硕士论文,该论文都是关于健身和新颖性的结合。


Pie*_*345 6

通常,优化求解算法收敛到局部最小值。为了摆脱遗传算法中的这个局部最小值,您可以使用突变。突变适用于一代人的某些个体。通常,突变会很糟糕,使结果更糟,它们不会被选择用于下一代,但有时,突变会导致个体接近不同(有时更好)的局部最小值。突变率越高,搜索的“空间”就越多,找到全局最小值的机会就越大。不过有一个问题;如果变异率太高,算法将不再收敛。

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

  • 如果算法以 100% 的突变率(每个个体都有突变)收敛,则说明有些事情是不对的。我不能确切地说出问题是什么,但确实可能是一个选择问题。交叉是一个很好的概念,因为它利用其他个体的“良好”特性来形成他们的后代,而不是仅仅应用突变并希望它会更好(交叉比突变更不暴力,但两者或组合都可以很好地工作)。也许您可以打印几个小世代,看看是否发生了奇怪的事情(例如,许多相同的子代具有 100% 的突变)。 (2认同)
  • 有了100%的突变,每一代中最好的个体总会发生突变,不再是那么好的个体。如果算法不断收敛,我认为突变是以错误的方式实现的,或者你的选择是从上一代以外的东西中选择的。您可以添加您的突变代码吗? (2认同)