Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Ici, on fait dans le petit, le LCD qui déchire sa race, on y cause même calculatrices quand on est en manque !

Modérateur : Politburo

Répondre
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Marge »

Bonjour,

Avant que chacun n'expose ses stratégies, je crois judicieux de rappeler à tous le principe du jeu.

Un savon ovale représenté schématiquement par un rectangle de 3 cases de côté est lâché dans une baignoire, elle-même schématiquement représentée par un rectangle de 10 cases sur 6.

Image

Le savon (ou la savonnette, malgré sa taille imposante), dont l'emplacement est inconnu des joueurs - humain(s) et/ou machine(s) - en raison de la mousse recouvrant la surface de l'eau, doit être saisi exactement en son centre par la main du candidat. Si le candidat touche le savon sur un de ses bords, le fugitif s'échappera dans la direction opposée au bord touché d'un nombre de cases arbitraire, familier aux utilisateurs de machines à calculer que nous sommes puisque c'est celui du clavier standard de la calculette (mais non pas du téléphone, ni même de l'appareil qui permet les opérations sur votre carte bancaire).

Code : Tout sélectionner

|7|8|9|
|4|5|6|
|1|2|3|
Si le candidat chanceux saisit le savon en son centre, le programme renvoie le chiffre 5 (le "S" de savon), et la manche est terminée.
Si le candidat ne touche pas le savon, rien ne se passe, le programme renvoie "0" et c'est au tour du deuxième candidat de jouer.
Si le candidat touche le savon sans le saisir correctement, le petit bolide peut se déplacer d'une distance fixe comprise entre 1 et 9 cases ; si le savon est touché "en bas à droite", il se déplacera donc nécessairement de trois cases vers "en haut à gauche". S'il rencontre une paroi de la baignoire (et doit poursuivre sa course), il rebondira conformément aux lois les plus élémentaires de... l'optique. Dans ce cas, le programme renvoie un nombre compris entre 1,0 et 1,5, la partie entière indiquant que le savon a été touché, et la partie décimale indiquant le nombre de rebond(s) effectué(s) par le bolide.


bagni.png
bagni.png (39.13 Kio) Vu 5233 fois
Il y a tout de suite des évidences qui sautent aux yeux :

- le savon ne peut pas avoir son centre qui touche une paroi, ce qui réduit le nombre des coups à jouer pour s'en saisir (4 x 8 = 32) ;

- il est dommage de jouer un coup qui permettrait à l'adversaire de se saisir du savon à coup sûr (par exemple, dans un angle de la baignoire où une seule possibilité de mouvement est offerte au savon).

En conséquence, il est utile et fortement recommandé de réaliser un schéma topographique de la baignoire qui résume les possibilités de fuite(s) du savon, et en fonction de ces données, de décider quels coups sont les plus pertinents.

Dans le schéma ci-après, chaque carré (3 cases x 3 cases) indique une des 32 positions possibles du savon.
Les cases elles-mêmes représentent les coups possibles ; ainsi, jouer en coordonnées (0,0) - en bas à gauche - est un coup inutile (car il est impossible d'attraper le savon en son centre) et très dangereux (car si le savon est touché, il n'a qu'une seule possibilité de fuite et il se trouvera nécessairement en position (2,2) : l'adversaire s'en saisira immédiatement).

Parmi les couleurs, seul le rouge est correct au sens où il indique un coup très mauvais, en fait le pire qui soit ; l'orange est encore valable, mais après, le code est plus erratique (c'est lié au fait que je voulais imprimer cette feuille et que mon imprimante n'a pas de cartouche de couleurs !). Mais comme la calculatrice ne comprend pas ce code de couleurs, ce qui lui importe davantage est le chiffre central de chaque case, numéroté de 0 (pire coup) à 9 (meilleur coup).

Topographie de la baignoire.png
Topographie de la baignoire.png (42.75 Kio) Vu 5233 fois

Si un chiffre apparaît coloré en vert, cela signifie que le savon touché sur ces coordonnées précises occasionnera un nombre de rebond(s) unique : pour ces coordonnées, cela veut dire que le savon, si ce numéro est donné par le calculateur (par exemple : 1,5), sera trouvé par l'adversaire au coup suivant, si l'adversaire est rigoureux. Je dois reconnaître que j'ai sué à essayer d'établir des probabilités très précises, et il est possible que mes recherches soient un peu erronées, mais dans l'ensemble, le schéma est relativement correct.

On peut - et on doit ! - donc établir un ordre de coups à jouer en fonction de ce premier critère, mais en plus, permettre au calculateur de ne pas jouer un coup limitrophe à celui (ou ceux) de l'adversaire - ou de lui-même -, puisque si, par exemple, le coup (0,0) a été joué et que le savon n'est pas touché, cela signifie qu'il ne peut être en (1,1).

Le coup (5,1) est ainsi très bon à jouer au tout début, car non seulement si le savon est touché sans être saisi, on n'a, au pire, qu'une chance sur deux de le perdre au prochain coup (il n'y a qu'une paire de 0 et un triplet de 1), mais en plus, si le savon n'est pas touché, on empêche l'adversaire de jouer en (4,1) ou en (6,1), également de très bons coups, mais inutiles ici car le savon ne peut se trouver exactement à ces emplacements.

Voilà pour la stratégie initiale qu'on peut développer. Il est surprenant que peu de concurrents n'aient, au début, réellement appliqué ces préceptes, comme les parties commentées en vidéo en témoignent. :wink:

Edition : j'avoue, à la relecture, deux choses :
- je n'ai pas toujours, sinon jamais, joué (5,1), plutôt (6,1) ou (4,1), peut-être pour laisser à l'adversaire l'opportunité de montrer s'il avait vu la possibilité de ces coups parmi les meilleurs ; j'en doute, mais dans ce genre de réflexions sur "mais-qu'est-ce-qu'il-ferait-si", beaucoup trop de choses me sont passées dans la tête, raison pour laquelle, d'ailleurs, j'avais, en tant qu'arbitre, choisi de défavoriser le joueur qui chercherait à simplement copier les coups de l'adversaire en évitant tout risque de bousculer le savon (raison de la fameuse bonification) ;

- ce tableau ne laisse pas apparaître de case au centre marqué d'un 4. J'ai peut-être trop rapidement choisi cet exemplaire ce matin, intitulé "combinaisons corrigées.odt". En tout cas il montre des défaillances, car les coups (4,1), (5,1) et (6,1) sont clairement meilleurs que (1,1), marqué également d'un 9 : j'aurais dû décalé ce dernier vers 8 et retomber ainsi sur un 4 un peu plus bas.

Ce qui montre que personne n'est infaillible ! et c'est tant mieux. :D
Modifié en dernier par Marge le 12 févr. 2022 17:44, modifié 2 fois.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
Danny
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1248
Enregistré le : 28 déc. 2013 16:34

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Danny »

Ah oui, on en a fait des tableaux d'analyse ! :D
Voici quelques-uns des miens (qui n'ont pas tous forcément servi, mais c'était sympa à faire) :

- La proba pour chaque case de trouver le savon après avoir plongé dans cette case. Par exemple si c'est 1, on a 100 % de chances de trouver le savon au coup suivant. Si c'est 0.5 on a 1 chance sur 2, etc. :

Image


- Le nombre maxi de "coups" (plongeons) à faire pour trouver le savon après l'avoir touché, pour chaque case :

Image


- Les cases (en rouge avec une croix) qui peuvent permettre à l'adversaire d'être sûr de trouver le savon au coup suivant (ce qui est mal), si on a touché le savon en plongeant dedans :

Image
Dans celles qui ne sont pas en rouge, j'ai noté leurs coordonnées. Et en vert, les cases que j'ai choisies comme "cases les + sûres à jouer" dans la dernière version de mon algo (que j'expliquerai + tard).


- Des stats sur le nombre de cases selon le nombre de rebonds (lignes) et le n° du coin touché (colonnes) :

Image
Par exemple il y a 24 emplacements possibles du savon qui, lorsqu'on le touche sur le coin n°6, produisent 1 seul rebond.


- Enfin j'ai aussi un méga-tableau, qui détaille pour chaque case tous les cas possibles selon le coin touché, avec coordonnées de départ, d'arrivée et nombre de rebonds (cliquer pour agrandir) :

Image

J'expliquerai + tard comment j'ai utilisé ce tableau :geek:
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par C.Ret »

J'aime bien ces deux derniers posts, ils contiennent à eux seuls tous les éléments de la stratégie implantée dans mon SHARP PC-1211.

Comme Marge, l'objectif majeur de mon plan est, dans la mesure du possible, de ne pas donner à l'adversaire une information pertinente sur la nouvelle position de la savonnette ce qui conduira inexorablement à la défaite.

Comme Danny, j'utilise une approche probabiliste du problème; par contre c'est la probabilité inverse qui est utilisée. C'est à dire que j'évalue la pertinence des cases à jouer en fonction de la probabilité que je puisse encore jouer après mon adversaire.

Par contre, et ce fût le souci majeur de mon implémentation sur une machine qui court le mille mètres (un FOR I=0 TO 999:NEXT I ) en 4'10", il s'agit d'établir ces tableaux dynamiquement au fur et à mesure de l'avancée de la partie !

J'aime bien le dernier tableau de Danny, c'est très exactement le tableau de jeu qui est à chaque instant maintenu à jour dans la mémoire (restreinte) du PC-1211 à l'aide des 44 registres structurés.

Evidemment, pour maintenir dynamiquement autant d'information et calculer les probabilités qu'il y ait un tours suivant sur une machine aussi lente, il faut que le calcul des rebonds et de la nouvelle position d'une savonnette soit réalisé instantanément. Et donc, que tous les déplacements de toutes les savonnettes soient précalculés. Ce qui revient à mémoriser le dernier tableau présenté par Danny.

En voyant son tableau, je comprends mieux les coups joués par son SHARP PC-1500. Bien que basé sur la probabilité inverse, nous avions des stratégie fort semblables.

Il y a cependant une différence, qui je crois a, par chance, jouée en ma faveur. C'est que mon évaluation des coups à jouer tient compte de la diminution de l'entropie de la baignoire au fur et à mesure des coups joué.

Je tiens cette astuce de la théorie de l'information; chaque coup joué par l'un ou l'autre des adversaires donne potentiellement trois types d'informations importantes pour la suite du jeu :
  • définitive: le joueur touche le cœur de la savonnette et tue immédiatement le jeu
  • indicative: le joueur touche le bord de la savonnette et le nombre des éventuels rebonds va potentiellement indiquer la ou les nouvelles positions de la savonnette
  • suspensive: le joueur fait chou blanc, les suspense semble maintenu. Apparemment aucune information n'est donnée
.

Le post de Marge rappelant la règle du jeu explique les conséquences d'un événement définitif et comment le score sera calculé.
Les deux derniers posts envisagent surtout les avantages et inconvénients indicatifs de chaque position de la baignoire.

Je vais un peu parler du troisième point où les "coups dans l'eau" ont aussi leur importance et comment l'entropie de la baignoire diminuant à chaque coup, il est important d'avoir une stratégie cohérente.

Le pire ennemi dans ce type de jeux n'est pas son adversaire, mais le temps du jeu lui même. Quelque soit la qualité ou la pertinence de la stratégie adoptée, rien de bon ne sera produit si l'on a pas le temps de la dérouler.

Le premier qui touche la savonnette gagne; c'est donc bel et bien une course...

Ah! Me voilà mal engagé dans cette compétition avec un cheval de course qui ne sait pas courir ... :( :D
Tanpis, j'irai au trot !

Et surtout, il y a d'autres façon d'appréhender le problème. En discutant rapidement avec dprtl lors de notre affrontement, nous avons rapidement évoqué d'autres méthodes et plans potentiellement intéressants pour échafauder une stratégie gagnante. Malheureusement, nous n'avons ni l'un ni l'autre eut le temps de mettre ces idées en pratiques.
Il n'y a pas que Ma ... dov`è il sapone qui soit une course, il y a mille occupations dans nos vie qui en sont tout autant !


EDIT: Comme Danny a terminé son post par un magnifique tableau où il suffit de clicker dessus pour le parcourir, je vous mets ma version qui est bien plus compacte et vous n'aurez pas à zoomer pour la parcourir:
Quarante-quatre registres bien employés pour un relevé de la situation et le pré-calcul des rebonds et déplacements (Contenu des parties fractionnaires).<br />A chaque tours le PC-1211 jouera la position correspondant au registre A(39..70) le plus élevé.
Quarante-quatre registres bien employés pour un relevé de la situation et le pré-calcul des rebonds et déplacements (Contenu des parties fractionnaires).
A chaque tours le PC-1211 jouera la position correspondant au registre A(39..70) le plus élevé.
44 strategic registers.gif (102.3 Kio) Vu 5197 fois
Modifié en dernier par C.Ret le 12 févr. 2022 19:07, modifié 2 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Marge »

Merci pour vos messages instructifs.

Danny, je n'ai pas tout compris à tes derniers tableaux, mais tu donneras tes explications en temps utile et je comprendrai - enfin, à la relecture, je comprends mieux ton avant-dernier tableau qui me posait problème (cela dit, je ne sais pas comment tu aurais pu l'utiliser...).

C.Ret, tu viens d'écrire :
[...] l'un ou l'autre des adversaires donne potentiellement trois types d'informations importantes pour la suite du jeu :
[...]
- suspensive: le joueur fait chou blanc, le suspense semble maintenu. Apparemment aucune information n'est donnée.
Je ne suis pas d'accord, et je pense que personne ne l'est : nous savons probablement tous que si le savon n'est pas à cet endroit :
1. il est inutile de rejouer ce coup ;
2. il est peu utile, sinon inutile, de jouer aux alentours de ce coup, à une coordonnée (abcisse ou ordonnée) d'écart.

Cela réduit, certes, le champ des possibles, mais quelle information additionnelle nous serait-elle donnée ici ? La seule qui me semble éventuellement pertinente - et que j'avais un temps envisagée avant de l'abandonner pour des raisons évidentes de retard dans ma programmation - est celle du coup lui-même joué par l'adversaire, dévoilant sa stratégie.

Il me semble (mais j'accepte le débat !) que d'autres moyens de parvenir à la même déduction de la bonne case à jouer existe - par exemple, que l'on calcule les probabilités en fonction de la case d'arrivée, et non de départ : si le savon est placé là, c'est qu'il vient nécessairement d'une autre endroit, le(s)quel(s) ? mais cette dernière méthode me paraissait bien moins fructueuse que la précédente.

Aaaah, je sens que nous n'en aurons pas fini aujourd'hui !
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par C.Ret »

Marge a écrit : 12 févr. 2022 18:10 C.Ret, tu viens d'écrire :
[...] l'un ou l'autre des adversaires donne potentiellement trois types d'informations importantes pour la suite du jeu :
[...]
- suspensive: le joueur fait chou blanc, le suspense semble maintenu. Apparemment aucune information n'est donnée.
Je ne suis pas d'accord, et je pense que personne ne l'est : nous savons probablement tous que si le savon n'est pas à cet endroit :
1. il est inutile de rejouer ce coup ;
2. il est peu utile, sinon inutile, de jouer aux alentours de ce coup, à une coordonnée (abscisse ou ordonnée) d'écart.
Si, c'est bien cela, tu as parfaitement suivi mon raisonnement.

C'est justement ce que je m'apprêtais à dévoiler. Ma stratégie est structurée sur cette information très importante, un coup dans l'eau écarte immédiatement neuf positions de la baignoire (sauf sur les bords et les coins évidemment) ce qui, comme tu l'expliques fort bien, rend inutile de rejouer au même endroit ou sur les huit positions contigües.

Autre effet, du "plouf", le nombre de positions où la savonnette se cache diminue comme une peau de chagrin et donc la probabilité de tomber "par hasard" dessus augmente considérablement.

D'ailleurs, en observant le jeu de Danny, je me demande si son PC-1500 ne cherchait pas à limiter cette augmentation en jouant des positions écartant le moins possible de positions non explorées. Quitte à rejouer en boucle les mêmes cases ou celles que j'avais déjà jouées ?!

L'idée est discutable, elle diminue un petit peu mes chances de tomber "par hasard" sur la savonnette (ce qui m'a bien cassé les pied ce jour là !). Par contre, elle prive complètement Danny d'avoir une seule chance de faire de même. Il ne peut alors gagner que si je lui donne une indication en touchant le bord de la savonnette.

Et comme la savonnette est à 88.89% composée de bords, c'est ce qui n'a pas manqué d'arriver plusieurs fois à mon grand désespoir. Chose qui ne risquait pas de lui arriver... grrr...
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Danny
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1248
Enregistré le : 28 déc. 2013 16:34

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Danny »

Eh-eh en effet, pour notre dernière partie avec C.Ret j’avais modifié mon algo pour qu’il ne prenne aucun risque et attende simplement que l’adversaire touche le savon avant de passer à l’attaque.

Malheureusement, avec une seule partie utilisant cet algo, je n’ai pas assez de recul pour savoir si c’était efficace.
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Marge »

Je vois que tous les trois, nous avons eu cette idée que la répétition du coup de l'adversaire pouvait être une bonne (!? ou ?!) stratégie - et en tout cas, nous l'avons soupesée. Je l'ai finalement supprimée de mon répertoire car je n'ai pas cru que ce serait très efficace à long terme - je ne suis pas sûr qu'une seule fois, une manche se soit jouée en un seul coup, le premier concurrent tombant directement sur la savonnette, mais il me semble que c'était arrivé dans la première partie amicale de Danny, justement (et si ce n'était pas le premier coup, ce n'en était pas loin). Après tout, une chance sur trente-deux, c'est largement du domaine du possible, et une chance sur (32 - (4 au pire)) vingt-huit, encore plus.

J'ai cru plus efficace de maintenir une suite d'ouverture solide - ce qui ne m'a pas empêché de modifier l'ordre des coups une fois - et de faire plutôt travailler la machine sur la finale (une fois le savon touché).
Modifié en dernier par Marge le 13 févr. 2022 11:28, modifié 1 fois.
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par C.Ret »

En réalité et pour être franc, je n'ai pas réellement eut l'idée de répéter les coups. Au contraire, l'idée directrice prédominante a toujours été d'être le premier à trouver la savonnette et si possible le centre de celle-ci.

L'importance du taux de découverte de nouvelles positions non explorées ne m'est pas apparue immédiatement. En tout cas pas pendant l'ébauche des premières versions de mon code. D'ailleurs la version avec laquelle j'ai affronté Marge, entre d'autres trop nombreuses choses n'en tenait pas compte et même au contraire, elle était préprogrammée pour beaucoup défricher de territoires vierges.

J'aimais bien cette version dont la partie stratégique était basée sur le tirage aléatoire depuis une pile de "coups à jouer". Cela rendait l'exécution du code bien plus rapide et il ne dépassait jamais les 2'15" par tour. Il faut dire qu'entre l'implémentation ultime de cette version et ses débuts, le manque de place mémoire m'avait contraint à pas mal de simplifications et l'abstention d'une stratégie plus évoluée.

Cependant, c'est aussi la version qui a été la plus retravaillée et modifiée. C'est pendant son développement que j'ai découvert quelques astuces et symétries qui m'ont permis de mieux utiliser les registres de la machines et organiser le fonctionnement du code. En particulier, les sous-programmes maintenant réordonnés et placés en tout début de zone programme afin de réduire significativement sur ce pocket le temps des sauts et appels.

C'est pendant cette mise au point que j'ai vu que quelque chose manquait dans ma stratégie. J'ai recherché en programmant d'autres machines (pas uniquement du vintage) afin de tenter d'améliorer le taux de victoires. Et je dois avouer qu'à ce moment, je n'ai pas évalué l'importance de l'exploration de positions inconnues. Je me suis surtout concentré sur le choix des positions à essayer après une touche de la savonnette. Ce n'est qu'indirectement que la question du jeu initial va se résoudre au travers de l'optimisation de l'algorithme du choix de jeu après que la savonnette ai été touchée.

Donc, en affrontant mes autres systèmes avec mon PC-1211 je me suis rendu compte qu'il y avait bien quelque chose qui ne marchait pas complétement. Mais celui-ci été déjà rempli de code et de données à plus de 85% et il me semblait impossible d'ajouter une des solutions très élaborées que j'utilisais sur les systèmes beaucoup plus puissant. En particulier, il me manquait un peu de place pour évaluer les coups proposés dans "la pile des coups" et surtout de temps. Je ne voulais pas encore augmenter le temps pris à chaque tours. De plus la part importante du hasard dans ce jeu rend aussi toute stratégie trop élaborée futile, surtout si l'adversaire gagne "par chance" au second tour du jeu et que l'on a pas le temps de dérouler ou mettre en place ses pions.

Contrairement à Marge qui apparemment utilise au moins deux programmes, l'un qui tourne dans les phases d'exploration et de recherche d'un premier contact avec la savonnette et les autres programmes qui sont chargés pour s'exécuter lorsque la savonnette est découverte dans l'une ou l'autre des zones de la baignoire, je me suis obstiné à utiliser un unique et même algorithme qui serait identique dans ces deux phases du jeu, deux phases pourtant si distinctes.
C'est là toute la philosophie de mes codes, ils sont structurés en sous-partie spécialisée (initialisation de la représentation du tapis de jeu en mémoire, recherche du coup à proposer, saisie du jeu de l'adversaire) et d'un tronc commun (détermination du touché de savonnette et son éventuel déplacement, saisie du résultat d'un coup et mise à jour du tapis de jeu dans la mémoire du PC-1211). Ces sous-parties sont en quelques sorte "indépendantes" et peuvent être appelées à loisir afin de pouvoir à tout moment rejouer un coup (de l'un ou l'autre des adversaires), réévaluer ou suspendre la détermination du coup à jouer, afficher le résultat d'une position essayée, vérifier le déplacement de la savonnette (ces deux dernières possibilité ayant été largement exploitées lors de la phase de débogage afin de vérifier les réponses et déplacements précalculés).

