Dérivation de la classe Evaluator

La classe Evaluator permet d'implémenter une fonction d'évaluation spécifique à chaque jeu de stratégie.
Une fonction d'évaluation est une fonction associant à un plateau et un joueur une note entière (type int) comprise entre -Integer.MAX_VALUE et Integer.MAX_VALUE (attention, généralement -Integer.MAX_VALUE=Integer.MIN_VALUE+1).
Plus la situation du plateau est favorable au joueur, plus la note attribuée par la fonction d'évaluation est élevée ; à l'inverse plus le plateau est défavorable, plus la note est faible.
La fonction d'évaluation retourne Integer.MAX_VALUE si et seulement si le plateau représente une situation de victoire définitive pour le joueur, elle retourne -Integer.MAX_VALUE si et seulement si le plateau représente une situation de défaite définitive pour le joueur.
La fonction d'évaluation doit être symétrique : f(player1) == -f(player2).

Une fonction d'évaluation peut également être paramétrée, ses paramètres étant typiquement des coefficients. En effet, pour évaluer un plateau de jeu, il peut être intéressant d'exécuter plusieurs sous-fonctions d'évaluation chacune attribuant une note pour un aspect du plateau. Ensuite, on réalise une moyenne de ces notes en les coefficiantant. En modifiant ces coefficients, il est alors possible de privilégier une ou plusieurs sous-fonctions d'évaluations.
Une fonction d'évaluation implémentée dans une classe dérivée de Evaluator peut donc utiliser des paramètres qui lui sont communiqués par l'initialisation de la classe avec un objet Map.

Paramètres d'évaluation par défaut

Les paramètres d'évaluation par défaut sont définis grâce à la méthode Map Evaluator.getDefaultParameters(). Cette méthode retourne un objet Map des paramètres par défaut à utiliser pour l'évaluation.
Même si la fonction d'évaluation n'utilise pas de paramètres, il est nécessaire que cette fonction retourne un objet Map, même vide.

Initialisation de la classe d'évaluation

L'initialisation de la classe d'évaluation consiste à assigner les valeurs nécessaires aux membres de la classe pour les paramètres d'évaluation communiqués (sous forme d'objet Map).
Pour cela on implémente la méthode abstraite Evaluator.initialize(Map).
Cette méthode est automatiquement appelée lors de la construction d'une instance Evaluator en utilisant l'objet Map retourné par getDefaultParameters().
L'initialisation permet notamment de communiquer les coefficients utilisés par d'éventuelles sous-fonctions d'évaluation : il est conseillé d'utiliser des coefficients de type Integer ou Move afin que ceux-ci puissent être manipulés par l'algorithme génétique de détermination des coefficients (lancé via la classe Trainer).

Si un paramètre indispensable est absent ou bien si un des paramètres de l'objet Map n'est pas valide, une exception StrategicException doit être levée.

Compatibilité de la classe d'évaluation avec un plateau Game.Board

Chaque jeu de stratégie doit faire l'objet de l'écriture d'une classe dérivée de Evaluator qui lui est propre. Il est alors nécessaire lors de l'utilisation d'une classe dérivant de Evaluator si celle-ci est capable d'évaluer le plateau du jeu courant. On utilise à cet effet la méthode boolean Evaluator.isSupportedBoard(Game.Board) indiquant si le plateau passé en paramètre peut être évalué par la fonction d'évaluation de la classe.

La fonction d'évaluation

La fonction d'évaluation doit être implémentée dans la méthode Evaluator.evaluate(Game.Board,Player). Cette fonction doit évaluer le plateau du point de vue du joueur indiqué.
Sachant que la fonction d'évaluation a probablement besoin d'accéder à des membres privés ou protégés de la classe du plateau, il est nécessaire que ces deux classes soient regroupés dans le même package.

En cas d'erreur survenant lors de l'évaluation du plateau, une exception StrategicException doit être levée. Il est notamment conseillé de vérifier que le plateau passé en paramètre est bien compatible avec la fonction d'évaluation en utilisant la méthode isSupportedBoard().

Naturellement, le programmeur est libre de faire appel à des sous-fonctions d'évaluation de son choix et de leur appliquer les transformations mathématiques souhaitées.


Revenir à l'introduction
2004, The Sgamaja project <http://sgamaja.sf.net/>