Essai d'algorythme genetique (dev c++ 4)

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 / Exemple :


#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;
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.