2016-11-06 1 views
-2

J'essaie de travailler sur un algorithme génétique TSP. Je suis nouveau à GA et j'ai lu beaucoup de documents à ce sujet. Je sais qu'il faut créer l'initialisation puis découvrir la condition physique de chaque individu puis faire la mutation et ainsi de suite. Cependant, je suis vraiment nouveau dans la programmation JAVA. Je ne suis pas sûr de savoir comment créer l'initialisation (initialiser tous les individus de la population à tous les tours valides sans répétition). P.s. certains codes de ressources et tutoriels en ligne sont trop difficiles pour moi.Initialisation de l'algorithme génétique JAVA

C'est ce que j'ai eu jusqu'à présent. S'il vous plaît indiquer ce que j'ai besoin et ce que j'ai fait de mal et quoi d'autre je dois ajouter dans le code.

private void initialize(){ 

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


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

    } 
} 
+0

pourquoi booléen? comment présentez-vous l'individu? – ItamarG3

+0

Votre question est tout simplement trop générique pour être responsable. Un algorithme génétique est une classe d'algorithmes, il n'y a pas de moyen unique de les initialiser tous. –

+0

sinon ce que je devrais mettre dans l'initalization –

Répondre

1

Votre question a très peu à voir avec des algorithmes génétiques en général, et beaucoup à une collection avec l'initialisation de permutations en Java.

Typiquement, les réponses à un TSP sont codées sous la forme d'une liste de villes à visiter. Donc, pour 4 villes, cela pourrait ressembler à [0, 1, 2, 3], ce qui signifie "visiter le premier, puis le deuxième, puis le troisième, puis le quatrième". Toutes les réponses valides sont des permutations de cette réponse de base.. Si vous êtes intéressé par un aller-retour (où vous allez finalement de la dernière ville à la première), alors vous pouvez éviter certaines symétries en ne mélangeant que les derniers éléments N-1.

programme de Let l'approche de simple permutation en 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); 
} 

Je suppose que, au lieu d'un tableau 2D de int, vous utilisez des objets Individual réels qui contiennent non seulement une réponse, mais aussi de remise en forme et d'autres les attributs.