IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

croiser 2 listes (algo génétique)


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut croiser 2 listes (algo génétique)
    Bonsoir,

    Dans le cadre d'algorithme génétique, je dois créer une fonction qui croise deux listes selon une probabilité donnée mais en fait je ne vois pas trop comment faire... si quelqu'un pouvait me guider...

    En entrée de la fonction, je pense qu'il faut déja les 2 listes "parents" + la probabilité donnée et en sortie on a donc une liste "enfant".

    Mais je sais pas trop comment partir...

    Merci
    Bonne soirée...


    Ps : en espérant être dans le bon forum, sinon désolez...

  2. #2
    Membre Expert
    Avatar de méphistopheles
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    1 551
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 1 551
    Par défaut
    je suppose que pour une liste à n éléments, tu choisit au hasart x éléments dans la liste mère et n-x éléments dans la liste "père" , et tu les compile en une seule liste enfant. sauf, si un morceau de chaque élément de chaque liste doit se mélanger à l'élément de l'autre liste avant de donner la liste enfant (un peu comme dans le génétisme animal) auquel cas il faudrais nous donner quelles sont tes contraintes de césure et de réassemblage .


    salut

  3. #3
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    qu'est ce que tu entends par "selon une probabilité deonnée" ?? comme je le comprend, je ferais un simple truc comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    liste resultat <- []
    de i=1 a tailleDeLaListe
       tire un nombre n au hasard entre 0 et 1
       si n < probabilité
          resultat[i] <- liste1[i]
       sinon
          resultat[i] <- liste2[i]
       fin si
    fin de
     
    return resultat

  4. #4
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    et bien en fait ce que j'ai compris moi, c'est qu'il faut intervertir les éléments des 2 listes parents selon une probabilité, donc par exemple si la probabilité est 0,5
    on prend 1 sur 2...

    Enfin c'est ce que j'ai compris, voici l'énoncé de la question exactement, comment le comprenez-vous ?

    "Croiser deux listes, c'est à dire intervertir les éléments des deux listes selon une probabilité donnée (proba) pour chaque position dans la liste (tirage aléatoire et comparaison avec la probabilité"

    Et donc ensuite on peut choisir proba tel qu'on veut. Dans la pluspart des exemples a faire ensuite : proba = 0,5.


    Merci Bonne journée

  5. #5
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    ben tel que je le comprends, c'est exactement ce que je t'ai donné, mais avec 2 listes en sortie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    de i=1 a tailleDeLaListe
       tire un nombre n au hasard entre 0 et 1
       si n < probabilité
          Swap(liste1[i], liste2[i])
       fin si
    in de

  6. #6
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Euh donc selon vous, on a deux listes au départ, et on en récupère 2 en sortie ?

    swap ca veut dire quoi ?

    Par exemple, on a 2 listes de bits en entrée :
    L1 : 0 1 1 0 1
    L2 : 1 1 1 0 0

    On va donc faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Pour i=1 à 5
        n = nombre décimal aléatoire entre 0 et 1
     
        Si n<proba
     
           ... je ne comprends pas trop ce qui se passe ici...
           Alors... Sinon ?
     
        Fin Si
     
    Fin Pour
    Merci de votre aide

  7. #7
    Membre émérite
    Inscrit en
    Janvier 2005
    Messages
    711
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 711
    Par défaut
    je te cite :

    Citation Envoyé par italiasky
    "Croiser deux listes, c'est à dire intervertir les éléments des deux listes
    c'est ce mot "intervertir" qui me fait dire que ca va retourner 2 listes. on parcourt les listes simultanement, a chaque etape, on tire un nombre au hasard. si ce nombre est plus petit que la proba demandée, on echange le ieme element de la liste 1 et celui de la liste 2, c'est ca que veut dire swap, c'est un reccourci, j'aurais pu ecrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    temp <- liste1[i]
    liste1[i] <- liste2[i]
    liste2[i] <- temp

  8. #8
    Membre éclairé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2006
    Messages
    501
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2006
    Messages : 501
    Par défaut
    Ah ok merci

    oui parce que moi ca me genais un peut ce mot "intervertir" parce que je voyais plus le croisement comme le modele en génétique : 2 parents qui donne un enfant qui contient les genes des 2 parents...

    Mais comme vous m'expliquez, ca colle tout a fait avec la question quand je la relis après avoir lu votre explication...

    Donc du coup, mon algo devient bien :

    Entrée : liste1, liste 2
    Sortie : liste3, liste 4

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
     
    liste3 <- liste1
    liste4 <- liste2
     
    Pour i de 1 à taille_liste de 1 en 1
        n_al = nombre décimal aléatoire entre 0 et 1
     
        Si n_al<proba
              Alors  // on échange l'élément i des 2 listes
                      temp <- liste3[i]
                      liste3[i] <- liste4[i]             
                      liste4[i] <- temp
        Fin Si
     
        retourner ???
     
    Fin Pour

    Mais j'ai un petit problème, comment je vais faire pour retourner les 2 nouvelles listes ?
    Dans mon cas ce sera des listes chainées en C, mais il me semble que dans une fonction on peut retourner qu'une seule chose nan ?

    Merci

  9. #9
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Citation Envoyé par jobherzt
    c'est ce mot "intervertir" qui me fait dire que ca va retourner 2 listes. on parcourt les listes simultanement, a chaque etape, on tire un nombre au hasard. si ce nombre est plus petit que la proba demandée, on echange le ieme element de la liste 1 et celui de la liste 2
    Dans ce cas on ne va pas tant retourner deux listes qu'effectuer une opération sur deux listes données en paramètre. La question, suivant le contexte, est doit-on copier ou modifier les listes ?

    Edit:
    Mais j'ai un petit problème, comment je vais faire pour retourner les 2 nouvelles listes ?
    Dans mon cas ce sera des listes chainées en C, mais il me semble que dans une fonction on peut retourner qu'une seule chose nan ?
    Soit en définissant une structure qui contient deux listes et sera le type de retour (et peut-être aussi d'entrée), soit en passant en entrée les listes de destination que la fonction ne fera que remplir.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction d'évaluation pour algo génétique.
    Par Trap D dans le forum Intelligence artificielle
    Réponses: 16
    Dernier message: 14/04/2008, 10h34
  2. [Algorithmes génétiques] Limites ?
    Par laclac dans le forum Intelligence artificielle
    Réponses: 2
    Dernier message: 21/03/2006, 10h46
  3. Algo génétiques
    Par Nemerle dans le forum Intelligence artificielle
    Réponses: 8
    Dernier message: 31/07/2005, 13h53
  4. Algos génétiques, heuristiques...
    Par Regis.C dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 29/04/2004, 23h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo