2017-03-11 12 views
1

遺伝的アルゴリズムのためにJavaで一様なクロスオーバー方法を実装するにはどうすればよいですか?Javaの遺伝的アルゴリズムのための一様なクロスオーバー

現在、私はプログラムが続行される前に相互接続する必要のある2つのArrayListsを使用しています。以下は、私が使用しているメソッドの開始である:私は現時点で立っ

private void UniformCrossOver(int ListOne,int ListTwo) 
{ 
... 
} 

が、私はにデータ分割を持つことになります別の2つのArrayListを作成する必要があることを想定していますが、私は考えていますどこからクロスオーバーを開始するか。私は定義するキーである新しい配列のサイズとforループを使用しますか?

ご協力いただき誠にありがとうございます。

+0

http://stackoverflow.com/questions/9318881/uniform-crossover-in-java –

+0

結果を格納するには 'ArrayList'が必要です。各点で、2つの入力ArrayListsのうちの1つから0.5の確率で要素をランダムに選択します。これを行うには、乱数ジェネレータを使って0と1の間で選択します( 'Random :: nextInt(0,2)')。結果の要素を結果のarrayListに格納します。 –

+0

つまり、 'ArrayList'の各要素に対して実行される' for'ループをインクリメントして作成する必要があります。すなわち、乱数発生器は、新しいノードが親Aまたは親Bから取られるかどうかを決定する不確実性の要素であるか? –

答えて

0

クロスオーバ後に両親が必要ない場合は、新しい配列リストを作成する必要はありません。これは動作するはずです限り、あなたの染色体が

public void uniformCrossover(ArrayList<Integer> a, ArrayList<Integer> b){ 
    for (int i = 0; i <a.size(); i++) { 
     if(Math.random() < crossoverProbability){ 
      int tmp = a.get(i); 
      a.set(i, b.get(i)); 
      b.set(i, tmp); 
     } 
    } 
} 
0

あなたはそれが配列を使用して行うことができます同じサイズのものである

//Some example chromosomes 
int[] chromosomeA = {1, 1, 0, 1}; 
Int[] chromosomeB = {1, 0, 0, 0}; 

    for(int i = 0; i < chromosomeA.length; i++){ 
     int a = chromosomeA[i]; 
     if(new Random().nextInt(2) == 0){ 
     chromosomeA[i] = chromosomeB[i]; 
     chromosomeB[i] = a; 
     } 
    } 
関連する問題