begin process at 2012 02 10 13:52:21
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

.Net

 > ESSAI D'ALGORYTHME GENETIQUE (DEV C++ 4)

ESSAI D'ALGORYTHME GENETIQUE (DEV C++ 4)


 Information sur la source

Note :
Aucune note
Catégorie :.Net Niveau :Débutant Date de création :14/01/2003 Date de mise à jour :14/01/2003 22:00:39 Vu / téléchargé :3 237 / 239

Auteur : zanidip

Ecrire un message privé
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

c'est un essai.les algos genetique s'inspirent de l'evolution decouverte par darwin.ici,l'ordi 'aprend' a jouer au jeu ou il ne faut pas prendre le dernier baton tout en enlevant a chaque tour.il tire une combinaison aleatoire pour le pere,puis la recrit avec de petites modifications.anssuite,le meilleur des fils devient pere et ainssi de suitte.      C un systeme tres puissant qui permet de faire des miracles en robotique autonome mais la ca marche pas tres bien.
c'est possible que ca ne marche pas sur certaines machines (notament a cause de system("cls") qui est je pensse specifique a dev C++).

je debute, donc vos commentaires sont les bienvenus! merci.... :-)

Source

  • #include <iostream.h>
  • #include <stdlib.h>
  • #include <time.h>
  • #include <conio.c>
  • #include <conio.h>
  • void affiche(int combine[14][6])
  • {
  • for(int y=0;y<=5;y++)
  • {
  • for(int x=1;x<=13;x++)
  • {
  • gotoxy(x+1,y+2);
  • cout<<combine[x][y];
  • }
  • }
  • }
  • int match(int combine[14][6],int J1,int J2)
  • {
  • int battons=13;
  • for(;;)
  • {
  • battons=battons-combine[battons][J1];
  • if(battons<=0)
  • return J2;
  • battons=battons-combine[battons][J2];
  • if(battons<=0)
  • return J1;
  • }
  • }
  • int main()
  • {
  • srand (time(NULL));
  • int combine[14][6]={0},score[6]={0},meilleur,temp;
  • //donne un code aleatoire au père
  • for(int x=1;x<=13;x++)
  • {
  • combine[x][0]=rand()%3+1;
  • }
  • debut:
  • cout<<"combien de generations attendre? (ou 0 pour quitter et -1 pour jouer)";
  • cin>>temp;
  • if(temp==0)
  • return 0;
  • if(temp==-1)
  • {
  • for(int battons =13,enleve;;)
  • {
  • system("cls");
  • cout<<"il reste "<<battons<<" a enlever.\n";
  • cout<<"combien de battons enlever? (1-2-3)";
  • cin>>enleve;
  • battons=battons-enleve;
  • if(battons<=0)
  • {
  • cout<<"perdu";
  • getch();
  • goto debut;
  • }
  • battons=battons-combine[battons][0];
  • if(battons<=0)
  • {
  • cout<<"gagne";
  • getch();
  • goto debut;
  • }
  • }
  • }
  • system("cls");
  • for(int z=1;z<=temp;z++)
  • {
  • //fixe les codes des "fils" avec 1% de chance de decalage.
  • for(int y=1;y<=5;y++)
  • {
  • for(int x=1;x<=13;x++)
  • {
  • if(rand()%20==1)
  • {
  • if(rand()%10<=5)
  • {
  • combine[x][y]=combine[x][0]+1;
  • }
  • else
  • {
  • combine[x][y]=combine[x][0]-1;
  • }
  • if(combine[x][y]==0)
  • {combine[x][y]=1;}
  • if(combine[x][y]==4)
  • {combine[x][y]=3;}
  • }
  • else
  • combine[x][y]=combine[x][0];
  • }
  • }
  • //affiche les codes du "pere" et des 5 "fils"
  • for(int y=0;y<=5;y++)
  • {
  • for(int x=1;x<=13;x++)
  • {
  • gotoxy(x+1,y+2);
  • cout<<combine[x][y];
  • }
  • }
  • // reinitialisation de la matrice des scores.
  • for(int x=0;x<=5;x++)
  • {score[x]=0;}
  • //deroulement des matchs
  • score[match(combine,1,2)]++;
  • score[match(combine,2,1)]++;
  • score[match(combine,1,3)]++;
  • score[match(combine,3,1)]++;
  • score[match(combine,1,4)]++;
  • score[match(combine,4,1)]++;
  • score[match(combine,1,5)]++;
  • score[match(combine,5,1)]++;
  • score[match(combine,2,3)]++;
  • score[match(combine,3,2)]++;
  • score[match(combine,2,4)]++;
  • score[match(combine,4,2)]++;
  • score[match(combine,2,5)]++;
  • score[match(combine,5,2)]++;
  • score[match(combine,3,4)]++;
  • score[match(combine,4,3)]++;
  • score[match(combine,3,5)]++;
  • score[match(combine,5,3)]++;
  • score[match(combine,4,5)]++;
  • score[match(combine,5,4)]++;
  • //affichage des scores.
  • for(int x=1;x<=5;x++)
  • {
  • gotoxy(16,x+2);
  • cout<<score[x];
  • }
  • for(int x=1,y=0;x<=5;x++)
  • {
  • if(score[x] >= y)
  • {
  • meilleur=x;
  • y=score[x];
  • }
  • }
  • cout<<" "<<meilleur;
  • for(int x=1;x<=13;x++)
  • {
  • combine[x][0]=combine[x][meilleur];
  • }
  • }
  • goto debut;
  • }
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <conio.c>
#include <conio.h>


