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

时间:2015-07-03 22:49:02

标签: matlab genetic-algorithm

我正在尝试为GA编写代码以最大限度地降低系统成本,问题在于解决方案会收敛到局部最小值并且卡在其中,因此我无法再改进我的解决方案。 / p>

这可能是我的选择方法导致问题在这里是我所拥有的:

%----------------------------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进行交叉等,有人可以提出解决方案吗?

4 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

嗯,不仅选择/突变/交叉操作员影响能力不会卡在局部最优,而且影响解决方案和健身景观的表现。操作员和代表你可以做些什么,但克服健身状况是棘手的。但即便如此,也有一些概念。

看看一些多样性保留机制(例如健身共享),我强烈建议您查看Novelty Search。这是一个新的(嗯,可能不是,但我学会了它是新的:))概念,你根本不使用健身选择。还有NS和经典健身驱动搜索的组合,在该页面的出版物上查看Mouret的论文,或者查看我的master thesis,这是关于健身和新奇的结合。

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

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