我想将“死刑法”与遗传算法文献中提出的其他刑罚方法进行比较。
我用的是r软件,所以我需要写下这些惩罚方法的代码。我发现了很多困难,因为我对死刑函数一无所知:由于遗传算法中的种群规模通常是固定的,我如何处理不可行的后代?
我的意思是,我明白,为了恰当地使用死刑,我必须用所有可行的解初始化遗传算法。但即使我在第一个种群中有所有可行的解(t=0),我也可能在下一代中有不可行的解,因为交叉和突变是“盲”算子。
既然死刑拒绝了所有不可行的解决方案,那又会发生什么呢?
下一代的种群数量会变小吗(原来的弱小-不可行的解决方案的数量),或者我必须选择更多的父母放在交配池中繁殖,直到下一代由“原来的弱小”可行的后代组成,或者我必须再次尝试遗传算子,直到T+1中的所有个体可行吗?

最佳答案

我不知道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写的看一看。

08-19 23:42