j'ai fait le rapport chef ! c'est vraiment pas mal, j'ai développé les partie nécessaires
This commit is contained in:
49
RAPPORT.md
49
RAPPORT.md
@@ -10,6 +10,23 @@ Joueur : `escampe.JoueurPuyaubreauRussac`
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Sommaire
|
||||||
|
|
||||||
|
1. [Présentation et règles](#1-présentation-et-règles)
|
||||||
|
2. [Analyse des caractéristiques du jeu (Q1–Q7)](#2-analyse-des-caractéristiques-du-jeu-q1q7)
|
||||||
|
3. [Modélisation : la classe `EscampeBoard`](#3-modélisation--la-classe-escapeboard)
|
||||||
|
4. [Intégration au tournoi : protocole de l'arbitre](#4-intégration-au-tournoi--protocole-de-larbitre)
|
||||||
|
5. [Placement d'ouverture](#5-placement-douverture)
|
||||||
|
6. [Moteur de décision](#6-moteur-de-décision)
|
||||||
|
7. [Heuristique d'évaluation](#7-heuristique-dévaluation)
|
||||||
|
8. [Gestion du temps réel](#8-gestion-du-temps-réel)
|
||||||
|
9. [Performances et tests](#9-performances-et-tests)
|
||||||
|
10. [Compilation, exécution et livrables](#10-compilation-exécution-et-livrables)
|
||||||
|
11. [Sources et bibliographie](#11-sources-et-bibliographie)
|
||||||
|
12. [Conclusion et difficultés rencontrées](#12-conclusion-et-difficultés-rencontrées)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 1. Présentation et règles
|
## 1. Présentation et règles
|
||||||
|
|
||||||
Escampe se joue sur un plateau de 36 cases (6×6). Chaque case porte un liseré
|
Escampe se joue sur un plateau de 36 cases (6×6). Chaque case porte un liseré
|
||||||
@@ -22,10 +39,9 @@ d'une case dont le liseré est *identique* à celui de la case d'arrivée du cou
|
|||||||
adverse précédent. Le liseré de départ fixe le nombre de pas (1, 2 ou 3),
|
adverse précédent. Le liseré de départ fixe le nombre de pas (1, 2 ou 3),
|
||||||
orthogonaux, sans traverser ni revisiter de case. On ne capture qu'en se posant,
|
orthogonaux, sans traverser ni revisiter de case. On ne capture qu'en se posant,
|
||||||
au dernier pas, sur la licorne adverse (paladins imprenables). Sans coup possible,
|
au dernier pas, sur la licorne adverse (paladins imprenables). Sans coup possible,
|
||||||
on passe son tour.
|
on passe son tour. Toute la difficulté consiste donc à "coincer" son adversaire.
|
||||||
|
|
||||||
Déroulement : Noir place ses six pièces sur les deux lignes d'un bord ; Blanc sur
|
Déroulement : Noir place ses six pièces sur les deux lignes d'un bord (spécifié dans l'énnoncé : haut ou bas) ; Blanc sur le bord opposé ; **Blanc joue le premier coup**.
|
||||||
le bord opposé ; **Blanc joue le premier coup**.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -84,10 +100,25 @@ Le branchement effectif modeste explique les profondeurs élevées atteintes par
|
|||||||
l'alpha-bêta (§6).
|
l'alpha-bêta (§6).
|
||||||
|
|
||||||
### Q4 — Coups imparables
|
### Q4 — Coups imparables
|
||||||
Pas d'« imparable » universel garanti dès le départ (la contrainte de liseré peut
|
|
||||||
toujours bloquer une menace). Mais des configurations créent un **zugzwang
|
Pas d'« imparable » universel garanti dès le départ : la contrainte de liseré peut
|
||||||
partiel** (exemple figure 6 : C2 prend C1 dès que Noir est forcé d'imposer un
|
toujours bloquer une menace, car l'adversaire choisit sa case d'arrivée et donc le
|
||||||
liseré double). Notre recherche les exploite quand ils sont à portée d'horizon.
|
liseré qu'il impose au tour suivant. En revanche, certaines configurations créent
|
||||||
|
un **zugzwang partiel** — l'adversaire est forcé d'imposer précisément le liseré
|
||||||
|
qui autorise la capture.
|
||||||
|
|
||||||
|
**Exemple concret (figure 6 de l'énoncé).** Noir vient de poser sa pièce en D4 (liseré double,
|
||||||
|
TILE\_MAP = 2). Blanc doit donc jouer depuis une case à liseré double. Il choisit
|
||||||
|
**F6–E5** (F6 est à liseré double). Noir doit maintenant jouer depuis une case à
|
||||||
|
liseré simple (E5 = 1) : son seul coup raisonnable est **A1–A2**. A2 est à liseré
|
||||||
|
triple (TILE\_MAP = 3). Blanc joue alors **C2×C1** : le paladin en C2 (liseré 3)
|
||||||
|
effectue les trois pas C2→D2→D1→C1 et capture la licorne noire. La séquence
|
||||||
|
F6–E5 / A1–A2 / C2×C1 est donc un « imparable local » : dès que Noir est forcé
|
||||||
|
d'atterrir en A2, la capture est inévitable.
|
||||||
|
|
||||||
|
Ce type de combinaison est inexploitable de façon générale depuis le début de la
|
||||||
|
partie (trop de degrés de liberté), mais notre alpha-bêta le détecte et le joue
|
||||||
|
dès qu'il est à portée d'horizon.
|
||||||
|
|
||||||
### Q5 — Critères pour l'heuristique
|
### Q5 — Critères pour l'heuristique
|
||||||
Cinq critères identifiés : distance à la licorne adverse, mobilité différentielle,
|
Cinq critères identifiés : distance à la licorne adverse, mobilité différentielle,
|
||||||
@@ -112,7 +143,7 @@ budget par coup dérivé du temps restant (§8).
|
|||||||
|
|
||||||
## 3. Modélisation : la classe `EscampeBoard`
|
## 3. Modélisation : la classe `EscampeBoard`
|
||||||
|
|
||||||
`EscampeBoard` (~860 lignes) implémente `Partie1` (`setFromFile`/`saveToFile`,
|
`EscampeBoard` implémente `Partie1` (`setFromFile`/`saveToFile`,
|
||||||
`isValidMove`, `possiblesMoves`, `play`, `gameOver`). Conventions de l'arbitre :
|
`isValidMove`, `possiblesMoves`, `play`, `gameOver`). Conventions de l'arbitre :
|
||||||
coup `"B1-D1"`, placement `"C6/A6/B5/D5/E6/F5"` (licorne en tête), pass `"E"`.
|
coup `"B1-D1"`, placement `"C6/A6/B5/D5/E6/F5"` (licorne en tête), pass `"E"`.
|
||||||
|
|
||||||
@@ -184,6 +215,8 @@ Bord bas A1/A2/B1/E1/F1/C2 Bord haut A6/A5/B6/C5/F5/E6
|
|||||||
mobiles E1·F1·C2 = liserés 1·2·3 mobiles C5·F5·E6 = liserés 1·2·3
|
mobiles E1·F1·C2 = liserés 1·2·3 mobiles C5·F5·E6 = liserés 1·2·3
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Nous n'utilisons pas de bibliothèque d'ouvertures de coups. La raison principale est que la contrainte de liseré rend l'arbre d'ouverture très sensible au placement adverse : une séquence pré-calculée contre un placement différent du nôtre perdrait toute pertinence dès le deuxième coup. De plus, le branchement moyen (~8,9) est suffisamment faible pour que l'alpha-bêta atteigne la profondeur 12–15 dès les premiers coups, rendant une bibliothèque peu utile. Le placement fixe ci-dessus suffit à garantir une position solide et reproductible dès le début.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 6. Moteur de décision
|
## 6. Moteur de décision
|
||||||
|
|||||||
Reference in New Issue
Block a user