我想将“死刑方法”与遗传算法文献中提出的其他惩罚方法进行比较。
我正在使用R软件,因此我需要编写这些惩罚方法的代码。我发现很多困难,因为我还没有理解关于死刑功能的一件事:我如何处理不可行的后代,因为人口规模通常在遗传算法中是固定的?
我的意思是,我明白,为了适当地使用死刑,我必须用所有可行的解决方案来初始化遗传算法。但即使我在第一个群体(t = 0)中拥有所有可行的解决方案,我也可以在下一代使用不可行的解决方案,因为交叉和突变是“盲”操作符。
所以,既然死刑拒绝了所有不可行的解决方案,那么会发生什么? 下一代的人口数量是否会变小(原始昏暗的大小 - 不可行的解决方案的数量),或者我必须选择更多的父母进入交配池进行繁殖,直到下一代由“原始昏暗的大小”可行的后代组成或我必须再次尝试遗传算子,直到t + 1中的所有个体都可行?
答案 0 :(得分:0)
我不知道R,但死刑理论暗示你应该产生更多的后代。
我会生成以下伪代码(转换为R):
n=<desired_population_size>;
while (n>0) {
generate n offspring;
eliminate the non feasible ones
add the feasible ones to the new generation
n=<desired population size> - <current new generation population size>
}
这个循环的唯一问题是它可能永远存在的风险(如果我们从未生成可行的解决方案)。即使它很小,如果你想保护自己,你可以使用一个简单的计数器来限制while循环中允许的迭代次数。
Michalewicz有一个pretty interesting article。看看。