void affiche(int combine[14][6])
{

for(int y=0;y<=5;y++)
      {
      for(int x=1;x<=13;x++)
             {
             gotoxy(x+1,y+2);
             cout<<combine[x][y];
             }
      }



}

int match(int combine[14][6],int J1,int J2)
{
int battons=13;
for(;;)
     {
     battons=battons-combine[battons][J1];
     if(battons<=0)
          return J2;
     battons=battons-combine[battons][J2];
     if(battons<=0)
          return J1;
     }
}


int main()
{
srand (time(NULL));

int combine[14][6]={0},score[6]={0},meilleur,temp;

       //donne un code aleatoire au père
for(int x=1;x<=13;x++)
        {
        combine[x][0]=rand()%3+1;
        }
        debut:

cout<<"combien de generations attendre? (ou 0 pour quitter et -1 pour jouer)";
cin>>temp;
if(temp==0)
return 0;

if(temp==-1)
     {
     for(int battons =13,enleve;;)
          {
          system("cls");
          cout<<"il reste "<<battons<<" a enlever.\n";
          cout<<"combien de battons enlever? (1-2-3)";
          cin>>enleve;
          battons=battons-enleve;
          if(battons<=0)
               {
               cout<<"perdu";
               getch();
               goto debut;
               }
          battons=battons-combine[battons][0];
          if(battons<=0)
               {
               cout<<"gagne";
               getch();
               goto debut;
               }
          }



     }
system("cls");
for(int z=1;z<=temp;z++)
{

       //fixe les codes des "fils" avec 1% de chance de decalage.
for(int y=1;y<=5;y++)
        {
        for(int x=1;x<=13;x++)
                {                                                     
                if(rand()%20==1)
                        {
                        if(rand()%10<=5)
                               {
                               combine[x][y]=combine[x][0]+1;
                               }
                               else
                               {
                               combine[x][y]=combine[x][0]-1;
                               }
                        if(combine[x][y]==0)
                             {combine[x][y]=1;}
                        if(combine[x][y]==4)
                             {combine[x][y]=3;}
                        }
                        else
                        combine[x][y]=combine[x][0];

                }
        }
      //affiche les codes du "pere" et des 5 "fils"
for(int y=0;y<=5;y++)
      {
      for(int x=1;x<=13;x++)
             {
             gotoxy(x+1,y+2);
             cout<<combine[x][y];
             }
      }

       // reinitialisation de la matrice des scores.
for(int x=0;x<=5;x++)
     {score[x]=0;}
     //deroulement des matchs
score[match(combine,1,2)]++;
score[match(combine,2,1)]++;
score[match(combine,1,3)]++;
score[match(combine,3,1)]++;
score[match(combine,1,4)]++;
score[match(combine,4,1)]++;
score[match(combine,1,5)]++;
score[match(combine,5,1)]++;

score[match(combine,2,3)]++;
score[match(combine,3,2)]++;
score[match(combine,2,4)]++;
score[match(combine,4,2)]++;
score[match(combine,2,5)]++;
score[match(combine,5,2)]++;


score[match(combine,3,4)]++;
score[match(combine,4,3)]++;
score[match(combine,3,5)]++;
score[match(combine,5,3)]++;

score[match(combine,4,5)]++;
score[match(combine,5,4)]++;




         //affichage des scores.
for(int x=1;x<=5;x++)
{
gotoxy(16,x+2);
cout<<score[x];
}

for(int x=1,y=0;x<=5;x++)
     {
     if(score[x] >= y)
     {
     meilleur=x;
     y=score[x];
     }
     }

cout<<" "<<meilleur;

for(int x=1;x<=13;x++)
    {
    combine[x][0]=combine[x][meilleur];
    }




}
goto debut;
}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture MAZER:GENERATEUR DE LABYRINTHE
Source avec Zip Source avec une capture HORLOGE A AIGUILLES (DEV)
Source avec Zip Source avec une capture ECRAN MATRIX BIS
Source avec Zip Source avec une capture ECRAN MATRIX
Source avec Zip AFFICHAGE DU TABLEAU ASCII ET DES COULEURS DE TEXTCOLOR(X);

 Sources de la même categorie

