4

私はここで研究のために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を無視する必要がありますか?

4

2 に答える 2

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つずつ間違いがないか確認することをお勧めします。

于 2010-10-04T10:16:52.257 に答える
1

変更を行うために乱数を使用しているため、X人の子の後にすべてを試したという保証はありません。すべてのオプションを試したい場合は、乱数を使用しないでください。そうです、ストレート順列ジェネレーターを使用して、GAを無視してください。

于 2010-10-04T00:49:01.363 に答える