« Nombre de positions légales au jeu d'échecs » : différence entre les versions

De Lillois Fractale Wiki
Aller à la navigation Aller à la recherche
Contenu ajouté Contenu supprimé
Aucun résumé des modifications
Aucun résumé des modifications
Ligne 17 : Ligne 17 :
== Valeur de N<sub>pb</sub> ==
== Valeur de N<sub>pb</sub> ==


Si un programme doit établir une table reprenant des positions d'échecs en utilisant un clé aussi compacte que possible.
Imaginons qu'un programme doit établir une table reprenant des positions d'échecs en utilisant un clé aussi compacte que possible.


Ce qui suit est (en langage simili informatique) l'algorithme de construction de la clé.
Ce qui suit est (en langage simili informatique) l'algorithme de construction de la clé.


Cet algorithme est basé sur l'utilisation de code à longueur variable non ambigu, type [http://fr.wikipedia.org/wiki/Codage_de_Huffman code de Huffman]. Dans un tel code, différents objets sont représentés&nbsp; par des séquences de bits de longueur variable, mais l'ensemble des codes doit posséder une propriété simple mais vitale (nécessaire au décodage): aucun des codes ne peut constituer une séquence initiale d'un autre code.<br>
Cet algorithme est basé sur l'utilisation de code à longueur variable non ambigu, type [http://fr.wikipedia.org/wiki/Codage_de_Huffman code de Huffman]. Dans un tel code, différents objets sont représentés&nbsp; par des séquences de bits de longueur variable, mais l'ensemble des codes doit posséder une propriété simple mais vitale (nécessaire au décodage): aucun des codes ne peut constituer une séquence initiale d'un autre code.<br>


Pour l'algorithme qui nous intéresse, les codes suivants seront utilisés pour chacune des 64 cases:<br>
Pour l'algorithme qui nous intéresse, les codes suivants seront utilisés pour chacune des 64 cases:<br>
<pre>0 : case vide
<pre>0&nbsp;: case vide


1... : case occupée
1...&nbsp;: case occupée


10... : case occupée par un composant blanc
10...&nbsp;: case occupée par un composant blanc


11... : case occupée par un composant noir
11...&nbsp;: case occupée par un composant noir


101 : pion blanc
101&nbsp;: pion blanc


111 : pion noir
111&nbsp;: pion noir


100... : pièce blanche
100...&nbsp;: pièce blanche


110... : pièce noire
110...&nbsp;: pièce noire


10011 : tour blanche
10011&nbsp;: tour blanche


10010 : fou blanc
10010&nbsp;: fou blanc


10001 : cavalier blanc
10001&nbsp;: cavalier blanc


100001: dame blanche
100001: dame blanche


100000 : roi blanc
100000&nbsp;: roi blanc


11011 : tour noire
11011&nbsp;: tour noire


11010 : fou noir
11010&nbsp;: fou noir


11001 : cavalier noir
11001&nbsp;: cavalier noir


110001: dame noire
110001: dame noire


110000 : roi noir
110000&nbsp;: roi noir
</pre>
</pre>
On peut vérifier qu'un tel code vérifie la condition énoncée plus haut.<br>
On peut vérifier qu'un tel code vérifie la condition énoncée plus haut.<br>


L'algorithme est une séquence d'opérations faisant appel à une fonction addBit(), qui ajoute un ou plusieurs bits à un paque de bit utilisé comme clé d'identification de la position.<br>
L'algorithme est une séquence d'opérations faisant appel à une fonction addBit(), qui ajoute un ou plusieurs bits à un paque de bit utilisé comme clé d'identification de la position.<br>
<pre>Si le trait est au noirs: addBit(1) sinon addBit(0)
<pre>Si le trait est au noirs: addBit(1) sinon addBit(0)


Ligne 72 : Ligne 72 :


Si une prise en passant est impossible addBit(0), sinon addBit(i1,i2,i3) # note i1,i2,i3 identifient binairemnent la colonne du pion prenable en passant
Si une prise en passant est impossible addBit(0), sinon addBit(i1,i2,i3) # note i1,i2,i3 identifient binairemnent la colonne du pion prenable en passant
</pre>
</pre>
Combien de bits seront ainsi remplis?
Combien de bits seront ainsi remplis?


Pour une position minimale, où ne figurent sur l'échiquier que les deux rois, il faut 78 bits (3 bits pour le trait et les roques, 62 bits pour les case vides, 2x6 bits pour le deux rois, 1 bit pour l'absence de prise en passant.
Pour une position minimale, où ne figurent sur l'échiquier que les deux rois, il faut 78 bits (3 bits pour le trait et les roques, 62 bits pour les case vides, 2x6 bits pour le deux rois, 1 bit pour l'absence de prise en passant.


