我开始在这里深入研究 GA 以进行研究,但似乎无法找到跨代断点的答案。例如,如果我从 parent 开始:Father = [A,B,B,A,C]
Mother = [D,D,B,A,A]
在什么时候我可以合法地停止生产 child 以证明所有可能的组合都已用尽?代码如下:void reproduce(String[] father, String[] mother) {
double choice = Math.random() * 100;
if((int) choice % 10 < 2){
//start at father[1] and swap.
//Continue for other choices
这是我使用的逻辑的一小部分。所以我的问题又回到了,我怎样才能合法地确定何时停止生育 child ?或者这只是一个数学问题,我应该只看一个直接置换生成器而暂时忽略 GA?
最佳答案
首先,这应该是让 child 脱离 parent 的一种不太糟糕的方式。这是一个单点交叉。
public String[] reproduce(String[] father, String[] mother) {
int[] child=new String[father.length];
int crossPoint = Math.random()*father.length;//make a crossover point
for (int i=0;i<father.length;++i)
{
if (i<crossPoint)
child[i]=father[i];
else
child[i]=mother[i];
}
return child;
}
没有咖啡,所以不能保证。您可能需要检查逐一错误。
关于java - 交叉算法实现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3852074/