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 :

Récursivité pour calculer la valeur d'un état pour le jeu Hexapawn


Sujet :

Algorithmes et structures de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Récursivité pour calculer la valeur d'un état pour le jeu Hexapawn
    Bonjour,

    J'aimerais faire une fonction récursive qui prend en paramètre une configuration du jeux héxapawn et qui retourne son évaluation.
    cette fonction évalue récursivement tous les successeurs (configurations) pour trouver l’évaluation de la configuration du départ. Si une configuration n'a pas de successeurs, donc son évaluation est 0. sinon, si tout les évaluations des successeurs (configurations) d'une configuration sont positives, donc l'évaluation de la configuration sera (1+(le max des évaluations des successeurs))*(-1), sinon c'est 1+ (le max des évaluations des successeurs qui sont négatives)*(-1).

    exemple :
    .............-4
    ......... /...... \
    ........3......... 2
    ....../....\......./...\
    ....-2......0.. 0....-1
    ..../....\................|
    ...1.....0.............0
    . /
    .0
    La fonction doit renvoyée trois.

    NB :un nœud peut avoir plus que deux fils. c'est a dire une configuration peut avoir plusieurs successeurs.

    Mon code :
    Ne marche pas car je n'arrive pas a trouver une solution pour tester si les successeurs sont tous positives et au même temps les calculer.

    Merci.
    Code java : 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
     
    /*config :  la configuration de départ c'est une map qui a comme clé une position et Contenu comme valeur. Contenue désigne ce qu'elle contient une position (vide, un pion noir ou blanc )
       n: hauteur de la grille
       m : longueur de la grille
    */
    public static int  calculConfig(int n  ,int m,HashMap<Position,Contenu> config  ){
    	if (onePlayerWon(isWhiteTurn, n, m, config)){ // si un joueur a gagné on retourne 0 c'est a dire la configuration n'a pas de successeur 
     
    		return 0;
    	}
    	else {
    		boolean verif=true;
    		int max=0;
    		int max_neg=-100;
    		int resultCall;
    		List<HashMap<Position,Contenu>> listOfNextConfigs=getAllConfigPossible(isWhiteTurn, n,m,config);// renvoie la liste des configurations qui succèdent config
     
    		for(int i=0;i<listOfNextConfigs.size();i++){ // pour chaque element de la liste des successeurs
     
    	    	 resultCall=calculConfig(n,m,listOfNextConfigs.get(i)); //  calclule recursivement de l'évaluation de chaque successeur
     
    	    	 if (resultCall>max_neg && resultCall<0)// calcule du maximum négative des successeurs si il existe
    			 {
    		         max_neg=resultCall;
     
    			 }
    	    	 if (resultCall>max) calcule du maximum des successeurs 
    	    			 {
     
    	    		    max=resultCall;
    	    			 }
    	    	 if(resultCall<0){ //si il existe un successeur négative on change la valeur de verif.
     
    	    		 verif=false;
     
    	    	 }
    	     }
    	     if (verif==true){// si itous les successeurs sont positifs donc on retourne 1+(max)*(-1)
     
    		    	 return 1+(max)*(-1);
     
    		     }
    	     else{ //sinon on retourne (max_neg-1)*(-1);
     
    	    	   return (max_neg-1)*(-1);
    	     }
    	     }
     
    	}
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    De manière générale, les gens ici n'aiment pas télécharger des fichiers.
    Poste don code directement dans le message, avec la balise code ( symbole # dans la barre de boutons)

    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Récursivité héxapawn
    Merci pour votre réponse, c'est bon j'ai modifié ma publication.

Discussions similaires

  1. BigDecimal pour calculer une valeur approchée de PI
    Par win_ubuntu dans le forum Général Java
    Réponses: 3
    Dernier message: 28/05/2014, 17h45
  2. macro pour calculer les valeurs
    Par Daniela dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 06/10/2009, 08h56
  3. Decode avec des dates pour calculer une valeur
    Par decisio dans le forum Langage SQL
    Réponses: 1
    Dernier message: 19/01/2009, 12h50
  4. Réponses: 6
    Dernier message: 22/11/2005, 17h08

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