pb algorithme génétique

pb algorithme génétique - C - Programmation

Marsh Posté le 27-04-2011 à 23:38:14    

Bonjour,  
je doit bientôt rendre un projet qui est de faire un jeu d'othello avec une intelligence artificiel.
pour cela on utilise une fonction alphabeta (amélioration de minmax) avec une fonction d'évaluation et un algorithme génétique pour optimiser les coefficients de cette fonction d'évaluation
seulement le problème c'est que l'algorithme génétique génère 10 générations puis fait une erreur de segmentation (normalement il devrais en générer 50). en tout cas il ne m'en fait que 10 sous ubuntu, sous windows il n'en fait même pas une.
je suppose que c'est parce qu'on a pas assez libéré la mémoire alloué pourtant on l'a libéré chaque fois que c'était possible sauf à un endroit ou ça me fait une erreur de segmentation si je le rajoute pourtant pr moi c'est là qu'il doit être. (c'est le free qui est en commentaire à la fin d'alphabeta)
 
voila les lien pour accéder au fichiers de codes :
pour avoir tous les fichiers et pouvoir essayer de compiler :
https://rapidshare.com/files/459497247/othello_IA.zip
 
juste la fonction Alphabeta où je n'arrive pas à rajouter le free sans que ça plante :
https://rapidshare.com/files/459497291/alphabeta.c
 
merci d'avance pour votre aide.

Reply

Marsh Posté le 27-04-2011 à 23:38:14   

Reply

Marsh Posté le 28-04-2011 à 09:46:39    

Est-ce que tu as essayé de lancer ton programme avec Valgrind ?  
Pour les problèmes d'allocation / libération de mémoire, cet outil est top !


Message édité par shaoyin le 28-04-2011 à 09:55:28
Reply

Marsh Posté le 28-04-2011 à 10:26:54    

struct coup{
 int position;
 int couleur;
 int retournement[DIRECTIONS];
};
typedef struct coup * coup;
 
 
 
J'ai mal aux cheveux.

Reply

Marsh Posté le 28-04-2011 à 17:30:52    

GrosBocdel a écrit :

struct coup{
 int position;
 int couleur;
 int retournement[DIRECTIONS];
};
typedef struct coup * coup;
 
 
 
J'ai mal aux cheveux.


 
+1

Reply

Marsh Posté le 28-04-2011 à 19:09:42    

Pour avoir essayé de débugger ton code, tout ce que j'ai pu voir c'est que tu accèdes à de la mémoire non initialisée, mémoire qui sera utilisée comme indice pour un tableau => seg fault. Valgrind permet effectivement de se rendre compte de ce genre de chose très rapidement.
 

GrosBocdel a écrit :

struct coup{
 int position;
 int couleur;
 int retournement[DIRECTIONS];
};
typedef struct coup * coup;
 
J'ai mal aux cheveux.


 :??: C'est quoi le problème ?

Reply

Marsh Posté le 28-04-2011 à 19:43:14    

tpierron a écrit :

Pour avoir essayé de débugger ton code, tout ce que j'ai pu voir c'est que tu accèdes à de la mémoire non initialisée, mémoire qui sera utilisée comme indice pour un tableau => seg fault. Valgrind permet effectivement de se rendre compte de ce genre de chose très rapidement.
 


 

tpierron a écrit :


 :??: C'est quoi le problème ?


 
typedef struct coup * coup;  
 
coup est un pointeur sur coup;
Ca me fait mal.
 
après on se retrouve avec des :
coup meilleur_coup=(coup)malloc(sizeof(struct coup));
 
bon bah coucou alors!
 
 
edit: en tout cas, g++ a la gentillesse de refuser de compiler ça.


Message édité par GrosBocdel le 28-04-2011 à 19:53:23
Reply

Marsh Posté le 29-04-2011 à 00:17:26    

c'est vrai que c'était pas malin de le faire comme ça. Je pensais pouvoir m'en sortir avec des free(coups) mais en fait non.
 
du coup je me suis résolue à changer la structure et à mettre coup en structure et non en pointeur et effectivement ça marche très bien maintenant.
 
merci pour vos réponses

Reply

Marsh Posté le 29-04-2011 à 00:19:28    

enfin il a fallu qd même changer qques fonctions pour que ça fonctionne pour ceux qui voudrait essayer.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed