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

Intelligence artificielle Discussion :

[Alpha/beta] Mélange avec negamax


Sujet :

Intelligence artificielle

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 23
    Points
    23
    Par défaut [Alpha/beta] Mélange avec negamax
    Bonjour,

    Dans le cadre d'un projet je dois implémenter 3 algorithme:

    -minmax
    -negamax
    -alphabeta(j'ai choisi l'alphabeta de negamax )

    Minmax et negamax sont implémentés et fonctionnent bien, cependant alphabeta ne fonctionne pas du tout, pourriez vous m'indiquer ce qui ne va pas dans mon code?

    Voilà ma fonction alphabeta:

    Code : 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
     
    	private int alphabeta(AbstractGame game, int depth, int alpha, int beta, boolean IPlay)
    	{
    		if (game.isFinish() || depth <= 0)return this.eval(game);
    		TGame joueurActuel = IPlay?this.getJoueurEnnemi() : this.getJoueur();
    		ArrayList<Vector2d> actions = game.getPossibleActions(joueurActuel);
     
    		for (Vector2d pos : actions) 
    		{
    			game.insert(pos, joueurActuel);
    			int score = -alphabeta(game,depth - 1, -beta, -alpha,!IPlay);
    			game.cancel();
    			if (score >= alpha)
    			{
    				alpha = score ;
    			}
    			if (alpha >= beta)
    			{
    				bestMove = pos;
    				return alpha;
    			}
    		}
    		return alpha;
    	}
    Voilà la fonction où est appelée alphabeta:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	@Override
    	public Vector2d getBestPosition(AbstractGame game) 
    	{
    		bestMove = null;
    		this.alphabeta(game, this.getProfondeur(), Integer.MIN_VALUE, Integer.MAX_VALUE, true);
    		return bestMove;
    	}
    Merci d'avance pour vos réponses et pour votre aide.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Une petite info en plus, voici ma fonction d'évaluation:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	@Override
    	public int eval(AbstractGame game) 
    	{
    		if(game.win(this.getJoueurEnnemi()))return 1000 ;
    		else if(game.win(this.getJoueur()))return -1000 ;
    		else return 0;
    	}

  3. #3
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Quelqu'un n'aurait pas une idée?

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2012
    Messages : 45
    Points : 23
    Points
    23
    Par défaut
    Pour ceux que ça interesse j'ai réglé le problème:

    Code : 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
     
     
    private int alphabetaNega(AbstractGame game,int depth, int alpha, int beta,boolean IPlay)
    	{
    		if (game.isFinish() || depth == 0 ) return IPlay?this.eval(game):-this.eval(game);
    		TGame joueurActuel = IPlay?this.getJoueurEnnemi() : this.getJoueur();
    		ArrayList<Vector2d> actions = game.getPossibleActions(joueurActuel);
    		int val;
    		for(Vector2d pos : actions)
    		{
    			game.insert(pos, joueurActuel);
    			val = - alphabetaNega(game,depth - 1, -beta, -alpha,!IPlay);
    			game.cancel();
    			if (val > alpha)
    			{
    				alpha = val;
    				if (val >= beta) return val;
    			}
    		}
    		return alpha;
    	}

  5. #5
    Membre émérite
    Avatar de Franck Dernoncourt
    Homme Profil pro
    PhD student in AI @ MIT
    Inscrit en
    Avril 2010
    Messages
    894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PhD student in AI @ MIT
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 894
    Points : 2 464
    Points
    2 464
    Par défaut
    Merci de nous avoir tenu au courant de la résolution du problème

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème IA NegaMax + Alpha-Beta
    Par giustino dans le forum C
    Réponses: 0
    Dernier message: 23/05/2012, 13h45
  2. Alpha-beta pruning avec jeu de dames
    Par Sumoner dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 21/09/2011, 22h52
  3. [Continuum] [1.1-alpha-2] Probleme avec schedule
    Par marcxa44 dans le forum Intégration Continue
    Réponses: 2
    Dernier message: 22/06/2007, 09h49
  4. [Alpha/beta] Comprendre l'algorithme
    Par Clad3 dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 15/01/2007, 10h50
  5. Algorithme Minimax/Alpha-Beta
    Par Guybrush Threepwood dans le forum Flash
    Réponses: 2
    Dernier message: 14/03/2006, 11h01

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