Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JAVA] Algorithmes Génétiques

Le problème du marchand

    14 novembre 2014 à 20:54:31

    Bonjour à tous/toutes, et merci de prendre le temps de me lire et de me répondre.

    J'ai besoin de votre aide, je m'explique :
    Je suis en IUT informatique, et j'ai un projet à faire : le problème du marchand (avec les algorithmes génétiques, comme dit dans le titre).

    Je pense que vous connaissez déjà ce sujet, si c'est le cas, vous pouvez sauter ce paragraphe :
    Le problème du marchand consiste à avoir plusieurs villes. Avec ces villes, on peut donc créer plusieurs chemins, sachant qu'on doit passer par toutes les villes, et une seule fois. Le but est donc de trouver le chemin le plus court.
    Pour ce faire on utilise les algorithmes génétiques : On prend deux chemins aléatoires (les chemins parents), qu'on "combine" pour obtenir un autre chemin (le chemin enfant), qu'on va ensuite combiner au plus court des parents, pour obtenir un autre chemin enfant, et ainsi de suite ...
    Je tient à préciser que c'est pas la définition exacte, mais celle que j'utilise ^^
    Si j'explique vraiment mal, et que vous n'avez rien compris, ces liens seront sûrement mieux expliqués :
    Algorithmes génétiques : http://www.uqtr.uquebec.ca/~biskri/Personnel/mol/RAG.doc
    Problème du Voyageur :  http://pageperso.lif.univ-mrs.fr/~michel.vancaneghem/mait/documents/cours4_8.pdf

    Maintenant qu'on a fait les préliminaires, le coeur de mon problèmes :D
    Donc, comme dit ci-dessus, je dois combiner deux chemins parents pour obtenir un chemin enfant. Mais cette combinaison ce fait selon des règles :
    On va 'casser' de façon aléatoire l'un des deux parents pour prendre le début de celui-ci, et la fin de l'autre.
    Par exemple, imaginons que mes chemins parents soient des tableaux qui contiennent le nom de mes villes (ici mes villes seront appelés par des lettres)

    String[] parent1 = {"A","B","C","D","E"}; //Mon premier chemin pars de la ville A, jusqu'à la B, qui elle va jusqu'à la C, etc ...
    String[] parent2 = {"B","E","D","C","A"};


    Maintenant, je voudrais combiner les deux, pour cela on va définir de façon aléatoire où couper l'un des mes parents. Pour ce faire, on prend une variable aléatoire entre 0 et 4. 

    int lower = 0;
    int higher = 4;
    int cassure = (int) (Math.random()*(higher-lower))+lower;

    Donc, par exemple, si ma variable 'cassure' contient 2, on établira la cassure entre la ville C et la ville D de mon chemin parent n°1.
    On va donc garder les villes avant la cassure dans mon enfant :

    String[] enfant = {"A","B","C","X","X"};

    Maintenant, à la place des X, j'aimerais mettre la fin du chemin parent n°2, sauf que la fin de ce parent c'est "C" et "A", et ils sont déjà utilisés, et comme je l'ai dit plus haut, on ne peut passer qu'une seule fois par ville. Alors, la règle c'est qu'on 'repart' au début de mon parent n°2, qui est B, et donc encore une fois utilisé, on passe alors au suivant : E. Lui n'est pas utilisé, donc mon enfant devient :

    enfant = {"A","B","C","E","X"};

    Pour la dernière ville de ce chemin enfant, on continue suivant le principe précédent : On passe à la ville suivante de mon parent n°2, ici c'est "D", donc mon enfant est enfin créer :

    enfant = {"A","B","C","E","D"};

    Là vous vous demandez où est mon problème ? Bin j'aimerais tout simplement créer une méthode qui prend les deux parents en paramètre, et qui me pond un enfant tout frais. ^^
    Pour ce qui est de couper le premier parent, et de rentrer ses valeurs dans mon enfant (ça devient glauque ... ne vous inquiétez pas, je ne rentre rien dans mes enfants, bien que je n'en ai pas >_<' ), j'ai réussit à le faire. Mais je bloque pour ce qui est du 2ème parent ... J'espère que vous pourrez m'aider ^^

    P.S. Vous avez dû vous en doutez, mais je tient quand même à le préciser : Je suis débutant en Java (il y a à peine 2 semaines j'étais incapable d'écrire une ligne), donc je manque de vocabulaire technique (comme on dit dans le milieu, je ne connais pas le "Jargon du programmeur")


    (Désolé pour cet énooorme roman, mais vu que je cherche un truc très précis, j'ai essayé d'être le plus clair possible ...

    Je vous remercie d'avance de votre aide et de votre pitié ! :D


    Cordialement, Dorian. 

    • Partager sur Facebook
    • Partager sur Twitter
    Avant j'étais Schizophrène... mais maintenant on s'entend mieux.
      21 novembre 2014 à 14:01:57

      up ! :D
      • Partager sur Facebook
      • Partager sur Twitter
      Avant j'étais Schizophrène... mais maintenant on s'entend mieux.
        11 avril 2015 à 6:02:12

        svp je veux programmer l'implantation de dépôt par algorithme génétique sur java mais j'y arrive pas tros

          c defficile deja pour creer une population initial et puis pour la selection

        • Partager sur Facebook
        • Partager sur Twitter

        [JAVA] Algorithmes Génétiques

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown