Vous êtes sur la page 1sur 8

Rapport de projet

Informatique de Base

Cration dun Master-Mind six couleurs et quatre possibilits. Projet raliser en Java. La
seconde partie intgrera une intelligence artificielle capable de rsoudre sans intervention
humaine le plus rapidement possible la combinaison entre par un humain.

Loc Ehre
Olivier Versanne
1re anne groupe 3

2007 2008

Loc Ehre Olivier Versanne

Rapport de projet

Informatique de Base

Introduction
Le projet est divis en deux parties qui forment terme un seul programme.
La premire partie consiste la cration de linterface du jeu de Master-Mind pour que lutilisateur
puisse saisir des combinaisons de couleurs dans le but de trouver la combinaison propose
alatoirement par lordinateur.
La seconde partie complte le jeu en ajoutant une intelligence artificielle qui doit trouver la
combinaison choisie par un utilisateur en un minimum de coups.

Cas dutilisation

Structuration du projet
Java tant un langage de programmation objet, nous avons dcid de tirer partie des avantages de
cette mthode de programmation et avons dcoup notre projet en diffrentes classes, comme vous
pouvez le voir sur le schma UML suivant.

Diagramme UML

2007/2008

-2/8-

ESIAL

Loc Ehre Olivier Versanne

Rapport de projet

Informatique de Base

Mastermind
Le programme principal se trouve dans la classe Mastermind . Celle-ci va dfinir deux instances de
la classe abstraite Joueur qui seront de type ordinateur contre humain ( noter quavec notre modle
de conception, il est possible de faire jouer deux humains ensemble ou deux ordinateurs ensemble).
if(choix == 1){ // L'utilisateur recherche la combinaison
this.cacheur = new Ordinateur();
this.chercheur = new Humain();
} else if(choix == 2) { // L'utilisateur cre la combinaison
this.cacheur = new Humain();
this.chercheur = new Ordinateur();
}

Grce la gnralisation, il est trs simple de dfinir les cas de jeu

Joueur
La classe Joueur gnralise la conception et permet donc de programmer simplement la diffrence
entre un Ordinateur et un Humain ce qui rend facile lalternance dun joueur humain avec un joueur
informatique.
abstract public class Joueur {
/*Classe abstraite de gnralisation utilise dans Mastermind.java pour
* dfinir un joueur (humain ou informatique)
*/
protected Combinaison combinaison; // Uniquement utilis dans le cas o le joueur est
celui qui cache
public Combinaison get_combinaison() { return this.combinaison; }
// Cration de la combinaison
abstract public void creer_combinaison();
// Recherche de la combinaison
abstract public void chercher_combinaison(Combinaison c);
}

Classe Joueur

Combinaison
La classe Combinaison reprsente les associations des quatre billes du Master-Mind. La classe gre
les combinaisons avec un tableau dentier de longueur quatre. La classe est compose de plusieurs
mthodes. La mthode bienPlace qui retourne le nombre de billes bien place, ou le nombre de
tmoins noirs, et la mthode malPlace qui retourne le nombre de billes en mauvaise positions
(tmoins blancs). Nous avons dissoci ces mthodes afin de pouvoir utiliser leurs rsultats
directement dans des tests en optimisant ainsi le nombre de calculs effectus.

Constante
La classe Constante regroupe toutes les constantes utilises dans le programme ; du nom du jeu au
nombre de pion en passant par la valeur entire correspondante aux couleurs. Cette classe est aussi
munie dune fonction indiquant si un entier correspond une couleur.

Console
Nous avons cr une classe Console et navons pas utilis celle qui tait disponible car celle-ci navait
ni les mthodes que nous attendions ni la gestion de laffichage souhait. Cette classe est dote de
fonctions raccourcies comme println ou print qui permettent dviter de saisir chaque fois
System.out.println(), de la fonction read qui rcupre les caractres saisis, readInt qui recueille un
entier saisi en vrifiant quil se trouve dans le bon intervalle et enfin readCouleur qui gre la saisie
dune combinaison de couleur et retourne une combinaison.

2007/2008

-3/8-

ESIAL

Loc Ehre Olivier Versanne

Rapport de projet

Informatique de Base

Deuxime phase : lIntelligence Artificielle


Fonctionnement
Lalgorithme que nous avons choisi commence par crer lensemble des combinaisons possibles
(
).
ArrayList<Combinaison> combin_dispo = new ArrayList<Combinaison>
((int)(Math.pow(Constante.NB_PION, Constante.NB_COULEUR)));
for(int i = 1; i <= Constante.NB_COULEUR; i++)
for(int j = 1; j <= Constante.NB_COULEUR; j++)
for(int k = 1; k <= Constante.NB_COULEUR; k++)
for(int l = 1; l <= Constante.NB_COULEUR; l++)
combin_dispo.add(new Combinaison(i, j, k, l));

Cration du tableau initial contenant toutes les combinaisons possibles

Il limine les combinaisons incohrentes avec les rsultats des tmoins rcuprs, jusqu obtenir un
ensemble trs petit dans lequel se trouvera la combinaison. Lalgorithme na donc pas besoin de se
rappeler les rsultats et combinaisons prcdentes puisque les combinaisons impossibles sont dj
supprimes de lensemble.
La suppression dune combinaison de lensemble seffectue en analysant chaque combinaison de
lensemble par rapport celle qui a t saisie et nous ne gardons que les combinaisons qui rendent
exactement les mmes tmoins.
for(int j = 0; j < combin_dispo.size(); j++){
if(combin_dispo.get(j).bienPlace(saisie) != good || saisie.malPlace(combin_dispo.get(j))
!= bad){
// On supprime toutes celles qui n'ont pas le mme nombre de billes bien places
// ou qui n'ont pas le mme nombre de billes mal places
combin_dispo.remove(j);
j--; // On reste sur la mme combinaison : ArrayList effectue une compression des
// indices aprs une suppression
}
}

Boucle de suppression

Robustesse
Nous avons mis en place plusieurs systmes de gestion derreur. La classe Console gre toutes les
mauvaises saisies de la part de lutilisateur : caractres spciaux, lettres, espaces, chiffres incorrects
Du ct de lordinateur, pour vrifier son bon fonctionnement, nous avons test toutes les
combinaisons possibles plusieurs fois laide de la mthode brute force , une grosse boucle qui
passe dune combinaison la suivante, de la premire la dernire. Cela nous a permis de corriger
quelques problmes et de vrifier la stabilit du programme.

Statistiques et optimisations
Nous avons ensuite profit de ltat test du programme pour pouvoir raliser des statistiques sur
lintelligence de lalgorithme quant aux rsultats obtenus et loptimisation de ceux-ci.
La premire mthode que nous avons teste nous donnait un ensemble rsultat unique. Lalgorithme
en prenant le premier lment de lensemble systmatiquement, trouve la combinaison en un
intervalle de 1 9 essais.

2007/2008

-4/8-

ESIAL

Loc Ehre Olivier Versanne

Rapport de projet

Informatique de Base

Lalgorithme ntait pas trs performant, mme sil tait toujours plus rapide quun algorithme
alatoire ou une mthode Brutus . Nous avons mis lhypothse en dcortiquant les rsultats que
la lenteur venait du fait que lordinateur testait toujours la premire combinaison. Nous avons donc
lgrement modifi notre algorithme afin de prendre une combinaison alatoire dans lensemble tri
des combinaisons restantes.
Sans Random
Moyenne
5,76
Ecart Type
1,05
Mdiane
6
En 1 essai
1
En 2 essais
8
En 3 essais
75
En 4 essais
432
En 5 essais
1525
En 6 essais
3612
En 7 essais
1372
En 8 essais
392
En 9 essais
54

Avec Random n1
Moyenne
4,63
Ecart Type
0,83
Mdiane
5
En 1 essai
1
En 2 essais
22
En 3 essais
258
En 4 essais
1732
En 5 essais
3010
En 6 essais
948
En 7 essais
35
En 8 essais
0
En 9 essais
0

Avec Random n2
Moyenne
4,65
Ecart Type
0,88
Mdiane
5
En 1 essai
2
En 2 essais
22
En 3 essais
303
En 4 essais
1644
En 5 essais
2910
En 6 essais
1080
En 7 essais
63
En 8 essais
0
En 9 essais
0

