Add heuristic documentation

This commit is contained in:
Yorick Barbanneau 2023-12-17 01:19:58 +01:00
parent a64e318c82
commit e506bcdab9

View file

@ -44,16 +44,21 @@ Voici la liste des options :
* `-wh` | `--black-heuristic-engine`: moteur heuristique utilisé pour
l'exploration de l'arbre de jeu du joueur blanc (valable pour les moteur de
jeu `minmax` et `alphabeta`)
* `--weight`: scores utilisés pour le calcul des heuristiques pour les moteurs
`weight` et `full`.
L'affichage verbeux est activé avec `-V` et les informations de débogage sont
affichée avec l'option `-d`.
## Choix d'implémentation
J'ai avant tout privilégié la personnalisation des différentes paramètres des
différents moteurs composant le jeu.
### Classes PlayerEngine
Définies dans le fichier `./src/classes/Engines.py`, les classes utilisées h
eritent de la classe de base `PlayerEngines` :
Définies dans le fichier `./src/classes/Engines.py`, les classes utilisées
ritent de la classe de base `PlayerEngines` :
```python
class PlayerEngine(Object):
@ -63,8 +68,38 @@ class PlayerEngine(Object):
class MinmaxPlayerEngine(PlayerEngine):
def get_move(board):
class RandomPlayerEngnine(PlayerEngine):
class RandomPlayerEngine(PlayerEngine):
def get_move(board):
```
Il est ainsi plus aisé de tester les moteur dans notre programme de base.
### Classes HeuristicsEngine
Plusieurs classes impémentent plusieurs méthodes pour le calcul de
l'heuristique. Comme nous l'avons vu, les moteurs peuvent être choisis en ligne
de commande et de façon indépendante pour les joueurs blanc et noir.
Trois implementation sond disponibles:
1. `ScoreHeuristicEngine`: l'heuristique se sert du score (comptage des pièces
sur le tableau) via la méthode `Board.heuristique`;
2. `WeightHeuristicEngine`: ici on se sert de la place des pièces sur le
tableau. Chaque emplacement vaut un nombre de points;
3. `FullHeuristicEngine`: c'est la somme de `Board.heuristique()` et du calcul
des poids.
#### Retour sur le calcul des poids.
Afin de définir le poids, je me suis servi de la page *Stratégie et bases de
Reversi* sur le site Cool Math Games ([lien][reversi]). Voici les poids par
ordre d'importance :
1. Les coins représentent les parties les plus importantes;
2. Ensuite vient les bords;
3. Et enfin les coins.
Les poids affectés sont personnalisable via l'options `--weight`, par défaut
nous avons 2, 10 et 25.
[reversi]:https://www.coolmathgames.com/blog/how-to-play-reversi-basics-and-best-strategies