Dominos !

Connectez les tous !

a marqué ce sujet comme résolu.

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.

Chouette, du coup si quelqu'un veut faire avec moi :D car la pour le coup je pense m'en sortir pour les websocket mais moins pour l'IA

Edit: Pour ma part j'ai déjà commencer en Java, mais je suis ouvert à d'autre langage. (C++, Python, etc.)

+0 -0

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.

Ce n'est peut-être pas totalement faux, mais tu fais quoi :

  1. 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.
  2. Des débutants en programmation qui n'ont peut-être jamais fait ou encore trop peu de programmation réseau

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 ?

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

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

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.

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 !

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.

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 !

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.

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.

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.

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

+4 -0

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.

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.

+0 -0

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…

Je n'avance pas très vite, mais j'ai l'impression d'être le seul à avancer !

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 :

  • les points marqués sont N = le cumul des chiffres des dominos qui restent en jeu.

  • Si un joueur pose tous ses dominos, il marque ce nombre de points N.

  • 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.

A suivre.

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). :)

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.

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.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte