提问者:小点点

遗传算法问题


我正在实施NSGA II遗传算法,为我的大学制定一套时间表。我遇到了解决方案变化的问题。

我的算法在初始化、突变和交叉方面运行良好,但在最后一代之后,在查看我的解决方案时,它们都是相同的,例如我在一代中有200个,也许其中64个彼此相同,54个彼此相同等。

我的问题是这可能是什么原因造成的?交叉和变异的最佳形式是什么?

世代大小、世代数量、突变率和交叉率是否有规范?

目前情况如下:

    < li >随机生成300个解决方案 < li >计算适合度和排名 < li >挑选200个最佳解决方案 < li >变异其中的5%并产生80个孩子 < li >重新计算和排名 < li >挑选出最优秀的300名员工,将其带入下一代 < li >重复

共3个答案

匿名用户

我相信你的算法可能没有错误。这是GA的一个众所周知的问题。如果你想有多种解决方案,你应该实现一些Niching方法。它的想法是惩罚你人口中的类似个体。你可以找出一些个体相似性的启发式方法,将相似的个体排除在人群之外,或者消除个体的适应性。这将使您的种群更加多样化,并且不会允许您的变异操作员选择和进化相同的个体。看看萨米尔·W·马赫福德的《遗传算法的小生境方法》会很有用。

匿名用户

这个结果不一定是坏事。它可能只是收敛在几个解决方案上,这些解决方案在附近没有任何其他可行的解决方案。您正在收敛的解决方案不好吗?

我注意到的一件事是,尽管您提到了交叉,但并未将其列为7个步骤之一。如果实际上你只是在做突变,这将使GA更难爬出局部最优。

匿名用户

G、 A的工作方式类似于聚合到一个点,选择一组最小的等位基因(解决方案)作为最佳。在一些罕见的情况下,经过数千代人的长期运行,它可能会带来一个单一的最优解决方案。

但是在某些情况下,它可能在最少的运行次数,比如100次,就能带来收敛的解决方案。但是它有可能陷入局部最优,无法达到全局最优。

我不确定你已经尝试了哪一代。我建议你去1000代并比较结果。而且,在几代之后,情节可能会改变,就像你可以看到一套全新的解决方案一样。

不同的表示有不同的交叉和突变。也许你可以告诉你正在使用的表示,结果与世代数成正比。