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

Intelligence artificielle Discussion :

Algorithme génétique ou colonnie de fourmies (développement d'un IRS)


Sujet :

Intelligence artificielle

  1. #1
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 145
    Points : 41
    Points
    41
    Par défaut Algorithme génétique ou colonnie de fourmies (développement d'un IRS)
    Bonjour
    Ce que je vais devoir implementer est un Intrusion Response System, c'est une sorte de systeme qui reponds automatiquement aux intrusions sur le reseau, et ceci a l'aide d'algorithmes d'intelligence artificielle.

    Bon deja, j'ai presque aucune notion sur les IA. Donc j'aimerais pouvoir choisir un des deux algorithmes (les GA ou l' ACO) pour pouvoir m'initier au domaine.

    Donc ma question est lequel des deux a une meilleure learning curve (ou le plus facile a apprendre), et lequel est le plus rapide en temps d'execution,
    en gros lequel est le meilleur ;p

    Merci

  2. #2
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Salut,

    Citation Envoyé par MSN9149 Voir le message
    Donc ma question est lequel des deux a une meilleure learning curve (ou le plus facile a apprendre)
    Je ne comprends pas trop la question... une learning curve sur un algorithme? Une fois que tu as compris comment ils fonctionnent, c'est bon, tu as appris. Non?
    Donc une grosse demi-journée pour chacun, ça doit être bon.

    Pour la mise en application, ça dépend si tu veux rentrer dans le détail technique, ou te limiter à l'utilisation. Il existe des API pour chacun si tu ne veux pas tout recoder from scratch (et il y a également un tuto sur la colonie de fourmis sur ce site ici-même).

    Par contre il faudrait peut-être te demander plutôt lequel est plus adapté à ton problème si tu veux le lui appliquer ensuite. Si c'est uniquement pour te former, fais les deux.


    Citation Envoyé par MSN9149 Voir le message
    et lequel est le plus rapide en temps d'execution
    ça dépend...

    Citation Envoyé par MSN9149 Voir le message
    en gros lequel est le meilleur ;p
    ça dépend...


    Plus sérieusement, ça dépend du problème, de sa complexité, de sa modélisation, tout ça peut influer sur la convergence de solution. J'ai eu des calculs sous GA qui tournait très vite, et qui partaient dans les choux en rajoutant un simple paramètre d'optimisation.

    Ensuite, ça dépend de ce que tu appelle "rapide". Ca se chiffre en millisecondes, en secondes, en jour, en année?
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  3. #3
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 145
    Points : 41
    Points
    41
    Par défaut
    Merci pour ta reponde!
    Enfait, je n'ai que 3 mois pour implementer un algorithme de IA (GA, ACO ou autre), donc ce que je voulais savoir, c'est lequel des deux est le plus rapide a comprendre et a implementer. sinon si je suis oblige de les comprendre tous les deux, j ai pas trop le choix :s

    Bon puisque t'as parle de solution deja faite, donc ca m'interesse un peu.. j'ai deja trouve une bibliotheque en python pour faire des GA. ma seconde question est: est ce que tu peux m'orienter vers des bibliotheque de ce genre, au cas j'aurais pas beaucoup de temps pour les implementer.

    PS: j'ai deja vu l'implementation de l'algo de colonnies de fourmis qui existe sur ce site, mais je l'ai pas encore lu.
    Et surtout, les deux algo sites ont deja etaient appliques a mon probleme (IRS), en fait c'est les seuls que j'ai trouve sur les publications!

  4. #4
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par MSN9149 Voir le message
    donc ce que je voulais savoir, c'est lequel des deux est le plus rapide a comprendre et a implementer. sinon si je suis oblige de les comprendre tous les deux, j ai pas trop le choix :s
    A comprendre, ça n'est pas compliqué, ni l'un ni l'autre.
    Pour les GA, pense à un troupeau de vaches qui copulent dans un pré avec le fermier qui fait la traite le soir.
    Pour les fourmis, pense à quand tu étais gamin et que tu passais des heures à les regarder courir dans tous les coins.
    Honnêtement, c'est beaucoup plus simple à comprendre qu'une tétraédrisation de delaunay... (cherche pas, ça n'a rien à voir avec l'IA ce truc!)
    En une journée, tu auras compris les deux algos, et si tu es bon, tu auras aussi fait tes premiers tests.

    Ayant plus d'expérience en GA qu'en fourmis, le plus compliqué à mon avis est définir la modélisation génique de ton problème, et trouver la fonction d'évaluation. Mais quand je dis que c'est le plus compliqué, ça ne veut pas dire que c'est compliqué... ça dépend toujours de ton problème...

    Citation Envoyé par MSN9149 Voir le message
    j'ai deja trouve une bibliotheque en python pour faire des GA. ma seconde question est: est ce que tu peux m'orienter vers des bibliotheque de ce genre, au cas j'aurais pas beaucoup de temps pour les implementer.
    Non, désolé, je suis javaiste... j'utilise JGAP pour les algos génétique, il doit bien y avoir l'équivalent en python.
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 145
    Points : 41
    Points
    41
    Par défaut
    Merci beaucoup pour ta reponse.
    Donc si je comprends bien, si je lis le tutoriel present sur ce site, je serais ensuite capable de les implementer tout seul.

    C'est ce que je vais faire, biensur si t'as des liens interessant a me donner ...n'hesite pas et encore merci.

  6. #6
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Citation Envoyé par MSN9149 Voir le message
    j'ai deja trouve une bibliotheque en python pour faire des GA. ma seconde question est: est ce que tu peux m'orienter vers des bibliotheque de ce genre, au cas j'aurais pas beaucoup de temps pour les implementer.
    Mieux vaut faire tourner des GA dans des langages rapides, typiquement C/C++ (perso j'ai surtout utilisé http://sferes2.isir.upmc.fr/ comme bibliothèque jusqu'à présent).

  7. #7
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 145
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Franck Dernoncourt Voir le message
    Mieux vaut faire tourner des GA dans des langages rapides, typiquement C/C++ (perso j'ai surtout utilisé http://sferes2.isir.upmc.fr/ comme bibliothèque jusqu'à présent).
    Certainement, mais puisqu'il existe une bibliotheque de GA en java, donc c'est possible de faire des algorithmes genetiques en Java, n'est ce pa?

  8. #8
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Possible, mais moins efficace.

  9. #9
    Expert éminent

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 813
    Points : 7 638
    Points
    7 638
    Par défaut
    Citation Envoyé par MSN9149 Voir le message
    Certainement, mais puisqu'il existe une bibliotheque de GA en java, donc c'est possible de faire des algorithmes genetiques en Java, n'est ce pa?
    Tu voulais dire en python, non?


    Citation Envoyé par Franck Dernoncourt Voir le message
    Possible, mais moins efficace.
    Didiou, dès que la chasse au troll est fermée, ils ressortent le nez!
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  10. #10
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Citation Envoyé par plegat Voir le message
    Didiou, dès que la chasse au troll est fermée, ils ressortent le nez!
    Je voulais simplement rappeler indirectement que la principale limite des GAs est leur coût computationnel (j'ai effectivement considéré que MSN9149 voulait dire en python et non en java), étant donné que la question originale portait en partie sur le temps d'execution.

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 243
    Points : 328
    Points
    328
    Par défaut
    D'un autre côté, cela dépend aussi si MSN9149 doit impérativement implémenter sa solution ou s'il peut utiliser des bibliothèques pré-existante.

    Dans le 1er cas, coder son algo en python permet de faire très rapidement un prototype et de valider la pertinence du choix initial, puis éventuellement de recoder tout ou partie en c/c++ si les perfs sont primordiales (déjà optimiser le code python par psyco peut permet d’accélérer pas mal le code) .

    En tout état de cause, les perfs sont aussi, comme plegat l'a dit, fonction du problème, de la modélisation, etc...

    j'ai l'impression - sans connaitre le problème - que le plus compliqué sera la modélisation et éventuellement l'"adaptation" nécessaire à l'algo. choisi.
    Par exemple, mon expérience avec un autre problème (le bin packing) on trouve beaucoup d'exemples de GA/ACO adaptés au voyageur de commerce, moins au B.P en une dimension et encore moins pour la version 2D (c'est encore plus vrai pour les ACO).

    Sinon, si l'utilisation de bibliothèques "externes" est autorisée, il y a des frameworks "rapides" ayant une interface avec python entre autres langages.

  12. #12
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 145
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par 250rgv Voir le message
    j'ai l'impression - sans connaitre le problème - que le plus compliqué sera la modélisation et éventuellement l'"adaptation" nécessaire à l'algo. choisi.
    Par exemple, mon expérience avec un autre problème (le bin packing) on trouve beaucoup d'exemples de GA/ACO adaptés au voyageur de commerce, moins au B.P en une dimension et encore moins pour la version 2D (c'est encore plus vrai pour les ACO).

    Sinon, si l'utilisation de bibliothèques "externes" est autorisée, il y a des frameworks "rapides" ayant une interface avec python entre autres langages.
    T'as raison sur le fait que c'est la modelisation qui est la plus dure dans ce probleme.
    Tu peux pas me donner un exemple de bibliotheques que tu viens de citer?
    Meme en java, ca fait rien (je connais JGap)
    Merci

  13. #13
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    En fait si tu nous donnais plus de précisions sur ce que tu veux faire il serait plus facile de répondre.

    Les algo génétiques et les fourmis sont principalement (peut-être me trompé-je) des algo d'optimisation. Il faut donc savoir ce qu'il faut optimiser. S'il faut mettre en place un système qui doit prendre des décisions par exemple, ce ne sont peut-être pas les meilleurs solutions.

    Si par exemple il faut détecter des motifs dans des statistiques sur des paquets réseaux, peut-être vaut-il mieux regarder du côté de classifieurs à base de réseaux de neurones ou de machine à vecteurs supports (SVM)...

  14. #14
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 145
    Points : 41
    Points
    41
    Par défaut
    Citation Envoyé par Alexis.M Voir le message
    En fait si tu nous donnais plus de précisions sur ce que tu veux faire il serait plus facile de répondre.

    Les algo génétiques et les fourmis sont principalement (peut-être me trompé-je) des algo d'optimisation. Il faut donc savoir ce qu'il faut optimiser. S'il faut mettre en place un système qui doit prendre des décisions par exemple, ce ne sont peut-être pas les meilleurs solutions.

    Si par exemple il faut détecter des motifs dans des statistiques sur des paquets réseaux, peut-être vaut-il mieux regarder du côté de classifieurs à base de réseaux de neurones ou de machine à vecteurs supports (SVM)...
    Je crois que t'as raison et que je devrais m'orienter vers les reseaux de neurones. Avant j vais t'expliquer ce que j dois implementer:
    Bon, deja comme IDS (systeme de detection d'intrusion), je dois utiliser Snort, donc la y a rien a implemente. Ce qu'il faut programmer c'est un systeme intelligent qui va prendre une decision, selon le type d'intrusion.

    Au cas ou je serais oblige de travailler avec les reseaux de neuronnes, tu pourrais pas m'orienter vers une bonne documentation, et quel language ou quel bibliotheque tu me conseillerais?
    Merci pour ta reponse.

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 243
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par MSN9149 Voir le message
    Tu peux pas me donner un exemple de bibliotheques que tu viens de citer?
    Je vais regarder si j'ai conservé des informations mais je ne pense pas : je me souviens d'être tombé par hasard sur 3/4 frameworks dans ce cas lorsque je cherchais des infos sur les AG/ACO (si possible avec Python). Comme c'était pour implémenter mes propres algos pour apprendre - et qu'en plus, je ne trouvais rien concernant mon problème spécifiquement, ça ne m'a pas marqué plus que cela.


    edit : oublié des mots

  16. #16
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Personnellement j'utilise principalement python. Pour faire du réseau de neurones à base de perceptron multi-couche tu à le module ffnet.

    Sinon je te conseille une fois de plus les méthodes à base de machine à vecteur supports (SVM) qui sont vraiment très utilisées pour la reconnaissance de motifs (pattern recognition) dans ce cas tu as tous ce qu'il faut dans ou éventuellement les méthodes à base d'arbres de décision.

    Dans les deux derniers cas sous python il existe l'excellent paquetage sklearn (pour l'apprentissage automoatique -- machine learning) qui implémente les arbres, les SVM et bien d'autres encores.

  17. #17
    Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    145
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 145
    Points : 41
    Points
    41
    Par défaut
    Merci pour ta reponse je vais jeter un coup d'oeil sur ce module.
    En fait je suis tombe par hasard sur la bibliotheque python: pybrain, elle a l'air d'etre tres bien documentee, tu l'as trouve comment toi?

  18. #18
    Membre éclairé
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Points : 752
    Points
    752
    Par défaut
    Je ne la connais...

  19. #19
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    En python, voici un exemple de code issu de http://code.activestate.com/recipes/...ic-algorithm/:. Il marche (je l'ai testé), mais sa structure est perfectible.

    Code Python : 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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    ## {{{ http://code.activestate.com/recipes/199121/ (r1)
    #
    # genetic.py
    #
     
    import random
     
    MAXIMIZE, MINIMIZE = 11, 22
     
    class Individual(object):
        alleles = (0,1)
        length = 30
        seperator = ''
        optimization = MINIMIZE
     
        def __init__(self, chromosome=None):
            self.chromosome = chromosome or self._makechromosome()
            self.score = None  # set during evaluation
     
        def _makechromosome(self):
            "makes a chromosome from randomly selected alleles."
            return [random.choice(self.alleles) for gene in range(self.length)]
     
        def evaluate(self, optimum=None):
            "this method MUST be overridden to evaluate individual fitness score."
            pass
     
        def crossover(self, other):
            "override this method to use your preferred crossover method."
            return self._twopoint(other)
     
        def mutate(self, gene):
            "override this method to use your preferred mutation method."
            self._pick(gene) 
     
        # sample mutation method
        def _pick(self, gene):
            "chooses a random allele to replace this gene's allele."
            self.chromosome[gene] = random.choice(self.alleles)
     
        # sample crossover method
        def _twopoint(self, other):
            "creates offspring via two-point crossover between mates."
            left, right = self._pickpivots()
            def mate(p0, p1):
                chromosome = p0.chromosome[:]
                chromosome[left:right] = p1.chromosome[left:right]
                child = p0.__class__(chromosome)
                child._repair(p0, p1)
                return child
            return mate(self, other), mate(other, self)
     
        # some crossover helpers ...
        def _repair(self, parent1, parent2):
            "override this method, if necessary, to fix duplicated genes."
            pass
     
        def _pickpivots(self):
            left = random.randrange(1, self.length-2)
            right = random.randrange(left, self.length-1)
            return left, right
     
        #
        # other methods
        #
     
        def __repr__(self):
            "returns string representation of self"
            return '<%s chromosome="%s" score=%s>' % \
                   (self.__class__.__name__,
                    self.seperator.join(map(str,self.chromosome)), self.score)
     
        def __cmp__(self, other):
            if self.optimization == MINIMIZE:
                return cmp(self.score, other.score)
            else: # MAXIMIZE
                return cmp(other.score, self.score)
     
        def copy(self):
            twin = self.__class__(self.chromosome[:])
            twin.score = self.score
            return twin
     
     
    class Environment(object):
        def __init__(self, kind, population=None, size=100, maxgenerations=100, 
                     crossover_rate=0.90, mutation_rate=0.01, optimum=None):
            self.kind = kind
            self.size = size
            self.optimum = optimum
            self.population = population or self._makepopulation()
            for individual in self.population:
                individual.evaluate(self.optimum)
            self.crossover_rate = crossover_rate
            self.mutation_rate = mutation_rate
            self.maxgenerations = maxgenerations
            self.generation = 0
            self.report()
     
        def _makepopulation(self):
            return [self.kind() for individual in range(self.size)]
     
        def run(self):
            while not self._goal():
                self.step()
     
        def _goal(self):
            return self.generation > self.maxgenerations or \
                   self.best.score == self.optimum
     
        def step(self):
            self.population.sort()
            self._crossover()
            self.generation += 1
            self.report()
     
        def _crossover(self):
            next_population = [self.best.copy()]
            while len(next_population) < self.size:
                mate1 = self._select()
                if random.random() < self.crossover_rate:
                    mate2 = self._select()
                    offspring = mate1.crossover(mate2)
                else:
                    offspring = [mate1.copy()]
                for individual in offspring:
                    self._mutate(individual)
                    individual.evaluate(self.optimum)
                    next_population.append(individual)
            self.population = next_population[:self.size]
     
        def _select(self):
            "override this to use your preferred selection method"
            return self._tournament()
     
        def _mutate(self, individual):
            for gene in range(individual.length):
                if random.random() < self.mutation_rate:
                    individual.mutate(gene)
     
        #
        # sample selection method
        #
        def _tournament(self, size=8, choosebest=0.90):
            competitors = [random.choice(self.population) for i in range(size)]
            competitors.sort()
            if random.random() < choosebest:
                return competitors[0]
            else:
                return random.choice(competitors[1:])
     
        def best():
            doc = "individual with best fitness score in population."
            def fget(self):
                return self.population[0]
            return locals()
        best = property(**best())
     
        def report(self):
            print "="*70
            print "generation: ", self.generation
            print "best:       ", self.best
     
     
     
    ---------------------------------------------------------------------
    #
    # onemax.py - useage example
    #
    # the fittest individual will have a chromosome consisting of 30 '1's
    #
     
    import genetic
     
    class OneMax(genetic.Individual):
        optimization = genetic.MAXIMIZE 
        def evaluate(self, optimum=None):
            self.score = sum(self.chromosome)
        def mutate(self, gene):
            self.chromosome[gene] = not self.chromosome[gene] # bit flip
     
    if __name__ == "__main__":
        env = genetic.Environment(OneMax, maxgenerations=1000, optimum=30)
        env.run()
    ## end of http://code.activestate.com/recipes/199121/ }}}


    Exemple de structure plus aboutie (issue du framework C++ http://sferes2.isir.upmc.fr) :


    Call graph correspondant :
    Images attachées Images attachées   
    Fichiers attachés Fichiers attachés
    • Type de fichier : 7z src.7z (1,8 Ko, 56 affichages)

  20. #20
    Membre averti
    Profil pro
    Inscrit en
    Août 2006
    Messages
    243
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 243
    Points : 328
    Points
    328
    Par défaut
    Pour préciser une chose : quand je parle de bibliothèques "rapides", il s'agissait de biblio. écrites en C par exemple avec un pont Python.
    Pour du python pur, on trouve facilement avec notre ami google des biblio. plus ou moins maintenues telles que PyGene, PyEvolve ou des examples d'implémentations simples comme celle proposée par Franck.

    Pour en revenir au problème initial, est-ce que ceci peut convenir ?

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

Discussions similaires

  1. Algorithme génétique : population et maladies
    Par libertyblood dans le forum Algorithmes et structures de données
    Réponses: 22
    Dernier message: 02/11/2005, 18h11
  2. Les algorithmes génétiques
    Par fred9510 dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 27/01/2005, 10h27
  3. Algorithme génétique
    Par senke dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 26/08/2002, 16h55
  4. Algorithme génétique
    Par Stephane.P_(dis Postef) dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 15/03/2002, 17h14

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