Eternity II
est un puzzle spécialement étudié pour être extrêmement difficile, au point que son éditeur offre 2 millions de dollars au premier qui parviendra à placer correctement ses 256 pièces carrées de façon à ce que les côtés de chacune correspondent à ceux de ses 4 voisins, comme sur ce petit exemple avec 16 pièces seulement :


D’après l’éditeur, il existe 20′000 solutions au puzzle, et il nous “aide” en nous indiquant la position d’une pièce (la 139), et fournit 2 indices de plus si l’on résout un puzzle 6×6 et un 12×6 avec des pièces indiquées dans la boite. Il n’est pas clair si ces indices (”hints” en anglais) facilitent réellement la résolution du puzzle, où s’ils servent à limiter le nombre de solutions admises comme victorieuses à beaucoup moins de 20′000, tout en rendant la programmation d’une solution informatique plus compliquée.

Il existe plusieurs logiciels de résolution d’Eternity II, qui évitent tous ces problèmes de copyright en obligeant l’utilisateur à décrire lui-même les 256 pièces du jeu qu’il est censé avoir acheté au magasin :

  1. Eternity2.net était le plus ambitieux : basé sur BOINC , il permettait d’utiliser la puissance combinée de milliers d’ordinateurs. Le projet a été stoppé après quelques mois, officiellement par désespoir de trouver une solution avec un algorithme “brute force” et en raison des coûts du serveur. Le code source de ce programme a été rendu disponible … sur leur serveur qui ne répond plus !
  2. Eternity2.fr est aussi un solveur distribué, et le site (en français) est plein d’informations utiles, avec également un forum très actif. Le logiciel que vous téléchargez après inscription sur le site se synchronise avec le serveur pour calculer des configurations qui n’ont pas encore été évaluées. Si une solution est trouvée, l’auteur du logiciel s’engage à vous verser la moitié des $2M…
  3. GPU Eternity est basé sur le “Global Processing Unit“, un client peer-to-peer Gnutella qui non seulement partage les fichiers, mais aussi le processeur.

Algorithmes utilisés

Tous ces programmes utilisent faute de mieux un approche “brute force” : on place des pièces correspondantes les unes à côté des autres jusqu’à ce qu’on ne puisse plus le faire, puis on fait du “backtracking” en enlevant la dernière pièce et en essayant d’en mettre une autre qui permette de continuer, et si on n’y arrive pas on enlève encore la pièce précédente etc. La complexité de cet algorithme est monstrueuse : la probabilité de trouver une solution de cette manière en une année est très faible.

Eternity2.fr annnonce une performance de son algorithme de 15′000′000 de pièces disposées / seconde ! Une option permet de visualiser son fonctionnement dans une fenêtre graphique bougeant à toute vitesse. Une capture donne ceci :

eternity2fr.png

On voit que, comme souvent dans ce genre de casse-tête, tout va bien presque jusqu’à la fin : ce sont les dernières pièces qui font la différence, et si on n'y arrive pas, c'est peut être les premières qui sont mal placées.
Tetravex II a aussi une interface graphique et aborde le problème de manière identique, ligne par ligne.

Références: