Derniers messages sur Zeste de Savoirhttps://zestedesavoir.com/forums/2020-02-20T17:24:10+01:00Les derniers messages parus sur le forum de Zeste de Savoir.Puissance 4, qui aura la meilleure IA ?, message #2160182020-02-20T17:24:10+01:00lmghs/@lmghshttps://zestedesavoir.com/forums/sujet/1275/puissance-4-qui-aura-la-meilleure-ia/?page=3#p216018<figure><blockquote>
<p>J’ai un collègue qui en a fait une assez dure ahah ratio de 1 victoire pour 5 défaites ele est solide : <a href="https://www.sicara.fr/puissance-4-intelligence-artificielle">https://www.sicara.fr/puissance-4-intelligence-artificielle</a></p>
</blockquote><figcaption><a href="https://zestedesavoir.com/forums/sujet/1275/puissance-4-qui-aura-la-meilleure-ia/?page=3#p216008">jeanbaptiste.jezequel</a></figcaption></figure>
<p>C’est rigolo sa disponibilité en ligne, mais elle perd à chaque fois. Malgré des vilaines erreurs de ma part.</p>
<blockquote>
<p>Vous avez gagné 59 parties sur 60. L’AI apprend toujours !</p>
</blockquote>
<p>Séquence: 4, 5, 4, 6, 3, 7, 2, 3, et 5
EDIT: Ca y est, elle commence à faire autre chose.</p>
<p>Il faudrait l’entrainer face à un negamax histoire de la solidifier un peu.</p>Puissance 4, qui aura la meilleure IA ?, message #2160082020-02-20T15:17:23+01:00jeanbaptiste.jezequel/@jeanbaptiste.jezequelhttps://zestedesavoir.com/forums/sujet/1275/puissance-4-qui-aura-la-meilleure-ia/?page=3#p216008<p>J’ai un collègue qui en a fait une assez dure ahah ratio de 1 victoire pour 5 défaites ele est solide : <a href="https://www.sicara.fr/puissance-4-intelligence-artificielle">https://www.sicara.fr/puissance-4-intelligence-artificielle</a></p>Dominos !, message #1328042016-11-27T12:21:28+01:00elegance/@elegancehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p132804<p>Je n'ai pas du tout avancé depuis mon dernier message il y a un peu plus d'un mois. Ca va être compliqué de s'y remettre après un mois d'arrêt. De mémoire, j'avais prévu dans mes structures les notions de pioche.</p>Dominos !, message #1327132016-11-26T12:22:17+01:00fromvega/@fromvegahttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p132713<p>J'ai développé une IA basique en C qui tourne avec un programme maitre adapté pour les dominos, l'original gérait les jeux de type décision simultanée en mode itéré. Le protocole de communication utilise stdin/stdout par contre, mais je peux éventuellement adapter l'IA aux websockets si d'autres sont partis là-dessus.</p>
<p>Pour info mon programme maitre peut gérer des parties avec différents "sets" de dominos (en double 7, 8, etc) ainsi que les parties avec pioche, si certains sont tentés de la tester je pourrai donner plus de détails sur le protocole d'échange et les règles.</p>Dominos !, message #1280212016-10-24T14:32:16+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p128021<p>J'avoue que je n'ai pas beaucoup avancé de mon côté. Je ne m'y connaît pas des masses en dominos (je sais jouer au jeu de base, mais c'est tout), donc si ton programme maître est meilleur que le mien (plus avancé et meilleur décompte des points), autant le prendre (et j'éditerai alors les règles sur la première page du sujet). <img alt=":)" src="/static/smileys/smile.png"></p>Dominos !, message #1280162016-10-24T14:25:05+02:00elegance/@elegancehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p128016<p>Je n'avance pas très vite, mais j'ai l'impression d'être le seul à avancer !</p>
<p>J'ai fait un programme master, qui lance 4 versions de mon IA, avec des paramètres légèrement différents. Pour l'instant, l'IA est très basique, mais j'ai les outils pour tester/améliorer/comparer. Je n'aime pas du tout la règle proposée (15 pts au premier, 10 pts au 2nd , etc etc) et donc je travaille sur une autre variante du jeu :</p>
<ul>
<li>
<p>les points marqués sont N = le cumul des chiffres des dominos qui restent en jeu.</p>
</li>
<li>
<p>Si un joueur pose tous ses dominos, il marque ce nombre de points N.</p>
</li>
<li>
<p>Et si la partie finit sur un blocage, le joueur qui a le moins de points dans les mains marque ce nombre N. Et en cas d'égalité, les points N sont partagés entre les ex-aequo.</p>
</li>
</ul>
<p>A suivre.</p>Dominos !, message #1264122016-10-10T20:47:12+02:00elegance/@elegancehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p126412<p>Au rythme où j'ai commencé, j'aurai un truc au mieux en décembre, si le sujet m'amuse encore à ce moment là. Mais comme en plus l'aspect 'protocole de communication' m'ennuie au plus haut point, il est probable que ça n'aboutisse pas du tout.</p>Dominos !, message #1263472016-10-10T11:32:30+02:00Ricocotam/@Ricocotamhttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p126347<p>Bonjour,
Personne n'a encore fait quelque chose ?</p>
<p>Je pense qu'il faudrait définir une date limite une fois que le programme maître sera terminé, voire en donner une avant ce qui nous motiverait. Qu'en pensez vous ?</p>Dominos !, message #1254472016-09-30T23:21:02+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p125447<p>Si c'est faisable mais je ne sais pas comment exactement. Le plus gros problème de Vala est la doc qui est un espèce de patchwork entre celle des bibliothèques en C, des fichiers décrivant la liaison C/Vala, et des fichiers d'introspection GObject. Bref, c'est très mal foutu, et il faudrait que je creuse plus le truc, mais c'est juste que j'ai essayé un truc avec le stdin/stdout en asynchrone et que ça à pas fonctionné comme je voulais, donc je me suis dit que les WebSockets s'était bien aussi. Donc en gros, que je refasse tout ou que je tâtonne pour trouver comment faire du stdin/stdout bien, ça devrait me prendre plus ou moins le même temps…</p>Dominos !, message #1254412016-09-30T22:40:16+02:00QuentinC/@QuentinChttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p125441<blockquote>
<p>Bon sinon, si le programme maître est vraiment trop problématique avec les WebSockets, je peux le réécrire en essayant d'utiliser stdin/stdout, mais ça veut dire qu'il faut que je refasse tout de zéro, dans un autre langage.</p>
</blockquote>
<p>Attends, tu es en train de dire que Vala ne sait pas faire de stdin/stdout et pipe des programmes externes ?
Ca me paraît quand même assez improbable, ça fait partie de la base de tout langage de programmation et de tout système d'exploitation.</p>Dominos !, message #1254202016-09-30T18:57:58+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p125420<p>Bon sinon, si le programme maître est vraiment trop problématique avec les WebSockets, je peux le réécrire en essayant d'utiliser stdin/stdout, mais ça veut dire qu'il faut que je refasse tout de zéro, dans un autre langage.</p>Dominos !, message #1253512016-09-29T21:15:30+02:00QuentinC/@QuentinChttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p125351<blockquote>
<p>Mais bon, généralement les bibliothèques pour faire des WebSockets facilitent la tâche : on se connecte à l'adresse, on reçoit les messages dans un callback et on en envoie grâce à une méthode. Dans la plupart des langages je pense que ça tient en même pas 100 lignes, et si la bibliothèque a une doc un minimum bien faite, ça peut être fait vraiment vite, même si on n'y comprends pas grand chose.</p>
</blockquote>
<p>Ce n'est peut-être pas totalement faux, mais tu fais quoi :</p>
<ol>
<li>Des gens qui programment en C/C++ et qui auraient le niveau pour faire une IA mais qui sont complètement bloqués simplement parce que tu imposes les websockets, ou même les sockets TCP. Non je n'ai pas pris le C++ au hasard.</li>
<li>Des débutants en programmation qui n'ont peut-être jamais fait ou encore trop peu de programmation réseau</li>
</ol>
<p>Au risque de me répéter, il faut savoir qu'est-ce qu'on vise: réfléchir sur un jeu et apprendre à coder une IA, ou bien apprendre à faire des applications réseau avec des websocket ?</p>
<p>J'ai codé moi-même un client websocket en C++ et un serveur Java et sans bibliothèque externe. Ce n'est pas si compliqué que ça même si je me suis bien amusé à éplucher la doc du W3C, mais en même temps ça fait 15 ans que j'ai commencé à faire de la programmation en amateur.
Je pense à ceux qui veulent juste s'amuser et confronter leurs idées sans se prendre la tête. Et clairement, imposer les websockets, pour la plupart des participants probablement, c'est une prise de tête inutile dont ils se passeraient bien</p>
<p>Je me répète encore une fois, mais c'est le programme maître qui doit absorber toute la compexité de la communication. Les clients, eux, doivent être très simples du point de vue communication, et ne se concentrer que sur le coeur de leur métier: leur stratégie</p>
<blockquote>
<p>Je précise aussi qu'on a le droit de faire équipe, ce qui peut permettre par exemple de travailler avec quelqu'un qui s'y connaît en WebSockets si on y comprends rien.</p>
</blockquote>
<p>Les équipes c'est bien beau, mais mettre un trop « bon » avec un trop « mauvais », souvent, ça ne marche pas bien.
Dans le rôle du mauvais, on a intérêt à apprendre de plus fort que soi, mais si l'autre est trop fort, alors on le saoule plus qu'autre chose !</p>
<p>Autre gros problème ici avec ta proposition d'équipe: le mec qui s'y connaît en websocket, c'est un bouche trou ?
Tel que je l'imagine, ce qui risque de se passer c'est qu'une seule des deux personnes ne s'amuse réellement !
Soit on a quelqu'un qui s'en contrefout de l'IA, mais alors il ne prendra pas de plaisir à participer même avec quelqu'un d'autre.
Ou alors on a un mec qui est autant intéressé par les websockets que par l'IA, auquel cas il participera tout seul. Retour à la case départ.</p>
<blockquote>
<p>Tu proposes un challenge 'une IA de tarot' … je ne pense pas que ce soit raisonnable. Développer une IA de tarot à temps perdu le soir en sortant de la fac ou du boulot … Si quelqu'un sait faire ça, alors chapeau !</p>
</blockquote>
<p>Je ne pense pas non plus qu'il puisse y avoir une IA parfaite à ce genre de jeu; c'est sûrement le cas pour à peu près tous les jeux de cartes. IL y a trop de suppositions à faire sur qui possède quoi en fonction de ce qui a ou n'a pas été joué à un instant T.
Mais c'est ça qui est intéressant aussi. Un challenge sur le puissance 4 n'a au contraire plus grand intérêt, puisqu'on a déjà un algorithme imbattable et mathématiquement démontré que celui qui commence gagne.</p>
<p>J'ai aussi déjà fait une petite IA de tarot. Globalement elle est assez nulle et simple à battre, je ne suis pas du tout allé au fond de tout ce que j'aurais pu faire, mais elle a déjà joué 6000 parties contre des humains, donc elle ne doit quand même pas être si pourrie que ça.</p>
<blockquote>
<p>Sinon, il y a quand même une idée à tirer de tout ça, c'est le jeu en duplicate. Dans les compétitions de tarot ou de bridge, ou même de scrabble, les joueurs jouent en duplicate : en gros : la même distribution est jouée une fois par l'équipe A contre l'équipe B, et plus tard, par l'équipe B contre l'équipe A.</p>
</blockquote>
<p>Je mets un gros +1 à ça. C'est effectivement un très bon moyen de 1/avoir des parties reproductibles, 2/comparer et comprendre ce qui marche ou pas, et 3/juger impartialement la force d'une IA en évitant la part de hasard qu'il y a dans la distribution.
Ca pourrait effectivement très bien s'appliquer aux dominos, qui peuvent aussi se jouer en équipes d'ailleurs</p>Dominos !, message #1253322016-09-29T15:34:36+02:00Saroupille/@Saroupillehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=3#p125332<p>Ca dépend du langage utilisé aussi =) .</p>Dominos !, message #1253272016-09-29T15:12:15+02:00WinXaito/@WinXaitohttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125327<blockquote>
<p>Je précise aussi qu'on a le droit de faire équipe, ce qui peut permettre par exemple de travailler avec quelqu'un qui s'y connaît en WebSockets si on y comprends rien.</p>
</blockquote>
<p>Chouette, du coup si quelqu'un veut faire avec moi <img alt=":D" src="/static/smileys/heureux.png"> car la pour le coup je pense m'en sortir pour les websocket mais moins pour l'IA</p>
<p>Edit: Pour ma part j'ai déjà commencer en Java, mais je suis ouvert à d'autre langage. (C++, Python, etc.)</p>Dominos !, message #1253192016-09-29T13:35:22+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125319<blockquote>
<p>C'est faux, les sockets TCP sont en full duplex.</p>
</blockquote>
<p>Ah ben l'implémentation Vala doit être mal faite (c'est surtout que la doc est un peu pourrie en fait) parce que je n'ai pas trouvé comment faire.</p>
<figure><blockquote>
<p>Normalement dans un challenge comme ça, ce n'est pas aux participant de se faire ch### avec la communication, mais bien au programme maître. Être gêné par des problèmes d'I/O à la con en tant que participant ne donne pas envie d'aller jusqu'au bout. Je suis certain que les websockets en rebutent plus d'un, et même les sockets TCP normaux. Après à vous de voir quel public et quels buts vous visez mais à mon avis il est important de garder à l'esprit que c'est un challenge pour coder une IA, pas pour apprendre à faire du websocket.
</p>
</blockquote>
<figcaption><p><a href="https://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125269">QuentinC</a></p></figcaption></figure><p>Yep, je sais mais malheureusement Vala est très limité à ce niveau là, donc je n'ai pas trop eu le choix. <img alt=":(" src="/static/smileys/triste.png"> Mais bon, généralement les bibliothèques pour faire des WebSockets facilitent la tâche : on se connecte à l'adresse, on reçoit les messages dans un callback et on en envoie grâce à une méthode. Dans la plupart des langages je pense que ça tient en même pas 100 lignes, et si la bibliothèque a une doc un minimum bien faite, ça peut être fait vraiment vite, même si on n'y comprends pas grand chose. </p>
<p>Je précise aussi qu'on a le droit de faire équipe, ce qui peut permettre par exemple de travailler avec quelqu'un qui s'y connaît en WebSockets si on y comprends rien.</p>Dominos !, message #1252762016-09-28T22:11:53+02:00elegance/@elegancehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125276<p>@QuentinC
Tu aurais dû découper ton message en 4 ou 5 messages, un message par idée ; ça m'aurait permis de te mettre 4 ou 5 fois +1.</p>
<p>Tu parles de coder une IA sur le tarot. J'en profite pour rappeler ce <a href="https://zestedesavoir.com/contenus/beta/1363/jouer-au-tarot-en-defense-1/">tutoriel</a> que j'ai proposé, et qui est toujours en attente de validation <img alt=":)" src="/static/smileys/smile.png"></p>
<p>Tu proposes un challenge 'une IA de tarot' … je ne pense pas que ce soit raisonnable. Développer une IA de tarot à temps perdu le soir en sortant de la fac ou du boulot … Si quelqu'un sait faire ça, alors chapeau ! </p>
<p>Sinon, il y a quand même une idée à tirer de tout ça, c'est le jeu en duplicate. Dans les compétitions de tarot ou de bridge, ou même de scrabble, les joueurs jouent en duplicate : en gros : la même distribution est jouée une fois par l'équipe A contre l'équipe B, et plus tard, par l'équipe B contre l'équipe A.</p>
<p>Au niveau du programme 'MASTER' de dominos, cela peut être mis en place. Et au final, visualiser les 2 parties, en parallèle ; montrer à quel moment l'IA n°1 ne fait pas le même choix que l'IA n°2, etc etc …</p>Dominos !, message #1252692016-09-28T21:26:10+02:00QuentinC/@QuentinChttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125269<p>Bonsoir.</p>
<p>Je ne sais pas si j'aurais le temps d'inscrire une IA au concours, probablement pas, même si en fait j'en ai déjà écrit une de mon côté dans le cadre d'un projet que je mène depuis 6 ans, mais que je participe ou non au final, j'ai quand même envie d'apporter mon petit grain de sel.</p>
<p>Comme quelques avis précédents, je pense que si les dominos n'ont pas été vraiment étudiés, c'est principalement parce qu'il y a énormément de variantes dans les règles, parce qu'il n'existe pas un seul jeu de dominos, et parce qu'aucune combinaison de jeu et variante ne s'est spécialement imposée.
Le double-six à 28 pièces et 2 à 4 joueurs est la plus simple, mais on peut jouer avec des double-neuf et des double-douze; permettre ou non de dédoubler les chaînes quand on joue un double; obliger à jouer si on le peut; jouer avec des tas de variantes plus compliquées mais ô combien plus intéressantes comme le train mexicain, ou les dominos 2D ou en triangle…</p>
<p>L'avantage d'avoir choisi ce jeu c'est quand même qu'il n'y a pas déjà de route toute tracée pour coder une bonne IA.
Comme autre jeu intéressant à essayer, j'aurais bien proposé le tarot.</p>
<p>Sur la forme par contre: vouloir faire du websocket, c'est cool, c'est moderne ! Par contre ça ferme la porte à beaucoup plus de monde que ce que vous croyez.</p>
<p>Ce serait quand même beaucoup plus simple pour tout les participants si le programme maître faisait du classique stdin/stdout; ça a l'énorme avantage d'être universel, pour tous niveaux, tous langages, et accessoirement ça pourrait éviter qu'un petit malin essaie de pirater le serveur (on ne sait jamais, je sais pas vous mais moi personnellement je suis méfiant).
Bref ça ouvre le challenge à plus de monde, d'autant plus que sur un projet comme ça, on n'a pas envie de se prendre la tête avec de l'I/O ou une bibliothèque qu'on ne maîtrise pas bien, donc le protocole le plus simple sera le meilleur.</p>
<p>Ah, et, à part ça, évidemment qu'on doit pouvoir tourner les dominos. Sinon le jeu n'a absolument aucun intérêt.</p>
<p>Rajouts:</p>
<blockquote>
<p>Le problème des Sockets normales c'est qu'elles sont à sens unique. On reçoit ou on envoie.</p>
</blockquote>
<p>C'est faux, les sockets TCP sont en full duplex.</p>
<blockquote>
<p>Edit : Et du coup, je galère pas, mais toi oui !</p>
</blockquote>
<p>Normalement dans un challenge comme ça, ce n'est pas aux participant de se faire ch### avec la communication, mais bien au programme maître. Être gêné par des problèmes d'I/O à la con en tant que participant ne donne pas envie d'aller jusqu'au bout. Je suis certain que les websockets en rebutent plus d'un, et même les sockets TCP normaux. Après à vous de voir quel public et quels buts vous visez mais à mon avis il est important de garder à l'esprit que c'est un challenge pour coder une IA, pas pour apprendre à faire du websocket.</p>Dominos !, message #1252682016-09-28T21:22:03+02:00KFC/@KFChttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125268<p>Websocket c'est la vie. Il serait temps de massivement les utiliser. Du coup, je felicite l'auteur de les <strong>imposer</strong>, cela forcera les gens a les decouvrir. <img alt=":)" src="/static/smileys/smile.png"></p>Dominos !, message #1252662016-09-28T21:03:00+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125266<p>Le problème des Sockets normales c'est qu'elles sont à sens unique. On reçoit ou on envoie. Et donc parce que j'avais la flemme de gérer deux Sockets par joueur (surtout qu'en Vala la gestion des Sockets est assez bas-niveau et gaère <img alt=":p" src="/static/smileys/langue.png"> ), je me suis dit que les WebSockets, c'était quand même mieux.</p>
<p>Edit : Et du coup, je galère pas, mais toi oui ! <img alt=":diable:" src="/static/smileys/diable.png"></p>Dominos !, message #1252622016-09-28T19:30:45+02:00WinXaito/@WinXaitohttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125262<p>Cool ! Fais nous signe dès que tu as une version disponible que l'on puisse testé.</p>
<p>Par contre j'ai quand même une petite interrogation, pourquoi passer par des WebSockets ? Je trouve que ça aurait été plus simple avec des simples Socket, du moins il me semble.</p>
<p>Car par exemple, moi qui fais mon programme en Java, je dois passer par une librairie externe et c'est pas toujours évident.</p>Dominos !, message #1252442016-09-28T14:55:23+02:00anonyme/@anonymehttps://zestedesavoir.com/forums/sujet/6981/dominos/?page=2#p125244<p>Je viens d'améliorer le programme maître :</p>
<ul>
<li>La WebSocket est maintenant fermée à la fin de la partie ;</li>
<li>On sait qui a joué quoi, avec cette syntaxe : <code>other (Nom de l'adversaire) : commande jouée</code>.</li>
<li>On sait quelle « fonction » a renvoyé le message, avec la syntaxe proposée par WinXaito.</li>
</ul>
<p>Maintenant, je vais essayer de faire en sorte qu'on puisse retourner les dominos, ça serait quand même mieux. <img alt=":p" src="/static/smileys/langue.png"></p>