Source avec Zip Source avec une capture ANALYSEUR LEXICAL par Donald180v
Source avec Zip Source avec une capture MAP_MAKER_JEU par seekplus
Source avec Zip Source avec une capture Source .NET (Dotnet) EMISSION D'UN OCTET SUR LE PORT SÉRIE - CLASSE SERIALPORT par jmchatelet01
Source avec Zip Source .NET (Dotnet) RESOLV EQU DE DEGRES N par darckangel731
Source avec Zip Source avec une capture Source .NET (Dotnet) INTEROP XCHAT / .NET : CHARGEUR DE PLUGINS MANAGÉS par TeBeCo

Commentaires et avis

Commentaire de cmarsc le 15/01/2003 07:53:09

system est dans &lt;stdlib.h&gt; c'est une librairie STANDARD alors il ne posera aucun problème
return ; pour les fonctions de type void et return UNE_VALEUR; pour les autres.
tes goto(s) sont assez délicats un return peut parfois être plus adapté

pour rand()%3+1; il  faut mettre des parenthèses pour fixer l'ordre de opération par ex : (rand()%3) +1;

Commentaire de zanidip le 15/01/2003 10:15:33

ok ok.par contre,rand()3+1 me donne bien une valeur entre 1 et 3 donc les parenthese ne sont pas necesaires(je pensse)

Commentaire de cmarsc le 16/01/2003 07:29:08

en effet, c'est plus pour la lisibilité du code

Commentaire de pepet le 21/01/2003 11:54:10

G l'impression que tu as oublié la reproduction dans ton algo. Je pense kil faudrai creer plusieur parents et les faire ce reproduire entre eux et non creer seulement des mutations dun meme pere. Je croi ke tu aurai de bien meilleur resulatat de cette facon.
Pour choisir qui doit ce reproduire, un petit radom coeficienté ( le plus apte pourra aura plus de chance de se reproduire que le dernier! )
et pour les mutation pareille.

Commentaire de zanidip le 24/01/2003 11:28:40

ouais c'est pas con.our les mutation je comprend pas.certain devrais avoir plus de chance de ce reproduire?

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,983 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales