Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2021-06-15T20:18:34+02:00Les derniers messages parus sur le forum de Zeste de Savoir.algorithme mastermind, message #2352382021-06-15T20:18:34+02:00Berdes/@Berdeshttps://zestedesavoir.com/forums/sujet/15446/algorithme-mastermind/?page=1#p235238<p>Une méthode générique pour résoudre le mastermind est de conserver une liste de toutes les combinaisons possible et à chaque tours, proposer une combinaison possible et éliminer toutes les combinaisons qui ne sont plus possible d’après les indications donnés par l’autre joueur.</p>
<p>Tant que le nombre de combinaisons initiale est assez faible<sup id="fnref-1-FZLRc5gCr"><a href="#fn-1-FZLRc5gCr" class="footnote-ref">1</a></sup>, un tel algo permet de trouver la bonne combinaison, mais pas forcément de manière optimale. En regardant l’algo de Knuth, ce que j’ai décris est assez similaire, sauf que plutôt que de choisir la prochaine proposition de manière optimale, on choisi la prochaine proposition parmi les combinaisons possibles. Choisir la première combinaisons possible d’une liste trié est probablement beaucoup moins efficace que en choisir une aléatoirement.</p>
<p>Au passage, l’algorithme de Knuth peut tout à fait s’implémenter quelque soit le nombre de pions et de couleurs. Par contre, le temps d’exécution risque de devenir trop long si le nombre de combinaisons est trop grand. Sans optimisation et si je me trompe pas, au premier tour le complexité de l’algo est <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>O</mi><mo stretchy="false">(</mo><mo stretchy="false">(</mo><mn>3</mn><msup><mi>c</mi><mn>2</mn></msup><msup><mo stretchy="false">)</mo><mi>p</mi></msup><mo>×</mo><mi>K</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">O((3c^2)^p\times K)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.064108em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.02778em;">O</span><span class="mopen">(</span><span class="mopen">(</span><span class="mord">3</span><span class="mord"><span class="mord mathnormal">c</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.8141079999999999em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight">2</span></span></span></span></span></span></span></span><span class="mclose"><span class="mclose">)</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.664392em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mathnormal mtight">p</span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span><span class="mclose">)</span></span></span></span></span> avec <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathnormal">c</span></span></span></span></span> le nombre de couleurs, <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">p</span></span></span></span></span> le nombre de pions et <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>K</mi></mrow><annotation encoding="application/x-tex">K</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.68333em;vertical-align:0em;"></span><span class="mord mathnormal" style="margin-right:0.07153em;">K</span></span></span></span></span> une truc polynomial en <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi></mrow><annotation encoding="application/x-tex">c</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathnormal">c</span></span></span></span></span> et <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi></mrow><annotation encoding="application/x-tex">p</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">p</span></span></span></span></span> (la complexité de l’algo qui détermine le nombre de pions de la bonne couleur bien/mal placés). Au delà de 6 couleurs et 4 pions (le mastermind standard), le temps d’exécutions sera probablement déjà trop long au début.</p>
<p>L’avantage de l’algo de Knuth, c’est qu’il calcul un score pour chaque proposition. Pour obtenir la solution au plus vite, on prends la proposition avec le meilleur score, mais il est aussi possible de prendre une solution avec un moins bon score si tu veux rendre l’IA plus simple à battre.</p>
<p>Dans les autres idées, il est tout à fait possible de créer d’autres algos (peu efficaces) pour résoudre le mastermind. Par exemple, l’IA peut commencer par des propositions de couleur uni jusqu’à savoir quels sont les couleurs de la combinaison à déduire et ensuite essayer de trouver l’ordre correcte. On peut aussi imaginer une amélioration possible où au lieux de tester des combinaisons uni, on teste <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>n</mi></mrow><annotation encoding="application/x-tex">n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathnormal">n</span></span></span></span></span> pions dont on connait la couleur et <span class="math math-inline"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>p</mi><mo>−</mo><mi>n</mi></mrow><annotation encoding="application/x-tex">p-n</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7777700000000001em;vertical-align:-0.19444em;"></span><span class="mord mathnormal">p</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222222222222222em;"></span></span><span class="base"><span class="strut" style="height:0.43056em;vertical-align:0em;"></span><span class="mord mathnormal">n</span></span></span></span></span> de couleur uni pour savoir combien de pions de la nouvelle couleur sont dans la combinaison finale. Cela permet de glaner des informations de position plus tôt.</p>
<div class="footnotes">
<hr>
<ol>
<li id="fn-1-FZLRc5gCr">6 pions et 8 couleurs, ça donne dans les 200k combinaisons possibles, ce qui est facilement gérable tant que l’algo est pas trop mal implémenté.<a href="#fnref-1-FZLRc5gCr" class="footnote-backref" title="Retourner au texte de la note 1">↩</a></li>
</ol>
</div>algorithme mastermind, message #2352322021-06-15T17:07:49+02:00QuentinC/@QuentinChttps://zestedesavoir.com/forums/sujet/15446/algorithme-mastermind/?page=1#p235232<p>Hello,</p>
<p>Ce serait intéressant que tu mettes un lien vers l’algorithme que tu décris.</p>
<p>Par rapport au niveau de jeu réglable, de façon générale il y a plusieurs approches possibles avec ce genre de jeu de réflexion/stratégie:</p>
<ul>
<li>Limiter la profondeur de la recherche </li>
<li>Choisir des heuristiques différentes, vérifier moins de contraintes ou prendre en compte moins d’élément dans le calcul du meilleur coup</li>
<li>Choisir, avec une certaine probabilité, aléatoirement un coup qui soit moins bon que le coup optimal</li>
</ul>
<p>La troisième option est sans doute la meilleure, mais peut-être la moins facile à implémenter car c’est peut-être plus difficile à équilibrer (avec une probabilité P trop grande et/ou un aléatoire trop aléatoire, c’est vite fait de faire une IA trop faible ou très inconstante)</p>algorithme mastermind, message #2352292021-06-15T16:23:40+02:00lilithium/@lilithiumhttps://zestedesavoir.com/forums/sujet/15446/algorithme-mastermind/?page=1#p235229<p>bonjour à toutes et tous !</p>
<p>nous avons développé un mastermind dans le cadre de nos études qui est fonctionnel. Nous aimerions ajouter une fonctionnalité : jouer contre l’ordinateur. Nous sommes confrontés à deux problèmes.</p>
<p>Le premier est que notre mastermind est configurable. Il peut se jouer avec un nombre variable de pion (de 3 à 6) et de couleurs (de 3 à 8 également). Nous avons bien trouvé quelques algorithmes comme celui de Knuth que nous avons réussi à adapter pour 3 et 4 pions avec 6 couleurs. Nous avons trouvé un article qui décrit un algo que nous n’arrivons pas à écrire pour 4 pions et 7 couleurs.
Il nous manque un algo général et configurable en nombre de pions et couleurs. Nous nous posions la question de savoir si vous pourriez nous aider.</p>
<p>Le second est que les algos que nous avons codés sont imbattables. Comment peut-on créer un joueur artificiel avec un niveau ?</p>
<p>En espérant avoir été claire, je vous remercie par avance de l’aide que vous pourrez nous apporter.</p>