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 :

Algo Génétique, Codage réels en binaire


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 182
    Points : 52
    Points
    52
    Par défaut Algo Génétique, Codage réels en binaire
    Bonjour à toutes et à tous,

    Je suis tombé sur un rapport expliquant en détail les algorithmes génétiques. Dans la partie ou il faut choisir le codage de ses variables, j'ai choisit le codage naturel (le codage réel, à savoir transformer le réel en binaire).

    Trois exemples sont donnés pour la conversion de réels en binaires:
    3.256 > 10010011
    0.658 > 11101011
    10.26 > 00011010

    Après plusieurs recherches sur internet sur le codage des réel en binaires, j'ai du mal à comprendre comment ces résultats ont été obtenus!
    Est-ce que l'un d'entre vous pourrait éclairer ma lanterne?

    Merci par avance,

    Gian

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,

    Le stockage pourrait être du minifloat (float sur 8 bits) mais les exemples donnés ne collent pas.

    Pour rappel (http://en.wikipedia.org/wiki/Minifloat)

    minifloat : 1bit de signe 4bits d'exposant 3bits de mantisse.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                              mantisse       ( exposant - 7 )
    valeur = (signe) x ( 1 + ---------- ) x 2
                                 8
    Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    3.25  : 0 1000 101
    .6875 : 0 0110 011
    .625  : 0 0110 010
    10    : 0 1010 010
    Après, le codage naturel standard (http://www.positron-libre.com/cours/...ecimal-bcd.htm) utilise 4 bits par chiffre... Dans ce cas les exemple ne peuvent pas coller. D'où tirez vous les exemples ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2007
    Messages : 182
    Points : 52
    Points
    52
    Par défaut
    Hello,

    tout d'abord merci pour cette réponse rapide.

    La source, trouvée sur Google:
    http://deptinfo.unice.fr/twiki/pub/L...et-Souquet.pdf

    page 13

    Il semblerait qu'il y ai une transformation non mentionnée (représentation "schématique"?)

    Mais je crois que je vais revoir tout ca.

    Merci

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Vu le document, je pense que le code binaire ne correspond pas au nombre réel représenté; que c'est juste un schéma (d'où la représentation schématique).

    Techniquement, chaque gène est représenté par un flottant, mais les calculs de croisement et de mutation se font sur la représentation binaire.

    Exemple en C (sur lequel on travaille sur les octets, mais la généralisation aux bits est facile)
    Code c : 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
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    int main(void)
    {
        srand(time(NULL));
     
        float gene_1 = 1.23f;
        float gene_2 = 7.89f;
        float gene_enfant;
     
        char *p_gene_1 = &gene_1;
        char *p_gene_2 = &gene_2;
        char *p_enfant = &gene_enfant;
     
        int const seuil = RAND_MAX / 2;
     
        unsigned int i;
        for (i = 0; i < sizeof(float); ++i) {
            if (rand() > seuil) {
                p_enfant[i] = p_gene_1[i];
            } else {
                p_enfant[i] = p_gene_2[i];
            }
        }
        printf("gene enfant : %f\n", gene_enfant);
     
        return 0;
    }

Discussions similaires

  1. [Codage] Conversion réel en binaire
    Par Arnaud F. dans le forum Langage
    Réponses: 11
    Dernier message: 24/05/2007, 17h20
  2. croiser 2 listes (algo génétique)
    Par italiasky dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 08/12/2006, 11h37
  3. [Algorithmes génétiques] Limites ?
    Par laclac dans le forum Intelligence artificielle
    Réponses: 2
    Dernier message: 21/03/2006, 10h46
  4. Algo génétiques
    Par Nemerle dans le forum Intelligence artificielle
    Réponses: 8
    Dernier message: 31/07/2005, 13h53
  5. 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