Dans mon école, notre professeur tient un rocher, du papier, des ciseaux Bot compétition. Je sais comment programmer en Python, mais je ne sais pas comment programmer un bot qui aurait une plus grande chance de succès que celui qui sélectionne au hasard ses armes. Je pense qu'il est possible de stocker tous les mouvements précédents, puis de rechercher des modèles afin de défier les attaques. Est-ce que je vais dans une bonne direction? Des idées? P>
4 Réponses :
Si vous jouez contre les humains, vous êtes sur la bonne voie. Stocker les mouvements précédents est la clé. Voici deux articles qui vous prouveront utiles. Comment gagner au rock, papier, ciseaux . Et l'entrée de Wikipedia sur Stratégie et algorithmes . P>
+1 pour de bons liens. Le lien Wiki a même des suggestions d'algorithme concrètes.
Il est prouvé que les ciseaux de papier rock-papier qu'un bot aléatoire Chaque fois que c'est votre tour: choisir quel bot a gagné jusqu'à présent le plus fort> [gourmand] - et l'utiliser. p>
Utilisation de cette approche que vous êtes
Donc, je Créez un ensemble de robots forts>, chacun calculant une heuristique et fonctionnant en arrière-plan parallèle. Pour chaque tour, chaque bot va pratiquement "dessiner" et vérifiera s'il avait gagné ou perdu - s'il aurait joué ce tour. Chaque bot gardera une trace sur le nombre de jeux qu'il aurait gagné s'il y aurait joué et combien cela aurait perdu.
Un de ces bots sera l'attaquant aléatoire. P>
Pouvez-vous fournir un lien ou une source?
@Rikp.: Pouvez-vous être plus précis, source à quoi? Cet algorithme? Le fait qu'un bot aléatoire soit à la médiane? [Je ne me souviens pas d'où je l'ai lu - mais il est facile de prouver].
Désolé, je propose la déclaration statistique. Souhaitez-vous expliquer (à court terme évidemment) comment le prouveriez-vous?
@Rikp.: Supposons que chaque match conciste des rondes. Un bot aléatoire est évidemment gagnant, perdant et dessinant 1/3 des tours du jeu EAH [1/3 de chacun]. Ainsi, il gagnera gagner la moitié des jeux qu'il participe. Comme il s'agit d'un jeu de somme zéro [un gagnant, d'un perdant]: le score total du bot aléatoire à l'infini va résumer jusqu'à 0, qui est la médiane des scores [à nouveau, car il s'agit d'un jeu de somme zéro]. Il y a plus de détails mathématiques à faire, mais c'est l'idée principale de la preuve.
Cela ne fonctionnera pas nécessairement, car votre adversaire choisit probablement ses mouvements en fonction de l'histoire de votre bot de jeu. Donc, votre bot fait ses mouvements basé sur l'histoire de son adversaire, mais votre adversaire fait ses mouvements en fonction de votre propre histoire. Les deux côtés peuvent essayer de doubler - deviner le prochain mouvement de l'adversaire. Donc, vous ne pouvez pas nécessairement remplacer dans un bot différent qui «gagné» à l'arrière-plan et être garanti.
@CRAIGMCQUEEN: Aucune approche ne garantit le succès. Cette approche est une solution gourmande, visant à faire mieux que le bot aléatoire - mais ne pire jamais alors. Et je crois que ça le fait. Cette approche peut réellement vous dire - vous ne serez pas le pire joueur! Et la beauté de cela: il peut être combiné à toute autre heuristique: ajoutez simplement chaque nouvelle heuristique comme un autre bot de fond!
Où pourrait être un profit potentiel pour tenter de déterminer les stratégies des autres bots, par exemple, si c'est une participation forcée, il y aura un étudiant paresseux qui constitue un bot qui vomirait toujours des ciseaux. p>
Je propose une autre stratégie (j'en ai entendu parler sur une concurrence similaire, mais je ne peux plus suivre la source), supposons que vous puissiez laisser plusieurs bots à courir (sinon, coopérer avec certains de vos camarades de classe pour courir cela stratégie). p>
Disons que vous avez 4 robots A, B, C, D P>
Imaginez chaque bot joue 100 fois contre les autres. Laissez vos bots B, C, D jouer pour la première fois, disons 10 fois jouer une stratégie qui le laisserait le reconnaître comme un bot de votre équipe, disons «RPSPPSSRS», laissez votre bot jouer une autre stratégie qui le laisserait reconnaître par les robots b, c, d. p>
Puis, dans le prochain tour, laissez les robots b, c, d perdre («papier») à l'A et jouer au hasard contre les autres. Laissez le bot une victoire («ciseaux») du B, C, D et de jouer au hasard contre les autres. P>
Ainsi, le bot A obtient un énorme avantage. P>
@Janl: Qu'est-ce qui n'est pas exactement une option?
Janl, je pense que vous êtes mal compris. Max vous recommande d'avoir un bot, avec quatre "sous-bots". La commutation entre les "sous-bots" serait programmée dans le code de votre bot.
Je crois que mon interprétation est correcte. Si je me trompe, veuillez expliquer
@Janl: Pourriez-vous expliquer pourquoi à votre avis, cette stratégie n'est pas une option? Pour quelle raison?
Je ne peux pas avoir plus de bots et mes camarades de classe ne sont pas autorisés à aider en aucune façon.
Le site de la programmation des ciseaux de papier de roche contient un grand nombre de programmes concurrents (ils sont même écrits en python ). p>
S'il s'agit de votre affectation scolaire, il peut être considéré comme tricher, car toutes les sources soumises sont publiquement disponibles. Mais encore une fois, ils sont également à la disposition des autres étudiants. P>
Les bots jouent-ils d'autres bots? Tous les modèles qui existent avec le jeu humain seraient psychologiques; Je pense qu'un ordinateur ne ferait que jouer au hasard.
Il y a quelques liens pertinents dans la barre latérale "liée" et sur CodeGolf.se Nous ne I> avez-vous Rho Sham Bo (bien que ce soit une bonne idée), mais j'ai Une question sur le dilemme de prisonnier itéré Où vous pouvez voir des approches de Simple i> AI coding pour un jeu compétitif.
Si votre adversaire choisit (vraiment) choisir au hasard des mouvements, il n'y a pas de stratégie qui gagnera plus souvent que de choisir au hasard.
@Mikechristensen: Je pense que cela dépend de la façon dont ils seront programmés et vous ne pouvez pas savoir qu'un priori
@Mikechristensen Oui, des bots se battent d'autres robots.
Le jeu typiquement aléatoire est une position d'automne arrière pour quand vous êtes battu, comme il propose un étage.
@Janl - Cela semble à la peine de lire: dan.regnor.name/iocaine.html
@Peter qui n'est pas tout à fait correct. Par exemple, la «stratégie» de toujours choisir Rock gagnerait aussi souvent. Commee, en fait, toute stratégie que vous pouvez rêver.
@Mikechristensen Votre commentaire est vraiment utile, merci.