Pour une position maximale, où toutes les pièces seraient présentes, et ou une prise en passant serait possible, on peut vérifier qu'il faudrait 129 bits.
Pour une position maximale, où toutes les pièces seraient présentes, et ou une prise en passant serait possible, on peut vérifier qu'il faudrait 129 bits.


On a donc
On a donc


<math>78 \leq N_{pb} \leq 129</math>
<math>78 \leq N_{pb} \leq 129</math>


et donc
et donc


<math>2^{78} \leq N_{p} \leq 2^{129}</math>
<math>2^{78} \leq N_{p} \leq 2^{129}</math>

Version du 20 janvier 2014 à 12:09

Débat

Le nombre de positions au jeu d'échecs (Np) a été estimé de diverses manières, peu rigoureuses.

Dans l'article qui suit se trouve calculé le nombre de Gonze Ng (ce nombre, calculé plus loin est environ 6.8 x 1038).

Ce nombre Ng est un majorant du nombre Np.

En fait Np est dérivé de Npb, le nombre de bits (binary digits) nécessaire à la représentation de toute position légale.

Il s'ensuit que

Valeur de Npb

Imaginons qu'un programme doit établir une table reprenant des positions d'échecs en utilisant un clé aussi compacte que possible.

Ce qui suit est (en langage simili informatique) l'algorithme de construction de la clé.

Cet algorithme est basé sur l'utilisation de code à longueur variable non ambigu, type code de Huffman. Dans un tel code, différents objets sont représentés  par des séquences de bits de longueur variable, mais l'ensemble des codes doit posséder une propriété simple mais vitale (nécessaire au décodage): aucun des codes ne peut constituer une séquence initiale d'un autre code.

Pour l'algorithme qui nous intéresse, les codes suivants seront utilisés pour chacune des 64 cases:

0 : case vide

1... : case occupée

10... : case occupée par un composant blanc

11... : case occupée par un composant noir

101 : pion blanc

111 : pion noir

100... : pièce blanche

110... : pièce noire

10011 : tour blanche

10010 : fou blanc

10001 : cavalier blanc

100001: dame blanche

100000 : roi blanc

11011 : tour noire

11010 : fou noir

11001 : cavalier noir

110001: dame noire

110000 : roi noir

On peut vérifier qu'un tel code vérifie la condition énoncée plus haut.

L'algorithme est une séquence d'opérations faisant appel à une fonction addBit(), qui ajoute un ou plusieurs bits à un paque de bit utilisé comme clé d'identification de la position.

Si le trait est au noirs: addBit(1) sinon addBit(0)

Si les blancs peuvent encore roquer addBit(1) sinon addBit(0)

Si les blancs peuvent encore roquer addBit(1) sinon addBit(0)

Pour chaque rangée { pour chaque colonne { addBit(code(case[rangée,colonne])) }

Si une prise en passant est impossible addBit(0), sinon addBit(i1,i2,i3)                 # note i1,i2,i3 identifient binairemnent la colonne du pion prenable en passant

Combien de bits seront ainsi remplis?

Pour une position minimale, où ne figurent sur l'échiquier que les deux rois, il faut 78 bits (3 bits pour le trait et les roques, 62 bits pour les case vides, 2x6 bits pour le deux rois, 1 bit pour l'absence de prise en passant.

Pour une position maximale, où toutes les pièces seraient présentes, et ou une prise en passant serait possible, on peut vérifier qu'il faudrait 129 bits.

On a donc

et donc

Remarques

L'analyse ci-dessus inclut dans la description d'une position:

  • le trait
  • les capacités de roque
  • les options de prise en passant

Mais cette analyse ne tient pas compte

  • de la règle des 50 coups dans prise ni mouvement de pions (cette information n'est pas incluse dans la clé - elle représenterait au pire 6 bits additionnels)
  • de la règle des répétitions triples de position (cette information représenterait 2 bits additionnels)
  • de la présence de reines multiples dans un ou dans les deux camps

Il est cependant raisonnable de penser que des modifications générales de l'algorithme de construction de la clé permetraient d'inclure les informations énoncées ci-dessous dans le paquet global de 129 bits. cEla peut se faire en prévoyant des variantes dynamiques dans l'ensemble des codes et dans l'algorithme (qui deviendrait sensiblement plus complexe, plus fourchu).

Conclusion

Le nombre de positions légales dans une partie d'échecs est inférieur à 2129, soit environ 6.8 x 1038