交叉算法实现

时间:2010-10-04 00:05:05

标签: java genetic-algorithm

我开始在这里深入研究GA进行研究,我似乎无法找到交叉生成断点的答案。例如,如果我从父母开始:
Father = [A,B,B,A,C]
Mother = [D,D,B,A,A]

在什么时候我可以合法地停止生孩子以证明所有可能的组合已经用尽?代码如下:

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

这是我正在使用的逻辑的一小部分。所以我的问题又回来了,我怎样才能合法地确定何时停止创建孩子?或者这只是一个数学问题,我应该只看一个直的置换生成器并暂时忽略GA?

2 个答案:

答案 0 :(得分:2)

首先,这应该是一个让孩子脱离父母的不太好的方法。这是一个单点交叉。

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;
}

没有咖啡,所以不保证。您可能想要检查一次性错误。

答案 1 :(得分:1)

由于您使用随机数进行更改,因此无法保证在X个孩子之后您将尝试所有内容。如果你想尝试每个选项,你不应该使用随机数。所以,是的,使用直接置换生成器并忽略GA。