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 :

Aide dans un Algorithme de croisement en C


Sujet :

Algorithmes et structures de données

  1. #1
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Aide dans un Algorithme de croisement en C
    J'ai essayé de faire un programme C de croisement mais je ne sais pas comment faire l'appel pour la fonction du croisement et l'affichage du resultat!!

    j'ai fait cette fonction de croisement, je veut utiliser les deux matrices populations : pop et child au lieu de pere1, pere2, e1 et e2, Reformuler le code de la fonction CroisementMPX: enlever tout code inutile ou redondant pour optimiser le code.

    Le code après test se bloque dans certains cas, est ce qu'il y a une instruction (qui manque) dont la présence va empêcher ce plantage.

    Explication S.V.P!!

    Je veux aussi le programme principal qui:
    -Utilise la fonction Selection pour choisir deux parents de la matrice pop.
    -Affiche les deux pères.
    -Applique la fonction CroisementMPX.
    -Les deux enfants obtenus seront stockés dans la matrice child.
    -Affiche les deux enfants ainsi que leurs couts.

    (S.V.P toutes modification doivent etre commenté et merci )

    Mon travail:
    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
    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
     /************************* Croisement PMX ************************/
    void croisementMPX(int *pere1, int *pere2, int *e1, int *e2, int taille)
    {
        int pos1, pos2, i, j, aux;
        int *VerifE1 = new int[taille];
        int *VerifE2 = new int[taille];
        for (i = 0; i < taille; i++)
    	VerifE1[i] = 0;
        for (j = 0; j < taille; j++)
    	VerifE2[j] = 0;
    ////////////////Génération de deux positions//////////////// 
        pos1 = 2 + rand() % (taille - 5);
        pos2 = 2 + rand() % (taille - 5);
     
        if (pos1 == pos2)
    	pos2 = pos1 + 2;
        if (pos1 > pos2) {
    	aux = pos2;
    	pos2 = pos1;
    	pos1 = aux;
        }
    ///////////////////////////////////////////////////////////// 
        for (i = 0; i < taille; i++) {
    	if (i >= pos1 && i < pos2) {
    	    e1[i] = pere1[i];
    	    VerifE1[pere1[i] - 1] = 1;
    	} else
    	    e1[i] = 0;
        }
        for (i = 0; i < taille; i++) {
    	if (i < pos1) {
    	    if (!VerifE1[pere2[i] - 1]) {
    		e1[i] = pere2[i];
    		VerifE1[pere2[i] - 1] = 1;
    	    } else if (!VerifE1[pere1[i] - 1]) {
    		e1[i] = pere1[i];
    		VerifE1[pere1[i] - 1] = 1;
    	    } else {
    		for (j = pos1; j < pos2; j++)
    		    if (!VerifE1[pere2[j] - 1]) {
    			e1[i] = pere2[j];
    			VerifE1[pere2[j] - 1] = 1;
    		    }
    	    }
    	}
    	if (i >= pos2) {
    	    if (!VerifE1[pere2[i] - 1])
    	    {
    		e1[i] = pere2[i];
    		VerifE1[pere2[i] - 1] = 1;
    	    } else if (!VerifE1[pere1[i] - 1]) {
    		e1[i] = pere1[i];
    		VerifE1[pere1[i] - 1] = 1;
    	    } else {
    		for (j = pos1; j < pos2; j++) {
    		    if (!VerifE1[pere2[j] - 1]) {
    			e1[i] = pere2[j];
    			VerifE1[pere2[j] - 1] = 1;
    		    }
    		}
    	    }
    	}
        }
    // printf("n Enfant2n"); 
        for (i = 0; i < taille; i++) {
    	if (i >= pos1 && i < pos2) {
    	    e2[i] = pere2[i];
    	    VerifE2[pere2[i] - 1] = 1;
    	} else
    	    e2[i] = 0;
        }
        for (i = 0; i < taille; i++) {
    	if (i < pos1) {
    	    if (!VerifE2[pere1[i] - 1]) {
    		e2[i] = pere1[i];
    		VerifE2[pere1[i] - 1] = 1;
    	    } else if (!VerifE2[pere2[i] - 1]) {
    		e2[i] = pere2[i];
    		VerifE2[pere2[i] - 1] = 1;
    	    }
     
    	    else {
    		for (j = pos1; j < pos2; j++) {
    		    if (!VerifE2[pere1[j] - 1]) {
    			e2[i] = pere1[j];
    			VerifE2[pere1[j] - 1] = 1;
    		    }
    		}
    	    }
    	}
    	if (i >= pos2) {
    	    if (!VerifE2[pere1[i] - 1]) {
    		e2[i] = pere1[i];
    		VerifE2[pere1[i] - 1] = 1;
    	    } else if (!VerifE2[pere2[i] - 1]) {
    		e2[i] = pere2[i];
    		VerifE2[pere2[i] - 1] = 1;
    	    } else {
    		for (j = pos1; j < pos2; j++) {
    		    if (!VerifE2[pere1[j] - 1]) {
    			e2[i] = pere1[j];
    			VerifE2[pere1[j] - 1] = 1;
    		    }
    		}
    	    }
    	}
        }
        free(VerifE1);
        free(VerifE2);
    }

    MERCI D'AVANCE!!!

  2. #2
    Membre émérite
    Avatar de prgasp77
    Homme Profil pro
    Ingénieur en systèmes embarqués
    Inscrit en
    Juin 2004
    Messages
    1 306
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur en systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 306
    Points : 2 466
    Points
    2 466
    Par défaut
    Bonjour et bienvenu.
    Plusieurs choses :
    • Ton code est illisible, merci d'utiliser la balise [code] et de l'indenter
    • Je ne sais pas ce qu'est un algorithme de croisement, peux-tu en dire un peu plus ou proposer un lien vers une explication ?
    • Je saisie mal ton problème, peux-tu être plus clair stp ?

  3. #3
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 084
    Points
    16 084
    Par défaut
    hum... T'as trouvé un source d'une fonction quelque part et tu veux qu'on modifie cette fonction, qu'on crée une application autour et qu'on commente nos modifications ? C'est bien ça ?

  4. #4
    Candidat au Club
    Inscrit en
    Novembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    @prgasp77: http://khayyam.developpez.com/articles/algo/genetic/

    @pseudocode: non c'est un projet d'étude, je vais le présenter le lendemain!!!
    le professeur nous a dit que ce sera un avantage pour qui le fait et qu'il sera compris dans la note du semestre

Discussions similaires

  1. besoin d'aide dans un prototype
    Par amigauss dans le forum C
    Réponses: 5
    Dernier message: 17/10/2006, 10h02
  2. aide dans la programmation
    Par hamadi_insat dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/09/2006, 15h38
  3. Réponses: 3
    Dernier message: 09/01/2006, 11h26
  4. [VBA][Word]Inserer aide dans template
    Par acathary dans le forum VBA Word
    Réponses: 2
    Dernier message: 04/01/2006, 10h57
  5. Réponses: 14
    Dernier message: 18/08/2005, 12h20

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