2016-11-06 16 views
-2

私はTSP遺伝的アルゴリズムで作業しようとしています。私はGAには新しく、それについて多くの文書を読んでいます。私はそれが初期化を作成する必要があることを知って、その後、各個人の適性を突き止め、突然変異などをします。しかし、私はJAVAプログラミングには本当に新しいです。私はどのように初期化を作成するかわからない(反復せずにすべての有効なツアーに人口のすべての個体を初期化する)。 P.いくつかのリソースコードとチュートリアルのオンラインは私にとっては難しいものです。JAVA遺伝的アルゴリズムの初期化

これは私が今までに得たものです。何が必要なのか、何が間違っていたのか、他にコードに追加する必要があることを指摘してください。

private void initialize(){ 

for(int i =0; i< population.length; i++){ 


    for(int j =0; j < population[i].length; j++){ 

    } 
} 
+0

なぜブール値ですか?あなたはその人をどのように紹介していますか? – ItamarG3

+0

あなたの質問は、あまりにも一般的であり、答えることができません。遺伝的アルゴリズムはアルゴリズムのクラスであり、すべてのアルゴリズムを初期化する方法はありません。 –

+0

生殖器に入れるべきものがない場合は –

答えて

1

あなたの質問は一般的に遺伝的アルゴリズムとはほとんど関係がなく、Javaの順列のコレクションを初期化することと非常によく似ています。

通常、TSPへの回答は訪問する都市のリストとしてエンコードされます。したがって、4都市では、[0, 1, 2, 3]のように見えます。「最初の訪問、次に2番目の訪問、3番目の訪問、4番目の訪問」を意味します。 すべての有効な回答は、この基本回答の順列です。。ラウンドトリップ(最終都市から最終的に最初の都市に行く)に興味がある場合、最後のN-1要素をシャッフルするだけで対称性を回避できます。

レッツ・プログラムはJavaで簡単な順列のアプローチ:

// initialize an ArrayList of n integers, from 0 to N-1 
ArrayList<Integer> base = new ArrayList<>(); 
for (int i=0; i<n; i++) base.add(i); 

// initialize each answer to a permutation of the base answer 
Random r = new Random(); // use a seed if you want repeatable runs 
for (Individual p : population) { 
    int[] perm = new int[base.size()]; 
    Collections.shuffle(base, r); 
    base.toArray(perm); 
    p.setAnswer(perm); 
} 

私が代わりにintの2次元配列の、あなたが答え、だけでなく、フィットネスや他のではないだけが含まれている実際のIndividualオブジェクトを使用する、と仮定しています属性。

関連する問題