Espace membre :
flechePublicité

8 messages
Filtrer ok

[C ANSI] Projet Othello (<=>Reversi) et algo minimax

   Linux
Salut a tous !

Pour la fac je dois developper un othello en C utilisant l'algorithme minimax
(avec des coupes alpha-beta).
Les sources sont dispo ici.

Je suis entrain d'implementer le minimax, ou plutot tester si le prog respecte l'algo minimax.

J'ai essayer de le regarder tourner avec une profondeur de 2 il marche si je ne m'abuse, mais une prof de 3 est encore plus dure a tester etant donner le nombre de recursion, a coups de printf ca devient illisible


1) Si quelqu'un connait l'algorithme, est ce qu'il pense que mon code respecte l'algo ???
(En partant du principe que toutes les fonctions appelées font bien leur role )

2) Comment faire pour que mon programme puisse jouer contre une autre version de mon programme (afin de tester les coefficient de la fonction d'évaluation).
Je suis sous linux, et le programme est en mode-texte. Actuellement je les lancent dans 2 terminaux differents et les 2 progs jouent en Human Vs CPU et je dois taper tous les coups jouer par le 1 dans le 2 et vice-versa...
Et il possible de faire ca avec quelques redirections ou un script ?


Cordialement

Voici mon code:
[cpp]
float trouveCoupMinimax(char * grille, char camp, int prof, StrCoup * coup)
{
float evalMeilleur;
float eval_tmp;
int i,j;
char * tmp_grille;
Maillon * teteMaillon;
Maillon * courantMaillon;

StrCoup * tmp_coup;

if(camp=='x')
evalMeilleur=-FLT_MAX;
else
evalMeilleur=FLT_MAX;


if(prof==1)
{

if(camp=='o')
evalMeilleur=trouveCoupQuiMinimise(grille,coup);
else
evalMeilleur=trouveCoupQuiMaximise(grille,coup);

printf("MiniMax: eval Meilleur: %f\n",evalMeilleur);

}
/* Si la profondeur est != a 1 */
else
{

teteMaillon=NULL;
donneTousLesCoupsValides(grille,camp,&teteMaillon);
courantMaillon=teteMaillon;

while(courantMaillon)
{

tmp_coup=(StrCoup*)malloc(sizeof(StrCoup));

/* Duplicata de la grille */
tmp_grille = mystrdup(grille,DIMENSION_MAX*DIMENSION_MAX);

if(!tmp_grille)
{
printf("malloc null: tmp_grille, trouveCoupMinimax\n");
exit(1);
}


i=courantMaillon->coup.ligne;
j=courantMaillon->coup.colonne;

/* Je joue le Coup donner en entree i,j dans tmp_grille */
*(tmp_grille+(i*DIMENSION_MAX)+j)=camp;
retournePions(camp,tmp_grille,i,j);

printf("\n\n\n\n");
printf("MiniMax: (prof:%i)",prof);
printf("MiniMax: Evaluation de la position: (%c %i)\n",
j+'a',
i+1);

/* Si le l'adversaire ne peux pas jouer */
if(!existeCoupPourCamp(tmp_grille,adversaire(camp)))
{
printf("MiniMax: %c ne peux pas jouer\n",adversaire(camp));
eval_tmp=evalue(tmp_grille);
printf("MiniMax: eval_tmp: %f\n",eval_tmp);
}
else
{

eval_tmp=trouveCoupMinimax(tmp_grille,
adversaire(camp),
prof-1,
tmp_coup);

printf("MiniMax: eval_tmp: %f\n",eval_tmp);
}

if(camp=='x')
{
if(eval_tmp>evalMeilleur)
{
evalMeilleur=eval_tmp;
coup->ligne=i;
coup->colonne=j;
printf("MiniMax: Ce coup maximise + que le precedent\n");
}
}
else
{
if(eval_tmp<evalMeilleur)
{
evalMeilleur=eval_tmp;
coup->ligne=i;
coup->colonne=j;
printf("MiniMax: -->Ce coup minimise + que le precedent\n");
}
}

/* Suppression du duplicata */
free(tmp_grille);
free(tmp_coup);

/* on passe au maillon suivant */
courantMaillon=courantMaillon->suivant;


} /* fin while */

free_Maillons(teteMaillon);

} /* fin if */


return evalMeilleur;

}

[/cpp]
 
 
Pour ce que tu veux faire (ie: communication entre deux processus) tu as tenté de faire :

prog1 | prog2 ?

Sinon faut passer par l'appel système pipe(), etc
Modérateur Logiciel - Programmation
 
 
je connais pas du tout justement, la tu parle d appel systeme en C dans le prog othello ?
 
 
Voui ... Et j'en parlerai pas.
Modérateur Logiciel - Programmation
 
 
- Une connexion socket?
- Un segment de shared memory?
 
 
Moi je pensais a un truc plus simple (enfin si possible) genre
ge redirige un dans un fichier toto avec > puis un
donner les coups au 2eme avec un tail -f | grep -n -E "[a-hz] [0-9]\n" toto
Enfin un truc dans le style, crade mais suffisant
Edit: C possible?
 
 
Bonne année ! Merci pour ce pti bout de code. Le MinMax l'air pas mal
Justement on vient juste de m'envoyer un algorithme de othello en ADA que j'ai fais tourner sous linux et je cherchais un petit algo d'IA. Si il t'intéresse c'est sous http://www.jecompile.com/ADA/othello.

La méthode de jeu de l'ordi est très basique mais ça fonctionne bien.
 
 
5 ans quand même si c'est un projet de FAC/IUT, il a eu le temps de le finir !

Je ferme le topic, les intéressés pourront en recréer un autre.
Modérateur Logiciel - Programmation
 
 
     
8 messages
Filtrer ok

BE GEEK ! Avec Clubic Logo

flechePublicité