Ce ne fut qu'à l'issue de la première confrontation avec Marge et suite a l'intéressante discussion que nous avons eut à la fin de la partie que je me suis rendu compte que j'avais eut beaucoup beaucoup de chance de gagner contre lui. Et qu'il fallait absolument que je corrige l'"imperfection constatée" de mon code. Car Marge selon toute évidence, a bien observé le jeu de mon PC-1211 et je crois que c'est grâce à lui que j'ai gagné car il a immédiatement vu l'écueil de mon jeu et a eut l'honnêteté de me l'expliquer.

Son analyse était pertinente, j'ai d'abords rapidement modifié le code de mon HP-71B qui grace à sa RAM de 32ko et son module de course JCP ROM et sa vélocité est capable de beaucoup sans aucune optimisation du code. Il est alors devenu presque imbattable ! Mon premier adversaire avait donc bien mis le doigt sur un gros défaut. Dans sa hâte à chercher la savonnette, mon PC-1211 était capable de jouer un coup idiot qui donnerai immédiatement la victoire à l'adversaire. :x

Comme le code présent dans mon PC-1211 avait été optimisé et bien compressé, j'ai donc d'abords tenté d'ajouter un patch correctif qui revenait en quelque sorte à évaluer les coups à jouer dans la pile en question. L'idée était bonne et ne faisait pas perdre trop de temps. Mais, elle avait deux écueils principaux. Le premier était que j'avais dû retirer pour économiser les pas tous les tests de contrôle qui évitent de saisir une bêtise et les affichages de validation du coup. Le second, plus prohibitif, était que la pile ne pouvait contenir que 12 coups à jouer ce qui était bien embêtant, surtout en début de partie pendant la phase d'exploration.

J'ai donc décidé de réorganiser complètement le code et la structure de donnée en mémoire en me passant de la pile des coups à jouer et surtout en prenant le risque d'avoir un code foireux qui fera n'importe quoi après neuf touches de la savonnettes.

Eh! Oui, il n'y a pas d'économie sans sacrifices !

Comme il n'y a plus de pile de coups à jouer, tout le tapis de jeu doit être parcouru à chacun de mes tours de jeu. Ce qui prend trop de temps sur ce pocket. J'ai donc, utilisé une petite astuce que les experts californiens en programmation appelle à juste titre "Lazy Evaluation".

Cela marche fort bien. Le sous-programme qui met à jour le tapis de jeu élimine les positions devenues inutiles et indique par une valeur négative du registre les positions encore valides mais dont le score est maintenant obsolète. L'éventuelle réévaluation de ces positons ce fera potentiellement lors de la recherche du coup à jouer.
Cela permet de gagner beaucoup de temps (sauf lorsque l'on bataille contre la dernière version de Danny ! grrr.. ) car évite d'avoir à réévaluer les positions qui seront modifiées par le coup immédiatement suivant de son adversaire mais aussi, en fonction des circonstances, par son propre prochain coup, d'un seuil ou de la phase du jeu qui déclencheront plus ou moins exhaustivement les évaluation. Tout cela pour ne pas dépasser (systématiquement) les trois minutes fatidiques.

J'ai manqué d'un peu de temps pour calibrer cela finement. Un compteur "Lazy Eval Counter" de boucle et d'appels devait dans mon projet initial brider les réévaluations et éviter automatiquement de dépasser les 3 min. Il n'y a pas d'horloge temps réel sur ce pocket, je n'ai pas pris le temps de régler cela, d'où mes interventions manuelles montre à la mains au cours de certaines manches !

Mais, apparemment, le prix en valait la chandelle. Toutes ces vicissitudes servent à mettre à jour autant que possible le tableau de jeu entre chaque coup des joueurs mais aussi de réévaluer à propos la pertinence des coups à jouer. Une réévaluation rigoureuse, basée sur l'étude combinatoire des postions adjacentes encore valides et le calcul de la probabilité de pouvoir rejouer un prochain tours quelque soit la décision de son adversaire. Ce qui, même en affrontant Danny qui rejoue mes coups, ou quelque soit les coups plus élaborés et sournois de dprtl ou JCH de trouver les moins improbables solutions qui me permettent d'explorer une baignoire in-sondée et vierge sans prendre de risques inconsidérés.


Ce qui fait que quand je vois que le dernier tableau du post de Danny a été réalisé sous Microsoft Excel certainement sur une machine 64 bits de plus de 4 Go cadencés à plusieurs GHz et que j'ai su mette à jour et évaluer dynamiquement ce tableau entre chaque tour (enfin presque Lazy Eval Logic oblige !) sur une machine 4bits de 1980 o cadencés à 256kHz, j'ai le vertige.

J'ai aussi un jeu complet de piles LR44 dans le premier tiroir du bureau.


En tout cas, malgré toutes ces imperfections, je suis bien heureux d'avoir pu participer au concours et avoir été votre adversaire redoutable.
Mais j'espère que vous comprenez mieux pourquoi je crains de devoir réitérer l'exploit, je crois que j'ai eut un peu de chance et surtout d'excellant adversaires difficiles à battre, et, par chance du jour, non systématiquement invincibles !
Modifié en dernier par C.Ret le 13 févr. 2022 11:28, modifié 1 fois.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Danny
Fonctionne à 2400 bauds
Fonctionne à 2400 bauds
Messages : 1248
Enregistré le : 28 déc. 2013 16:34

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Danny »

C.Ret a écrit : 13 févr. 2022 10:42 même en affrontant Danny qui rejoue mes coup
Juste pour clarifier parce que j'ai l'impression qu'il y a confusion à ce sujet : mon algo n'a jamais été prévu pour rejouer les coups de l'adversaire !
Il a pu arriver qu'il rejoue le même coup que l'adversaire (surtout dans la dernière partie contre C.Ret, ou bizarrement c'est arrivé plusieurs fois de suite), mais c'était du pur hasard :o :)
? Apple, Atari, Canon, Casio, ????????????, HP, Psion, Sharp, Tandy... même TI.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par C.Ret »

Danny a écrit : 13 févr. 2022 11:25
C.Ret a écrit : 13 févr. 2022 10:42même en affrontant Danny qui rejoue mes coup
Juste pour clarifier parce que j'ai l'impression qu'il y a confusion à ce sujet : mon algo n'a jamais été prévu pour rejouer les coups de l'adversaire !
Oui, pardon, raccourci de language dû à un emportement lyrique. J'aurais dû préciser "qui rejoue afin de ne découvrir autant que possible un minium de positions inexplorées". Car je pense qu'en fait le hasard n'est pas le seul responsable que ce que nous avons observé? C'est très certainement aussi le résultat de quelques contraintes ou quelque degré de liberté résultant ...
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Marge »

Danny, j'avais également mal compris ; il est certain qu'au bout d'un certain nombre de coups "dans l'eau", il peut être plus judicieux de rejouer un coup déjà joué que de donner le savon à l'adversaire.

Je reste pantois devant le dernier tableau donné en édition par C.Ret, une merveille de concentré que je peine encore à totalement déchiffrer, mais qui me suggère que si j'avais moins perdu de temps de programmation et de mémoire avec les déplacements du savon et mes phrases à rallonge (+ de 600 octets !), j'aurais pu utilisé ma 41C de 1979 initialement prévue sans module mémoire additionnel et j'aurais remporté ce tournoi haut la main :wink: ; autrement dit, si C.Ret avait utilisé sa 41C, il aurait encore gagné ! :lol:
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par C.Ret »

Peut-être, peut-être pas, on ne sait jamais avec ce jeu.

Ce qui est sûr c'est que l'algo du PC-1211 devrait tenir dans mon HP-41C surtout si on lui laisse ses modules mémoires.

Mais vu le temps que j'ai mis à déboguer un code BASIC relativement facile à modifier, je n'ose pas imaginer le travail que représente ces mêmes tâches avec une HP-41C. Je n'aurais peut-être pas abouti à un code aussi élaboré !

Par contre, maintenant que l'algorithme est établi et le code mieux guindé, une adaptation ne devrait pas trop poser de soucis (hors ceux habituels de la conversion d'un code algébrique déclaratif en RPN instructif).
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
C.Ret
Fonctionne à 9600 bauds
Fonctionne à 9600 bauds
Messages : 3405
Enregistré le : 31 mai 2008 23:43
Localisation : N 49°22 E 6°10

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par C.Ret »

Afin de ne pas me perdre dans les détails de mon code ou des réflexions stériles sur la stratégie à adopter et afin d'introduire les explications des perfectionnement et nombreuses astuces qui m'ont permis de faire entrer autant d'AI dans un SHARP PC1211 quarantenaire rustique, lent et poussif,
je me propose pour illustrer tout cela de lever le voile sur sa mécanique en rejouant certaines des manches que j'ai gagnées ou perdu lors de ce concours.


Pour commencer, je vais prendre à titre de première illustration la sixième manche jouée contre dprtl lors de notre amicale confrontation du 31 janvier 2021.

Cette manche a été un moment très fort puisque c'est le moment où j'ai égalisé le score après avoir été écrasé par un début de partie sans aucune victoire. Elle a de plus quelques caractéristiques qui ont fait que l'algorithme interne du PC-1211 c'est déroulé sans accrocs ni complications. Je laisse les manches plus compliquées pour les illustrations et explications pus détaillés à venir.

Commençons par le commencement et les faits les plus simples.

Je lance le programme en mode DEF par [SHFT][ Z ], c'est d'après ce que j'ai vu sur les blogs et site des utilisateurs du PC-1211 un grand classique de lancer l'unique programme par cette touche en bas à gauche du clavier. Pourquoi pas !

Avant d'avoir charger la mémoire du PC-1211, la baignoire est vide apparait sur les captures toute bleue !
Il y a cependant au centre une zone plus blue que les bords, car j'ai fais le choix de ne toujours jouer que sur une position possible de la savonnette et surtout de chercher à en toucher le centre. Je ne préoccupe donc absolument pas des positions en périphérie de la baignoire. Ces positions ne sont même pas représentées en mémoire. L'adversaire peut les jouer mais certainement pas mon PC-1211.

C'est un choix stratégique, le jeu étant une sorte de course, je ne veux pas perdre de temps et fournir des informations à mon adversaire en jouant une case où je ne peux trouver la savonnette/ pas de temps à perdre !
Je ne m'intéresse donc qu'aux 32 cases au centre de la baignoire. Avec un peu de chance je tomberai sur le centre de la savonnette juste par simple chance !