Avec Random n3
Moyenne
4,67
Ecart Type
0,85
Mdiane
5
En 1 essai
2
En 2 essais
18
En 3 essais
285
En 4 essais
1532
En 5 essais
3175
En 6 essais
960
En 7 essais
84
En 8 essais
0
En 9 essais
0

Statistiques obtenus lors de diffrents tests

Les rsultats ont t grandement amliors puisque nous navions pas eu de cas o lordinateur
trouvait en 8 et 9 essais, la moyenne tait plus faible dun essai et lcart type tait aussi plus proche
de 0.
A la vue de ces rsultats, nous avons donc gard la mthode de choix alatoire.

Jeux de tests
Voici deux exemples pour montrer le bon fonctionnement des deux parties.
Bienvenue sur Mastermind Sublime IA
'''''''''''''''''''''''''''''''''''
Choisissez une option dans le menu suivant :
1
2
3
4

Trouver la combinaison de Sublime IA (Partie 1)


Laisser Sublime IA chercher votre combinaison (Partie 2)
Sublime IA vs Sublime IA (Ajouts)
Humain vs Humain (Ajouts)

0 - Quitter
---------------------------------------------------------> 1
----------------------------------------------------------

Accueil du programme

2007/2008

-5/8-

ESIAL

Loc Ehre Olivier Versanne

Rapport de projet

Informatique de Base

Premire partie
Lordinateur a choisi alatoirement la combinaison * Rouge, Blanc, Jaune, Jaune +. Suivons la
mthode de prendre la premire combinaison valide de lensemble .
Tentative n 1
Saisissez votre
1 = Blanc, 2
4 = Vert, 5
(exemple : pour
> 1111

combinaison
= Noir, 3 =
= Bleu, 6 =
Noir / Vert

parmi la liste des couleurs suivantes :


Rouge,
Jaune
/ Rouge / Bleu, tapez 2435)

Tmoin(s) noir(s) : 1, Tmoin(s) blanc(s) : 0


---------------------------------------------------------Tentative n 2
Saisissez votre combinaison parmi la liste des couleurs suivantes :
1 = Blanc, 2 = Noir, 3 = Rouge,
4 = Vert, 5 = Bleu, 6 = Jaune
(exemple : pour Noir / Vert / Rouge / Bleu, tapez 2435)
> 1222
Tmoin(s) noir(s) : 0, Tmoin(s) blanc(s) : 1
---------------------------------------------------------Tentative n 3
Saisissez votre combinaison parmi la liste des couleurs suivantes :
1 = Blanc, 2 = Noir, 3 = Rouge,
4 = Vert, 5 = Bleu, 6 = Jaune
(exemple : pour Noir / Vert / Rouge / Bleu, tapez 2435)
> 3133
Tmoin(s) noir(s) : 2, Tmoin(s) blanc(s) : 0
---------------------------------------------------------Tentative n 4
Saisissez votre combinaison parmi la liste des couleurs suivantes :
1 = Blanc, 2 = Noir, 3 = Rouge,
4 = Vert, 5 = Bleu, 6 = Jaune
(exemple : pour Noir / Vert / Rouge / Bleu, tapez 2435)
> 3144
Tmoin(s) noir(s) : 2, Tmoin(s) blanc(s) : 0
---------------------------------------------------------Tentative n 5
Saisissez votre combinaison parmi la liste des couleurs suivantes :
1 = Blanc, 2 = Noir, 3 = Rouge,
4 = Vert, 5 = Bleu, 6 = Jaune
(exemple : pour Noir / Vert / Rouge / Bleu, tapez 2435)
> 3155
Tmoin(s) noir(s) : 2, Tmoin(s) blanc(s) : 0
---------------------------------------------------------Tentative n 6
Saisissez votre combinaison parmi la liste des couleurs suivantes :
1 = Blanc, 2 = Noir, 3 = Rouge,
4 = Vert, 5 = Bleu, 6 = Jaune
(exemple : pour Noir / Vert / Rouge / Bleu, tapez 2435)
> 3166
Tmoin(s) noir(s) : 4, Tmoin(s) blanc(s) : 0
Flicitation, vous avez gagn
----------------------------------------------------------

Rsolution humaine dune combinaison

Nous trouvons la bonne combinaison en 6 essais.

2007/2008

-6/8-

ESIAL

Loc Ehre Olivier Versanne

Rapport de projet

Informatique de Base

Deuxime partie
Nous allons choisir une combinaison pour lordinateur, prenons la mme que celui quil nous avait
donn et voyons sil fait mieux.
Saisissez votre combinaison parmi la liste des couleurs suivantes :
1 = Blanc, 2 = Noir, 3 = Rouge,
4 = Vert, 5 = Bleu, 6 = Jaune
(exemple : pour Noir / Vert / Rouge / Bleu, tapez 2435)
> 3166
---------------------------------------------------------Tentative n 1
1296 combinaison(s) possible(s)
Combinaison : [ Vert Bleu Blanc Blanc ]
Tmoin(s) noir(s) : 0, Tmoin(s) blanc(s) : 1
1020 combinaison(s) supprime(s)
Appuyez sur la touche Entre pour continuer
>
---------------------------------------------------------Tentative n 2
276 combinaison(s) possible(s)
Combinaison : [ Noir Noir Rouge Vert ]
Tmoin(s) noir(s) : 0, Tmoin(s) blanc(s) : 1
236 combinaison(s) supprime(s)
Appuyez sur la touche Entre pour continuer
>
---------------------------------------------------------Tentative n 3
40 combinaison(s) possible(s)
Combinaison : [ Rouge Blanc Jaune Rouge ]
Tmoin(s) noir(s) : 3, Tmoin(s) blanc(s) : 0
38 combinaison(s) supprime(s)
Appuyez sur la touche Entre pour continuer
>
---------------------------------------------------------Tentative n 4
2 combinaison(s) possible(s)
Combinaison : [ Jaune Blanc Jaune Rouge ]
Tmoin(s) noir(s) : 2, Tmoin(s) blanc(s) : 2
1 combinaison(s) supprime(s)
Appuyez sur la touche Entre pour continuer
>
---------------------------------------------------------Tentative n 5
1 combinaison(s) possible(s)
Combinaison : [ Rouge Blanc Jaune Jaune ]
Tmoin(s) noir(s) : 4, Tmoin(s) blanc(s) : 0
Sublime IA a trouv la combinaison : [ Rouge Blanc Jaune Jaune ]
----------------------------------------------------------

Rsolution dune combinaison par lordinateur

Nous nous apercevons que lordinateur trouve en un essai de moins et aurait pu trouver en quatre
coups sil avait eut plus de chance lors du quatrime essai (1 chance sur 2). Quoiquil en soit,
lordinateur a trouv notre combinaison avec succs.

2007/2008

-7/8-

ESIAL

Loc Ehre Olivier Versanne

Rapport de projet

Informatique de Base

Extensions
Nous avons apport quelques amliorations notre programme afin daugmenter ses
fonctionnalits.
Tout dabord, nous avons ajout une limite au nombre de tours jouer maximum. Comme dans les
vrais Master-Minds, les joueurs doivent trouver en moins dun certains nombre de essais. Nous
avons fix la limite 8. Celle-ci peut tre modifie en changeant la valeur dans la classe Constante.
Grce la gnralisation et la conception par hritage, nous avons la possibilit de faire jouer un
ordinateur contre un autre ou bien un humain contre un autre humain.

Conclusion
Le projet tait intressant grce au fait dtre totalement libre de concevoir du dbut la fin
larchitecture complte du programme. Cela nous a ainsi incits rflchir sur les diffrentes
manires de concevoir le problme afin dlaborer au mieux lorganisation des classes, packages et
mthodes utiliser.
Nous avons utilis des mthodes qui nont pas encore t vu en cours comme lhritage ou la
conception via un diagramme UML. Cela nous a facilits grandement la tche pour la suite du
dveloppement.
Le plus difficile pour nous a t de raliser la seconde partie avec la rsolution du systme
algorithmiquement. Le duo mathmaticien (Loc) et informaticien (Olivier) que nous formions nous
as permis de surmonter ce problme et aussi de partager nos connaissances dans nos diffrentes
spcialits.
Comme amlioration complmentaire nous avions pens mettre une interface graphique en utilisant
un MVC, mais les consignes au sujet des extensions ntaient pas trs claires et par consquent nous
avons limit les dveloppements supplmentaires afin de coller au mieux au cahier des charges
fournis.

2007/2008

-8/8-

ESIAL

Vous aimerez peut-être aussi