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

C++ Discussion :

Implémentation d'une classe d'algorithme genetique


Sujet :

C++

  1. #1
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut Implémentation d'une classe d'algorithme genetique
    Bonjour à tous,

    J'essaye d'implémenter une classe d'algorithme génétique toute simple, mon soucis principal étant la mise en oeuvre.

    D'une manière basique, pour un algorithme génétique, on utilise des gènes, des chromosomes (composés d'un certains nombre de gènes) et enfin une population, composée d'un certains nombres de chromosomes.

    La réprésentation habituelle des gènes (et incidemment des chromosomes) se fait par l'intermédiaire de bits.

    Pour ce faire j'ai pensé à "vector <bool>" qui correspond, je crois, assez bien à cela.

    J'en arrive à mon problème :

    En imaginant qu'une population soit composée d'une centaine de chromosomes et que chaque chromosome soit composé de 5 gènes, j'en arrive à 3 vector imbriqués ce que je trouve très lourd à gérer.

    la spécialisation de vector<bool> est elle un choix judicieux ? manipuler les chaînes de bits en tant que chaînes de caractères (via std::string) n'eut-il pas été un meilleur choix ? l'utilisation de <valarray> serait-elle une option envisageable ?

    Sachant que je dois pouvoir manipuler chaque gène indépendamment, ou encore chaque chromosome de la population, quel serait au final la solution la plus adéquate ?

    En vous remerciant.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 394
    Points : 473
    Points
    473
    Par défaut
    Pour manipuler un ensemble de bit, généralement on passe plutot par un bitset plutot que par un vecteur de booléens, dans ce cas, ça me paraît indiqué.
    Pour le problème de la complexité des données, la programmation objet y répond.
    Au lieu de manipuler 3 vecteurs imbriqués, il faudrait selon l'analyse faite du problème définir trois classes. La classe gène, implantée par un bitset, la classe chromosome, qui est une composition de gène et la classe population qui représente un ensemble de gène.
    Cette décomposition orientée par les données, facilitera grandement l'écriture et la maintenance du programme à venir.

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonsoir,

    Merci VoidSeer pour cette réponse

    Je crois que j'avais rejeté le bitset parce qu'il ne m'offrait pas d'itérateurs, mais en y réfléchissant bien, je ne crois pas que ce soit réellement important de ne pas disposer de ces derniers.

    Au lieu de manipuler 3 vecteurs imbriqués, il faudrait selon l'analyse faite du problème définir trois classes. La classe gène, implantée par un bitset, la classe chromosome, qui est une composition de gène et la classe population qui représente un ensemble de gène.
    Cette décomposition orientée par les données, facilitera grandement l'écriture et la maintenance du programme à venir.
    Oui effectivement, tout cela me parait très bien !

    Etant programmeur C et assembleur de formation, j'essaye d'apprendre le C++ par mes propres moyens et je n'ai pas encore vu l'agrégation de près (je crois que c'est comme cela que l'on apelle la relation lorsqu'un objet "a un" autre objet).

    Il ne me reste plus qu'à bien penser aux relations entre classes et mettre tout ça au propre sous UML. Ensuite il va falloir que je relise bien mes livres pour le coté pratique de la chose

    Encore merci, je passe donc le sujet en résolu.

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 19/01/2011, 21h07
  2. Récupérer une interface implémentée par une classe
    Par samaury dans le forum Langage
    Réponses: 2
    Dernier message: 20/04/2010, 22h04
  3. Réponses: 6
    Dernier message: 31/07/2009, 09h56
  4. Implémentation d'une classe dérivant de std::ostream
    Par three minute hero dans le forum SL & STL
    Réponses: 1
    Dernier message: 08/07/2008, 14h07
  5. Réponses: 12
    Dernier message: 01/07/2004, 11h03

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