En plus ce choix fait une énorme économie: coder l'état de 32 case c'est presque la moitié de travail et de mémoire que les 60 case de la baignoire entière ! Et l'on comprends que je n'ai pas de mémoire ou registre à gaspiller.
Fig1_dprtl manche 6.gif
Fig1_dprtl manche 6.gif (21.67 Kio) Vu 5055 fois
la première opération au début de toute manche est de réinitialiser la mémoire du PC-1211 en chargeant les registres contenant le tapis de jeux, le pré-calcul des touches et des déplacement ainsi que l'évaluation (le score) de chacune des 32 cases. tout cela est précalculé. Le chargement fait un bruit d'enfer qui rappelle les années 80-90 mais ne prend qu'environ 1'20" au lieu du quart d'heure nécessaire à la réinitialisation manuelle partielle.

Le calcul complet des registre a été fait sur d'autre machine. En théorie le calcul complet prends plus de quinze heures au rythme lent du SHARP PC-1211.

Je lance le chargement depuis l'interface cassette en répondant 1 [ENTER] à l'invite "<TAPE_". La flèche vers la gauche est historique, c'est ainsi que j'indiqué en 1982 à l'utilisateur (moi en fait) qu'il fallait rebobiner la cassette et la positionner au début. Bon aujourd'hui c'est un lecteur numérique qui lit en boucle l'enregistrement en *.WAV
Mais que de souvenir et péripétie avec ces cassettes et leur gestion !

A la fin du chargement, le PC-1211 affiche la version des données. ce qui permet de vérifier que tout est bien entré en mémoire et qu'il n'y a pas un bout de code qui traine. J'utilise tous les registres jusqu'à l'avant dernier. Un petit programme laissé en mémoire et ça n'entre plus.

La capture du tableau de jeu permet de voir que mon PC-1211 a maintenant une petite idée en tête:
Trouver la savonnette en prenant le moins de risque possible, c'est à dire en évitant de se mettre dans le rouge.
Il a pour instructions de choisir la position la plus verte !


A l'invite "SEED _" j'entre la semence du générateur pseudo-aléatoire. Bonne idée d'avoir imposer le même à tout le monde. Et cela permet de reproduire à l'infini les parties déjà jouées. Le PC-1211 n'ayant pas d'instruction de génération aléatoire, tout tirage au sort utilise ce sous-programme (très court en plus, bien ).

J'ai marqué la position de la savonnette d'un petit carré noir pour nous aider à suivre ce qui se passe. Mais au moment du jeu personne ne sais où elle est.
Elle est en zone rouge (assez clair) donc à priori pas un placement très favorable car j'évite les zones rouges :twisted: . Nous verrons bien ! :twisted:

Le prompt "YOU _" indique que mon PC-1211 attend le jeu de son adversaire.

dprtl joue en 6.4. je saisi ces coordonnées et valide par un appuie sur [ENTER]
Immédiatement après avoir saisi celui-ci, mon PC-1211 indique qu'il s'agit d'un coup dans l'eau en affichant le position 6.4 et son résultat 0.
Je valide alors le coup par une nouvelle pression sur [ENTER] après avoir informé mon adversaire du résultat.

En pressant ENTER, je valide et mon PC-1211 met à jour le tableau de jeu
  • Cela consiste à retirer des coups possibles la position jouée et les huit cases adjacentes. Pour désactiver ces cases, leur LEVEL mémorisé par la partie entière des registres concernés est mis à zéro.
  • Mais aussi de marquer les cases limitrophes dont l'évaluation (le score) est impactée par ce coup. Chaque registre de ces positons limitrophes est marqué d'un signe négatif. Comme je n'ai pas le temps de réévaluer systématiquement ces cases, elles sont simplement marqué pour une éventuelle réévaluation ultérieure
Sur les captures ci-dessus, on voit l'effet des LEVEL désactivé par l'apparition d'une zone rouge autours de la position jouée.
Les cases mises en attente d'évaluation sont représentées par des hachures. Elles garde leur couleur car l'ancien score n'est pas modifié. I ly a une raison, en début de partie, en général les scores se dégradent (avec l'inactivation des cases adjacentes en général les choix se simplifient mais il y a encore trop de case voisine pour qu'une case prenne subitement de l'importance. Je garde donc l'évaluation obsolète afin de pouvoir déterminer quelles case à évaluer en priorité. Rien ne sert de perdre du temps de calcul à évaluer une case au score trop faible (le nouveau score étant, dans un premier temps, certainement plus faible que le précèdent). Par contre, si une case marquée ayant un bon score (plus fort que l'actuel record des cases précalculées), il peut être important de la mettre à jour en priorité afin d'évaluer s'il n'a pas trop perdu de sa précédente splendeur. Si c'est le cas, il pourrait faire l'objet d'un bon coup !

Une sonnerie indique que cette première tache est accomplie et donne furtivement le décompte des positions encore actives (1. = phase1 (pas de touche) 26.= cases actives restantes.
Je rappelle que je sais qu'arriver à la neuvième touche, la phase passera à 10. et mon code s'écroule et catastrophe. Pouvoir suivre cela m'aide à combattre le stress de chaque manche ...

Ce code, c'est de la dynamite ... .. il peut péter à tout moment !
Fig2_dprtl manche 6.gif
Fig2_dprtl manche 6.gif (25.42 Kio) Vu 5055 fois
Une fois le "bip" retenti, mon PC-1211 cherche un bon coup à jouer. Pour cela, il parcours les registres encore actifs et retient celui qui présente le meilleurs score. En réalité cette tache est facilité par l'ordre des info dans le registre; il suffit de prendre la valeur absolue +L.Srrrrrr
Si une valeur absolue est supérieur à la meilleurs position alors retenue, il faut vérifier qu'il ne s'agit pas d'un registre négatif. Dans ce cas, une réévaluation sera nécessaire avant de retenir cette nouvelle position comme étant la meilleure.

Pour ce premier coup, aucune position active en attente ou non de réévaluation n'est meilleure que la position 1.1 qui est retenue (pendant la recherche le signe $ marque le meilleur coup trouvé) puis jouée :

L'affichage "ME 1.1" indique que mon PC-1211 souhaite jouer cette position.
JE valide par [ENTER]
Il affiche alors le résultat 0. pour ce coup qui tombe à l'eau sans rien toucher.

En pressant ENTER, je valide le jeu de mon PC-1211 qui met immédiatement (mais lentement) à jour le tableau de jeu.
Il procède exactement comme pour le jeu de son adversaire. C'est d'ailleurs la même partie de code qui entre en action.
Sur la capture on voit apparaitre une nouvelle zone rouge et l'accroissement de la zone hachuré marquant les positions en attente de réévaluation dont le score est impacté par les coups joués.

Au bout d'un certain temp, un bip annonce la fin de la mise à jour. La phase de jeu et le nombre de position encore actives sont affichés?
On voit que mon jeu n'a écarté que quatre position. Par contre il y a une majorité de positions à réévaluer.

Mais c'est à mon adversaire de jouer; cela qui va changer la donne et éliminer "naturellement" quelques positions en attente d'évaluation.
Le prompt "YOU _" est renseigné avec le nouveau coup de dprtl qui joue en 8.3
Décidément, mon adversaire aime prendre des risques ! Il aime le rouge et le rosé.

Mais malheureusement pour moi, son coup de touche rien. Mon PC-1211 indique un coup dans l'eau.

En pressant ENTER, je valide le coup et lance la mise à jour du tableau de jeu.
La capture montre l'apparition du rouge au niveau de la positon jouée et des positions adjacentes.
Quatre nouvelles positions sont éliminées (c'était des positions en attente de réévaluation) et trois nouvelles positions sont marquées.

Puis un Bip indique la fin de la mise à jour et mon PC-1211 évalue les coups à jouer. Il sélectionne dans un premier temps la position 4.1 puis la position 5.1
Aucune des positions en attentes ne sembles être suffisamment forte pour déclencher une réévaluation.
Par "ME 5.1", il annonce son intention de jouer en 5.1 (case la plus verte : c'est dire celle qui donne le plus de mal à mon adversaire quelque soit la position inconnue du savon)
Je valide par [ENTER].

Alors, mon PC-1211 sonne pour indiquer un rebond. Il y a donc eut une touche. ce qui est immédiatement indiqué par l'affichage de la réponse 1.1

Dans l'encadré en fond vert, je donne une vison simplifiée de la façon dont le nombre de rebonds ainsi que la nouvelle position de la savonnette est déterminée.

La position de la savonnette était BA=4.2 , le coup joué est DC=5.1 on a donc une proximité suffisante pour toucher la savonnette avec les écarts I= +1 et J=-1.
Ce qui fait que l'on touche la savonnette dans sa zone de touche n° T=5-3I-J=5-3+1=3; la savonnette se déplace donc de trois cases. Mais le PC-1211 se sert de sa table mémorisée:
Le nombre R de rebonds est donné par le registre G=30+8A+B=50 à la 1+T=4ième décimale. Soit R = 1 rebond.
La nouvelle position X de la savonnette est donnée par le registre G=26+A=28 à la même 4ième décimale X=3 (troisième ligne zone centrale)
La nouvelle position Y de la savonnette est donnée par le registre G=30+B=34 à la même 4ième décimale Y=1 (première colonne zone centrale)

On constatera que l'adresse des registres de ligne ne dépend pas de la colonne de la savonnette et respectivement les registre de déplacement en colonne ne dépend pas de la ligne. C'est une propriété liée au mode de rebond de la savonnette. Je ne m'en était pas rendu compte lors des première version à la tapis de jeu nécessité 32 registre pour les rebonds, 2x32 registres pour les déplacements. C'est en codant ces 64 registres que je me suis rendu compte des très nombreuses répétitions. A y réfléchir, c'est assez logique, mais ce fut une bonne surprise qui justifia d'utiliser le pré-calcul des positons et libéra suffisamment de mémoire (bon facteur re réduction de 64 je passe à 12 registres seulement) pour envisager une stratégie active.
En effet, le pré-calcul rend la détermination de la situation ou l'évaluation de diverses hypothèses très rapide. c'est ce qui rend possible de mettre à jour le dernier tableau Excel du post de Danny dynamiquement à jour au fur et à mesure des événements. Surtout que la technique d'évaluation paresseuse "lazy Eval" marche bien et minimise encore l'impact de cette stratégie.

Sur la capture, je marque d'un petit carré noir la nouvelle position de la savonnette pour nous aider à suivre l'intrigue.
Fig3_dprtl manche 6.gif
Fig3_dprtl manche 6.gif (26.94 Kio) Vu 5055 fois
Mais revenons au jeu où les intervenant ne se doutent de rien :

Le PC-1211 sonne un rebond et annonce le résultat : SAVONETTE TOUCHEE, UN REBOND. Aïe, ça craint pour moi ! Je donne d'un seul coup beaucoup d'information. En pressant ENTER, je valide le coup et lance la mise à jour du tableau de jeu.

Utilisant le tableau où sont précalculés les touches et déplacements de la savonnette, mon PC-1211 établit la liste des nouvelles positions possibles.
Il ajoute simplement une unité à leur status ce qui a pour effet de rendre les anciennes positons caduques.
Toutes les nouvelles positions sont marquées négativement; elles sont toutes en attente d'une réévaluation.

La fin de la mise à jour est annoncée par un Bip et l'affichage transitoire indique que nous sommes maintenant en phase 2. et qu'il y seulement 3 positions actives.

Je saisie le nouveau coup de mon adversaire, il joue en 4.1
Ah! La position préférée de Marge. Là je me suis dit, c'est fini dprtl va gagner !

Mais ! Oh! Surprise, mon PC-1211 annonce un chou blanc ! Alors que la cote est de 1 pour 3 de gagner, pas de bol ça tombe à coté !
Vite, je valide par ENTER pour tenter ma chance.

J'ai maintenant 1/2 chance de tomber juste ! Je croise les doigts.
Fig4_dprtl manche 6.gif
Fig4_dprtl manche 6.gif (25.26 Kio) Vu 5055 fois
Le Bip et l'affichage transitoire de la fin de la mise à jour du plateau de jeu annonce la phase 2. et qu'il reste effectivement 2. positions possibles.

Mon PC-1211 commence donc les évaluations par la position 6.1 et affiche transitoirement "6.1 ^" puis il sélectionne cette position avant d'évaluer la seconde en 1.3
Je n'en dirais pas plus aujourd'hui sur la procédure d'évaluation, surtout à partir de ces deux positions de fin de jeu atypiques qui ne permettent pas d'illustrer le fonctionnement de ce sous-programme.
Comme il n'y a pas de position possible adjacente le score est maximisé artificiellement.
La seconde position est retenue à son tours: par chance son registre a une valeur un peu supérieure car il y a plus de rebonds possibles et donc elle est préférée à la précédente. Mais c'est un effet secondaire induit et indirect (presque involontaire).


Comme quoi gagner à ce jeu tiens à un fil.
C'est lors de cette manche que je remonte mon score face à dprtl qui mener quelques temps avant 3 à 0.
SHARP PC-1211 PC-1360 EL-5150 PC-E500 | Commodore C=128D | Texas Instruments Ti-57LCD Ti-74BASICalc Ti-92II Ti-58c Ti-95PROCalc Ti-30XPROMathPrint | Hewlett-Packard HP-28S HP-41C HP-15C HP-Prime HP-71B | CASIO fx-602p | NUMWORKS | Graphoplex Rietz Neperlog | PockEmul | Sommaire des M.P.O. | Ma...dov'il sapone.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Marge »

Très intéressante démonstration, merci C.Ret.

Je me tiendrai ce soir à deux remarques, mais beaucoup reste à dire sur le déroulement de nos parties, ou même de celle-ci, bien entendu.

Tout d'abord, si j'ai bien reconnu dans ton tableau les coups colorés en vert comme les meilleurs et ceux en rouge comme les pires, j'ai été surpris par ton choix d'attribuer au coup (1,1) - c'est-à-dire une chance sur trois de toucher le savon donnée à l'adversaire plus de poids que, par exemple, (4,1), (5,1) ou (6,1), si j'en juge par le fait que (1,1) est représenté par une couleur plus sombre que les trois autres.
C'est surprenant parce que je crois qu'une chance sur trois contre (une chance sur trois)+(une chance sur deux) - il y a, si je me rappelle bien, trois cases de destinations possibles si l'effet donne "1" et deux cases de destinations possibles si l'effet donne "0" - ne peut être en faveur du premier choix (1,1). Mais je peux certainement me tromper : j'ai vraiment passé un temps très important à chercher des probabilités fiables et j'aimerais les lumières de Schraf ou d'autres plus versés dans ce type de problèmes pour le résoudre !

Ensuite, même si cela ne peut pas te retirer les palmes ô combien méritées que tu as réussies à obtenir de haute lutte, ton intervention par l'appui sur la touche [ENTER] pour valider un coup proposé par le Sharp n'aurait pas dû être autorisée. Je suppose que cela a été le résultat d'une première version de ton programme pour lequel, on s'en souvient, tu avais cru que la machine était "simplement" une aide à la décision - par la suite, c'est plus probablement le temps de calcul qui t'aura obligé à cette décision d'intervenir. En fait, non, et c'est selon moi tout l'intérêt de ce type de concours, l'engin doit être totalement autonome et le programmeur doit simplement constater s'il réagit tel qu'il l'aurait dû - ou s'il s'est planté quelque part, dans l'algorithme ou dans la programmation.
Certes il s'agissait ici d'une première partie amicale. Toutefois tu es aussi intervenu dans la dernière partie pour arrêter un calcul qui, s'il avait continué, aurait pu malheureusement conduire ta machine à la perte de la manche pour avoir dépassé le temps de trois minutes imparti. Je ne vais pas juger cela et je pense que personne ne le fera ici parmi les concurrents, mais tous en auraient le droit. Je crois cependant important de répéter, pour ce genre de concours à venir, que les engins doivent absolument être totalement autonome, ce qui exige bien sûr de penser d'avance à toutes les situations possibles et justifie qu'on puisse passer à l'élaboration des algorithmes un temps se comptant en mois. Mais encore une fois, je pense que cela ne retire rien à ta victoire amplement méritée, pour avoir été le seul à avoir eu autant de parties gagnées au compteur. :D
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Avatar du membre
Marge
Fonctionne à 14400 bauds
Fonctionne à 14400 bauds
Messages : 6172
Enregistré le : 01 oct. 2008 14:39
Localisation : En bas, tout au fond à gauche.

Re: Ma... dov'è il sapone? : le tournoi, c'est terminé ! Vivement le prochain !

Message par Marge »

Bonsoir ! (haut les cœurs !)

Bien, nous sommes arrivés, tous autant que nous sommes, au terme de ce tournoi, et à présent commence la distribution des lots !

Rappelons-les ici :

  • Image

  • Les lots se composent des items suivants :

    - Un assistant personnel numérique OREGON SCIENTIFIC OSARIS (version française d'occasion d'une valeur inestimable !) en état de fonctionnement impeccable, livré avec son stylet !
    - Une TI GALAXY 9 !!
    - Une TI GALAXY 40 !!!
    - Une CASIO fx-6800G !!!!
    - Un OVERLAY "étanche" de protection du clavier pour HP41 !!!!!
    - Un MANUEL HP La solution de vos problèmes avec votre calculateur Hewlett-Packard (explication du RPN) !!!!!!
    - Un MANUEL HP HP-34C Manuel d'utilisation et guide de programmation !!!!!!!
    - Un MANUEL du PC-1403 !!!!!!!!!
    - Un MANUEL du PC-1350 (annoté) !!!!!!!!!!
    - Un LIVRET d'application pour HP-17B, HP-19B, HP-27S : Fonctions élargies - Bruckert Diffusion !!!!!!!!!!!
    - Un LIVRE Le PC 1251 à l'écran Réalisation Pierrick Moigneau - Illustration de Sylvain Crosnier - Une Production P.S.I - B.P.86 - 77402 Lagny-sur-Marne (1984) - 144 pages !!!!!!!!!!!!
    - Un magnifique CASIO fx-730 P en boîte !!!!!!!!!!!!!


Ah, ne dites pas que la maison Silicium ne vous bichonne pas ! :D


Et puisque personne ne s'est opposé au classement à ce jour, l'ordre des lauréats sera le suivant :

Premier à choisir : C.Ret, qui fera un deuxième choix une fois que tous les participants seront passés (voilà qui nous garantit encore de longues heures de pourparlers... ;))

Deuxième à choisir : Danny !

Troisième à choisir : JCH !

Quatrième à choisir : dprtl !

Cinquième à choisir : Marge !

Et on l'aura compris, après Marge, c'est C.Ret qui choisira de nouveau un trophée parmi ces superbes lots (!!!) - jusqu'à épuisement des réserves.

À très bientôt, donc !
3 hommes, 3 demis, un 3a... Magnéto, Serge !

Quelques-uns de mes petits programmes pour machines Hewlett-Packard :
15C : Knight's Tour ;
29C : (k-)Permutations, Combinations, Linear Regression and Pseudo-random number ;
34C : Hanoi Towers - Automatic & Manual resolutions ;
67
__: A L I E N .

« Boris », c'était juste Maurice enrhumé.
Répondre

Retourner vers « Tous les Pockets »