2016-11-06 93 views
-2

我正在嘗試使用TSP遺傳算法。我是GA新手,並且已經閱讀了大量有關它的文檔。我知道它需要創建初始化,然後找出每個人的適應性,然後進行變異等等。但是,我對JAVA編程非常陌生。我不知道如何創建初始化(初始化所有人口到所有有效的遊覽而不重複)。 P.s.一些資源代碼和在線教程對我來說太困難了。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],這意味着「先訪問第一個,然後第二個,然後是第三個,然後是第四個」。 所有有效答案都是這個基本答案的排列組合。。如果你有興趣進行往返(最後一個城市從最後一個城市到第一​​個城市),那麼你可以通過只洗牌最後一個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一個二維數組,您使用含有不僅是答案,而且還健身等實際Individual對象屬性。