diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba74660 --- /dev/null +++ b/.gitignore @@ -0,0 +1,57 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ diff --git a/AlgoGenetiques.pdf b/AlgoGenetiques.pdf new file mode 100644 index 0000000..a28995e Binary files /dev/null and b/AlgoGenetiques.pdf differ diff --git a/Codifieur.py b/Codifieur.py new file mode 100755 index 0000000..789902c --- /dev/null +++ b/Codifieur.py @@ -0,0 +1,141 @@ +#!/usr/bin/env python3 +## Codifieur.py for mastermind in /home/laloge_h/Documents/ISN/Mastermind +## +## Made by Hugo Laloge +## Login +## +## Started on Fri Feb 20 18:01:57 2015 Hugo Laloge +## Last update Fri Feb 20 18:02:07 2015 Hugo Laloge +## + +#-----------Import des modules---------# + +from tkinter import * +from random import randint + + +#-------Definition des fonctions-------# + +def genererCode(): + global couleurs, code, grille + couleurs = ['ivory', 'black', 'blue', 'red', 'green', 'yellow'] # 6 Couleurs possibles, tableau de 0 à 5 + grille = [] + reponse = [] + tour = 0 + for i in range(10): + grille.append(['', '', '', '']) + reponse.append(['', '', '', '']) + code = [] + + for i in range(4): + code.append(couleurs[randint(0,5)]) + +def afficherCode(): + global code, canevas, codeAffiche + for i in range(4): + couleur=code[i] + canevas.create_oval(i*20+20, 220, i*20+40, 240, fill=couleur) + +def changerCouleur(event): + global couleurs, canevas, grille, tour + x = int((event.x-20)/20) + if x >= 0: + couleurSuivante = {'ivory':'black', 'black':'blue', 'blue':'red', 'red':'green', 'green':'yellow', 'yellow':'ivory', '':'ivory'} + couleur = couleurSuivante[grille[tour][x]] + grille[tour][x] = couleur + canevas.create_oval(x*20+20, tour*20, x*20+40, tour*20+20, fill=couleur) + +def valider(): + global tour, grille, code, reponse + nbPion = True + couleurCorrect = 0 + couleurPlace = 0 + recoCode = [] + for i in range(4): #On recopie le code + recoCode.append(code[i]) + + for i in range(4): + if grille[tour][i] == '': + nbPion = False + + for essai in grille[tour]: #Boucle pour vérifier les couleurs + for i in range(len(recoCode)): + if essai == recoCode[i]: + couleurCorrect += 1 + recoCode.pop(i) + break + + for i in range(4): #Boucle pour vérifier les couleurs bien placées + if grille[tour][i] == code[i]: + couleurPlace += 1 + + afficherRep(couleurCorrect, couleurPlace) + print('couleurCorrect =', couleurCorrect, 'et couleurPlacé =', couleurPlace) + + if tour < 9 and nbPion: + tour += 1 + elif tour == 9: + terminer() + +def afficherRep(couleurCorrect, couleurPlace): + global canevas, tour + for i in range(couleurCorrect): + if i == 0: + canevas.create_oval(0, tour*20, 10, tour*20+10, fill ='white') + if i == 1: + canevas.create_oval(10, tour*20, 20, tour*20+10, fill ='white') + if i == 2: + canevas.create_oval(0, tour*20+10, 10, tour*20+20, fill ='white') + if i == 3: + canevas.create_oval(10, tour*20+10, 20, tour*20+20, fill ='white') + + for i in range(couleurPlace): + if i == 0: + canevas.create_oval(0, tour*20, 10, tour*20+10, fill ='black') + if i == 1: + canevas.create_oval(10, tour*20, 20, tour*20+10, fill ='black') + if i == 2: + canevas.create_oval(0, tour*20+10, 10, tour*20+20, fill ='black') + if i == 3: + canevas.create_oval(10, tour*20+10, 20, tour*20+20, fill ='black') + terminer() + +def terminer(): + global canevas, valider + afficherCode() + canevas.unbind('') + valider.destroy() + + +#---------Création de la fenetre-------# + +fenetre = Tk() +fenetre.wm_title('Master Mind - Codifieur') + +canevas = Canvas(fenetre, width=100, height=240, bg='dark grey') +canevas.bind('', changerCouleur) +for i in range(10): + canevas.create_line(0, (i+1)*20, 100, (i+1)*20, fill='black') +canevas.create_rectangle(0, 200, 100, 215, fill='black') +canevas.create_line(20, 0, 20, 200, fill='black') +canevas.pack(side=LEFT) + +valider = Button(fenetre, text='Valider ligne', command=valider) +valider.pack(side=TOP) + +afficher = Button(fenetre, text='Afficher code', command=afficherCode) +afficher.pack(side=TOP) + +generer = Button(fenetre, text='Recommencer', command=genererCode) +generer.pack(side=TOP) + +quitter = Button(fenetre, text='Quitter', command=fenetre.destroy) +quitter.pack(side=BOTTOM) + +genererCode() +for i in range(4): + canevas.create_oval(i*20+20, 220, i*20+40, 240, fill='grey') + +tour = 0 + +fenetre.mainloop() diff --git a/Decodeur.py b/Decodeur.py new file mode 100755 index 0000000..f5818eb --- /dev/null +++ b/Decodeur.py @@ -0,0 +1,123 @@ +#!/usr/bin/env python3 +## Decodeur.py for mastermind in /home/laloge_h/Documents/ISN/Mastermind +## +## Made by Hugo Laloge +## Login +## +## Started on Fri Feb 20 18:03:29 2015 Hugo Laloge +## Last update Fri Feb 20 18:56:09 2015 Hugo Laloge +## + +#-----------Import des modules---------# + +from tkinter import * +from random import randint +from IA import * + + +#-------Definition des fonctions-------# + +def changerCouleur(event): + global couleurs, canevas, grille, tour + x = int((event.x - 20) / 20) + if x >= 0: + couleur = couleurs[(reponse[x] + 1) % 6] + reponse[x] = (reponse[x] + 1) % 6 + canevas.create_oval(x*20+20, 220, x*20+40, 240, fill=couleur) + +def afficherEval(hypot, reponse): + global tour + couleurCorrect = 0 + couleurPlace = 0 + recoCode = [] + for i in range(4): #On recopie le code + recoCode.append(reponse[i]) + + for i in range(4): + if grille[tour][i] == '': + nbPion = False + + for essai in hypot: #Boucle pour vérifier les couleurs + for i in range(len(recoCode)): + if essai == recoCode[i]: + couleurCorrect += 1 + recoCode.pop(i) + break + + for i in range(4): #Boucle pour vérifier les couleurs bien placées + if reponse[i] == hypot[i]: + couleurPlace += 1 + afficherRep(couleurCorrect, couleurPlace) + +def valider(): + global grille, reponse, score, tour, couleurs + while (tour < 10) : + hypot = hypothese(tour, grille, score) + print(hypot, reponse) + grille.append(hypot) + for x in range(4): + canevas.create_oval(x*20+20, tour*20, x*20+40, tour*20 + 20, fill=couleurs[hypot[x]]) + score.append(evaluer(hypot, reponse)) + afficherEval(hypot, reponse) + if (hypot == reponse): + break + tour += 1 + print('Fini') + +def afficherRep(couleurCorrect, couleurPlace): + global canevas, tour + for i in range(couleurCorrect): + if i == 0: + canevas.create_oval(0, tour*20, 10, tour*20+10, fill ='white') + if i == 1: + canevas.create_oval(10, tour*20, 20, tour*20+10, fill ='white') + if i == 2: + canevas.create_oval(0, tour*20+10, 10, tour*20+20, fill ='white') + if i == 3: + canevas.create_oval(10, tour*20+10, 20, tour*20+20, fill ='white') + + for i in range(couleurPlace): + if i == 0: + canevas.create_oval(0, tour*20, 10, tour*20+10, fill ='black') + if i == 1: + canevas.create_oval(10, tour*20, 20, tour*20+10, fill ='black') + if i == 2: + canevas.create_oval(0, tour*20+10, 10, tour*20+20, fill ='black') + if i == 3: + canevas.create_oval(10, tour*20+10, 20, tour*20+20, fill ='black') + terminer() + +def terminer(): + global canevas, valider + canevas.unbind('') + valider.destroy() + +score = [] +grille = [] +reponse = [0,0,0,0] +tour = 0 +couleurs = ['ivory', 'black', 'blue', 'red', 'green', 'yellow'] + +#---------Création de la fenetre-------# + +fenetre = Tk() +fenetre.wm_title('Master Mind - Codifieur') + +canevas = Canvas(fenetre, width=100, height=240, bg='dark grey') +canevas.bind('', changerCouleur) +for i in range(10): + canevas.create_line(0, (i+1)*20, 100, (i+1)*20, fill='black') +canevas.create_rectangle(0, 200, 100, 215, fill='black') +canevas.create_line(20, 0, 20, 200, fill='black') +canevas.pack(side=LEFT) + +valider = Button(fenetre, text='Valider reponse', command=valider) +valider.pack(side=TOP) + +quitter = Button(fenetre, text='Quitter', command=fenetre.destroy) +quitter.pack(side=BOTTOM) + +for i in range(4): + canevas.create_oval(i*20+20, 220, i*20+40, 240, fill='ivory') + +fenetre.mainloop() diff --git a/GeneCouleur.py b/GeneCouleur.py new file mode 100755 index 0000000..c826adb --- /dev/null +++ b/GeneCouleur.py @@ -0,0 +1,24 @@ +def geneCouleur(gene, nbCouleur=6): + """Retourne un tableau de couleur à partir d'un numero de gene""" + couleur = [] + for i in range(4): #Il génère un tableau de couleur + couleur.append(gene % nbCouleur) + gene = gene // nbCouleur + return couleur + +def couleurGene(couleur, nbCouleur=6): + gene = 0 + for i in range(4): + gene += couleur[i]*nbCouleur**(i) + return gene + +def inverseFitness(fitness): + score = [0, 0] + score[0] = fitness / 6 + score[1] = fitness % 6 + return score + +print(couleurGene([0,1,2,3])) +print(couleurGene([2,1,0,0])) +print(couleurGene([2,0,2,1])) +print(couleurGene([0,4,3,1])) diff --git a/IA.py b/IA.py new file mode 100755 index 0000000..673a9a3 --- /dev/null +++ b/IA.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 +## IA.py for mastermind in /home/laloge_h/Documents/ISN/Mastermind +## +## Made by Hugo Laloge +## Login +## +## Started on Fri Feb 20 18:30:08 2015 Hugo Laloge +## Last update Fri Feb 20 18:37:57 2015 Hugo Laloge +## + +#-------Definition des fonctions-------# + +def geneCouleur(gene, nbCouleur=6): + """Retourne un tableau de couleur à partir d'un numero de gene""" + couleur = [] + for i in range(4): #Il génère un tableau de couleur + couleur.append(gene % nbCouleur) + gene = gene // nbCouleur + return couleur + +def fitness(score, nbCouleur=6): + """Calcule la 'fitness' d'un score""" + return (nbCouleur * score[0] + score[1]) + +def evaluer(hypo, repo): + """Retourne la M et B de l'hypothèse""" + hyp = [] + rep = [] + for i in range(4): #On recopie hyp et rep + hyp.append(hypo[i]) + rep.append(repo[i]) + valeur = [0, 0] #Pion bien placé / couleur correct + for i in range(4): #Verification des pion bien placés + if hyp[i] == rep[i]: + rep[i] = -1 + hyp[i] = -1 + valeur[0] += 1 + for essai in range(4): + for reponse in range(4): + if (hyp[essai] == rep[reponse]) and (hyp[essai] != -1): + valeur[1] += 1 + return valeur + +def hypothese(tour, grille, scoreG, nbCouleur = 6): + """Gener une hypothese de 'puissance' 0""" + if tour == 0: + return [0,1,2,3] + for i in range(nbCouleur ** 4): #Nombre de possibilité + hypo = geneCouleur(i, nbCouleur) + score = 0 + for tr in range(tour - 1): + score += abs((fitness(evaluer(hypo, grille[tr])) - fitness(scoreG[tr]))) + if score == 0: + return hypo + return hypo + +if __name__ == '__main__' : + reponse = [2,3,1,0] + scoreG = [] + grille = [] + tour = 1 + while 1: + hypot = hypothese(tour, grille, scoreG, 6) + print(hypot) + grille.append(hypot) + x = input('Blanc :') + y = input('Noir') + scoreG.append([x, y]) + if hypot == reponse: + break + tour += 1 diff --git a/MasterMind.doc b/MasterMind.doc new file mode 100644 index 0000000..60cec67 --- /dev/null +++ b/MasterMind.doc @@ -0,0 +1,113 @@ +{\rtf1\ansi\ansicpg1252\deff0\uc1 +{\fonttbl +{\f0\fnil\fcharset0\fprq0\fttruetype Cambria;} +{\f1\fnil\fcharset0\fprq0\fttruetype Calibri;} +{\f2\fnil\fcharset0\fprq0\fttruetype Times New Roman;} +{\f3\fnil\fcharset0\fprq0\fttruetype Courier New;} +{\f4\fnil\fcharset0\fprq0\fttruetype Liberation Sans;} +{\f5\fnil\fcharset0\fprq0\fttruetype Tahoma;}} +{\colortbl +\red0\green0\blue0; +\red255\green255\blue255; +\red255\green255\blue255; +\red255\green255\blue0;} +{\stylesheet +{\s5\tx1584\sbasedon31\snext30 Chapter Heading;} +{\s49\fi-431\li720\sbasedon34 Upper Roman List;} +{\s30\sl264\slmult1\sa200\f1\fs24\lang1036\snext30 Normal;} +{\s46\keepn\sl264\slmult1\sb240\sa60\f0\fs32\b\ul\lang1036\sbasedon22\snext46 Titre Romain;} +{\s28\fi-431\li720\sbasedon34 Lower Case List;} +{\s2\li1440\ri1440\sa120\sbasedon30 Block Text;} +{\s47\fi-431\li720 Triangle List;} +{\s22\keepn\sl264\slmult1\sb240\sa60\f0\fs32\b\lang1036\sbasedon30\snext30 Heading 1;} +{\s23\keepn\sl264\slmult1\sb240\sa60\f0\fs28\i\b\lang1036\sbasedon30\snext30 Heading 2;} +{\s4\fi-431\li720 Bullet List;} +{\s25\sb440\sa60\f4\fs24\b\sbasedon30\snext30 Heading 4;} +{\s26\fi-431\li720 Heart List;} +{\s1\fi-431\li720 Arrowhead List;} +{\s39\fi-431\li720 Square List;} +{\s10\qc\sb240\sa120\f4\fs32\b\sbasedon30\snext30 Contents Header;} +{\s36\f3\sbasedon30 Plain Text;} +{\s19\fs20\sbasedon30 Footnote Text;} +{\s37\f1\fs22\lang1036\snext37 Sans interligne;} +{\s13\keep\keepn\sl264\slmult1\sb480\cf3\f0\fs28\b\lang1036\sbasedon22\snext30\uc1 En-t\u234 ?te de table des mati\u232 ?res;} +{\s34\fi-431\li720 Numbered List;} +{\s12\fi-431\li720 Diamond List;} +{\s21\fi-431\li720 Hand List;} +{\s45\keepn\sl264\slmult1\fi-10\sb240\sa60\f0\fs28\i\b\lang1036\sbasedon23\snext45 Titre 2 Romain;} +{\s48\fi-431\li720\sbasedon34 Upper Case List;} +{\s3\fi-431\li720 Box List;} +{\s24\sb440\sa60\f4\fs24\b\sbasedon30\snext30 Heading 3;} +{\s27\fi-431\li720 Implies List;} +{\s44\fi-431\li720 Tick List;} +{\s41\sl264\slmult1\sa200\f1\fs24\lang1036\sbasedon30\snext30 TM 1;} +{\s35\sl264\slmult1\li720\sa200\f1\fs24\lang1036\sbasedon30\snext35 Paragraphe de liste;} +{\s40\fi-431\li720 Star List;} +{\s38\tx1584\sbasedon31\snext30 Section Heading;} +{\s43\f5\fs16\lang1036\sbasedon30\snext43 Texte de bulles;} +{\s42\f0\fs28\i\b\lang1036\snext42 Tableau Normal;} +{\s20\f0\fs28\i\b\lang1036\sbasedon42\snext20 Grille du tableau;} +{\s14\fi-288\li288\sbasedon30 Endnote;} +{\s11\fi-431\li720 Dashed List;} +{\s29\fi-431\li720\sbasedon30 Lower Roman List;} +{\*\cs18\fs20\super Footnote Reference;} +{\s16\sbasedon30 Endnote Text;} +{\*\cs15\fs20\super Endnote Reference;} +{\s31\tx431\sbasedon22\snext30 Numbered Heading 1;} +{\s32\tx431\sbasedon23\snext30 Numbered Heading 2;} +{\s33\tx431\sbasedon24\snext30 Numbered Heading 3;} +{\s17\fi-288\li288\fs20\sbasedon30 Footnote;} +{\s6\fi-431\li720\sbasedon30\snext30 Contents 1;} +{\s7\fi-431\li1440\sbasedon30\snext30 Contents 2;} +{\s8\fi-431\li2160\sbasedon30\snext30 Contents 3;} +{\s9\fi-431\li2880\sbasedon30\snext30 Contents 4;}} +{\*\listtable +{\list\listtemplateid1008\listsimple{\listlevel\levelnfc0\levelstartat1\levelspace0\levelfollow0\fi-360\li720{\leveltext\'02\'00);}{\levelnumbers\'01;}}\listid1001}} +{\*\listoverridetable +{\listoverride\listoverridecount0\listid1001\levelnfc0\levelstartat1\levelspace0\levelfollow0\fi-360\li720{\leveltext\'02\'00);}{\levelnumbers\'01;}\ls1}} + +\kerning0\cf0\ftnbj\fet2\ftnstart1\ftnnar\aftnnar\ftnstart1\aftnstart1\aenddoc\revprop3{\*\rdf}{\info\uc1{\author Hugo}{\company HP}}\deftab720\viewkind1\paperw11905\paperh16837\margl1440\margr1440\widowctrl +\sectd\sbknone\colsx360\headery708\footery709\margtsxn1416\margbsxn1416\marglsxn1416\margrsxn1416\pgncont\ltrsect +\pard\plain\ltrpar\ql\sa200\s30\sl264\slmult1\itap0{\*\abitableprops table-line-thickness:0.8pt; table-col-spacing:0.03in; table-column-leftpos:-0.0799in; table-column-props:2.7500in/2.7500in/2.7500in/; table-sdh:0x42d76a0}\par{\*\abicellprops left-attach:0; right-attach:1; top-attach:0; bot-attach:1; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff}{ +\trowd \itap1\trgaph10\trql\trrh0\trleft-115\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx3866 +\pard\plain\ltrpar\ql\sa200\s37\intbl\itap1{\s37\f0\fs72\lang1036{\*\listtag0}\abinodiroverride\ltrch MasterMind}\cell{\*\abiendcell}{\*\abicellprops left-attach:0; right-attach:1; top-attach:1; bot-attach:2; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff}\row +\trowd \itap1\trgaph10\trql\trrh0\trleft-115\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx3866 +\pard\plain\ltrpar\ql\sa200\s37\intbl\itap1{\s37\f1\fs40\lang1036{\*\listtag0}Avec algorithme g\'e9n\'e9tique}\cell{\*\abiendcell}{\*\abicellprops left-attach:0; right-attach:1; top-attach:2; bot-attach:3; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff}\row +\trowd \itap1\trgaph10\trql\trrh0\trleft-115\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx3866 +\pard\plain\ltrpar\ql\sa200\s37\intbl\itap1{\s37\f1\fs28\lang1036{\*\listtag0}Par Hugo Laloge}\cell{\*\abiendcell}\row}{\*\abiendtable}\par +\pard\plain\ltrpar\ql\sa200\s30\sl264\slmult1\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\sl264\slmult1\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch \page }{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb480\sa60\s13\sl264\slmult1\itap0\keep\keepn{\s13\cf3\f0\fs28\b\lang1036{\*\listtag0}\abinodiroverride\ltrch Sommaire}{\s13\cf3\f0\fs28\b\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s41\sl264\slmult1\itap0{\s41\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\sl264\slmult1\itap0{\field\fldedit{\*\fldinst {\ TOC }}} +\pard\plain\ltrpar\ql\sb240\sa60\s46\sl264\slmult1\itap0\keepn{\s46\f0\fs32\b\ul\lang1036{\*\listtag0}\abinodiroverride\ltrch \page }{\*\bkmkstart _Toc373258062}{\s46\f0\fs32\b\ul\lang1036{\*\listtag0}Algorithme g\'e9n\'e9tique}{\*\bkmkend _Toc373258062}{\s46\f0\fs32\b\ul\lang1036{\*\listtag0}\par} +{\listtext\pard\fi-360\li720\sb240\sa60 1) }\pard\plain{\ltrpar\ql\fi-360\li720\sb240\sa60\s45{\*\abilist\abilistid1001\abilistparentid0\abilistlevel1\abistartat1{\abifieldfont Times New Roman}{\abilistdecimal .}{\abilistdelim %L)}{\abiliststyle Numbered List}}{\*\pn\pnql\pnstart1\pnlvlbody\pndec{\pntxtb }{\pntxta )}}\fn-360\li720\ls1\ilvl0\sl264\slmult1\itap0\keepn{\s45\f0\fs28\i\b\lang1036{\*\listtag0}\abinodiroverride\ltrch Principe}{\s45\f0\fs28\i\b\lang1036{\*\listtag0}\par} +}\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch \tab Afin de r\'e9soudre une combinaison de 4 pions de 6 couleurs, on dispose de deux indices\~:}{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch - Le nombre de couleur co\'efncident avec la solution}{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch - Le nombre de pion dont la couleur et la place co\'efncident avec la solution}{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sb240\sa200\s30\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch \tab On utilise pour cela un algorithme g\'e9n\'e9tique, chaque possibilit\'e9 repr\'e9sentant un g\'e8ne\~et chaque couleur repr\'e9sent\'e9 par un chiffre de 0 \'e0 5\~:}{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch Exemple de combinaison\~: 0, 4, 3, 1 avec le nombre de couleur nbColor = 6}{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f3\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch Gene = 0 \'d7 nbColor}{\s30\f3\fs24\super\lang1036{\*\listtag0} }{\s30\f3\fs24\lang1036{\*\listtag0}+ 4 \'d7 nbColor}{\s30\f3\fs24\super\lang1036{\*\listtag0}1 }{\s30\f3\fs24\lang1036{\*\listtag0}+ 3 \'d7 nbColor}{\s30\f3\fs24\super\lang1036{\*\listtag0} 2 }{\s30\f3\fs24\lang1036{\*\listtag0}+ 1 \'d7 nbColor}{\s30\f3\fs24\super\lang1036{\*\listtag0} 3 }{\s30\f3\fs24\lang1036{\*\listtag0}= 348}{\s30\f3\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f1\fs24\super\lang1036{\*\listtag0}\abinodiroverride\ltrch \tab }{\s30\f1\fs24\lang1036{\*\listtag0}On dispose ensuite, apr\'e8s soumission de l\uc1\u8217\'92hypoth\'e8se, d\uc1\u8217\'92un score repr\'e9sent\'e9 par deux entiers S}{\s30\f1\fs24\sub\lang1036{\*\listtag0}1}{\s30\f1\fs24\lang1036{\*\listtag0} et S}{\s30\f1\fs24\sub\lang1036{\*\listtag0}2 }{\s30\f1\fs24\lang1036{\*\listtag0}de 0 \'e0 4, le premier signifiant que la bonne couleur est \'e0 la bonne place, l\uc1\u8217\'92autre que la couleur est bonne mais pas \'e0 la bonne place.}{\s30\f1\fs24\super\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch \tab De ce score, on calcule la \'ab\~Fitness\~\'bb de l\uc1\u8217\'92hypoth\'e8se, avec la formule suivante\~:}{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f3\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch Fitness = S}{\s30\f3\fs24\sub\lang1036{\*\listtag0}1 }{\s30\f3\fs24\lang1036{\*\listtag0}\'d7 nbColor + S}{\s30\f3\fs24\sub\lang1036{\*\listtag0}2}{\s30\f3\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch \tab Chaque g\'e8ne poss\'e8de donc son score et sa fitness}{\s30\f1\fs24\lang1036{\*\listtag0}\par} +{\listtext\pard\fi-360\li720\sb240\sa60 2) }\pard\plain{\ltrpar\ql\fi-360\li720\sb240\sa60\s45{\*\abilist\abilistid1001\abilistparentid0\abilistlevel1\abistartat1{\abifieldfont Times New Roman}{\abilistdecimal .}{\abilistdelim %L)}{\abiliststyle Numbered List}}{\*\pn\pnql\pnstart1\pnlvlbody\pndec{\pntxtb }{\pntxta )}}\fn-360\li720\ls1\ilvl0\sl264\slmult1\itap0\keepn{\s45\f0\fs28\i\b\lang1036{\*\listtag0}\abinodiroverride\ltrch S\'e9lection d\uc1\u8217\'92une hypoth\'e8se}{\s45\f0\fs28\i\b\lang1036{\*\listtag0}\par} +}\pard\plain\ltrpar\ql\sa200\s30\sl264\slmult1\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\abinodiroverride\ltrch \tab Pour s\'e9lectionner une hypoth\'e8se, on parcoure toutes les combinaisons possibles et on d\'e9termine celles qui peuvent \'eatre la solution en fonction des tentatives pr\'e9c\'e9dentes. Exemple pour une solution [0,3,4,1]\~:}{\*\abitableprops table-line-thickness:0.8pt; table-col-spacing:0.03in; table-column-leftpos:-0.0750in; table-column-props:1.4847in/1.7215in/1.6062in/1.6375in/1.4847in/1.7215in/1.6062in/1.6375in/1.4847in/1.7215in/1.6062in/1.6375in/; table-sdh:0x42e9e80}\par{\*\abicellprops left-attach:0; right-attach:1; top-attach:0; bot-attach:1; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff}{ +\trowd \itap1\trgaph10\trql\trrh0\trleft-108\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx2051\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx4530\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx6843\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx9201 +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}G\'e8ne}\cell{\*\abiendcell}{\*\abicellprops left-attach:1; right-attach:2; top-attach:0; bot-attach:1; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}Hypoth\'e8se}\cell{\*\abiendcell}{\*\abicellprops left-attach:2; right-attach:3; top-attach:0; bot-attach:1; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}Score}\cell{\*\abiendcell}{\*\abicellprops left-attach:3; right-attach:4; top-attach:0; bot-attach:1; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}Fitness}\cell{\*\abiendcell}{\*\abicellprops left-attach:0; right-attach:1; top-attach:1; bot-attach:2; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff}\row +\trowd \itap1\trgaph10\trql\trrh0\trleft-108\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx2051\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx4530\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx6843\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx9201 +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}726}\cell{\*\abiendcell}{\*\abicellprops left-attach:1; right-attach:2; top-attach:1; bot-attach:2; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}[0,1,2,3]}\cell{\*\abiendcell}{\*\abicellprops left-attach:2; right-attach:3; top-attach:1; bot-attach:2; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}[1,2]}\cell{\*\abiendcell}{\*\abicellprops left-attach:3; right-attach:4; top-attach:1; bot-attach:2; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}8}\cell{\*\abiendcell}{\*\abicellprops left-attach:0; right-attach:1; top-attach:2; bot-attach:3; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff}\row +\trowd \itap1\trgaph10\trql\trrh0\trleft-108\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx2051\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx4530\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx6843\clvertalt\cltxlrtb\clbrdrt\brdrs\brdrw0\brdrcf0 \clcbpat1\clbrdrl\brdrs\brdrw0\brdrcf0 \clbrdrb\brdrs\brdrw0\brdrcf0 \clbrdrr\brdrs\brdrw0\brdrcf0 \cellx9201 +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}8}\cell{\*\abiendcell}{\*\abicellprops left-attach:1; right-attach:2; top-attach:2; bot-attach:3; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}[2,1,0,0]}\cell{\*\abiendcell}{\*\abicellprops left-attach:2; right-attach:3; top-attach:2; bot-attach:3; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1{\s30\f1\fs24\lang1036{\*\listtag0}[0,2]}\cell{\*\abiendcell}{\*\abicellprops left-attach:3; right-attach:4; top-attach:2; bot-attach:3; color:000000; bot-color:000000; bot-style:1; bot-thickness:0.000000px; left-color:000000; left-style:1; left-thickness:0.000000px; right-color:000000; right-style:1; right-thickness:0.000000px; top-color:000000; top-style:1; top-thickness:0.000000pt; background-color:ffffff} +\pard\plain\ltrpar\qc\sa200\s30\sl264\slmult1\intbl\itap1\cell{\*\abiendcell}\row}{\*\abiendtable} +\pard\plain\ltrpar\ql\sa200\s30\sl264\slmult1\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\par} +\pard\plain\ltrpar\ql\sa200\s30\sl264\slmult1\itap0{\s30\f1\fs24\lang1036{\*\listtag0}\par}} \ No newline at end of file