Exemple d'exécution ajouté le 4/11
Clarification des règles 4/8: Toutes les soumissions concourront dans un tournoi géant gratuit pour tous comprenant autant de matchs que mon ordinateur peut effectuer en 48 heures.
Quiconque a passé du temps à regarder des flux sur Twitch est conscient de la prévalence de DeepBot et est peut-être même familier avec son jeu de paris Bank Heist . Ce tournoi King of the Hill est directement inspiré de ce jeu. Mais ne vous inquiétez pas. Je pense que j'ai jeté assez de plis supplémentaires dans cette version pour garder les choses intéressantes.
Un exemple rapide
#####GAME 13: 16 players######
Round 1:
gunHeCK bet 0.
PassivePanga bet 69.
SnitcherKing bet 1.
Lurker bet 0.
OC'sRandomTpyos bet 1.
MonisAddiction bet 69.
RaysFive01K bet 28.
LimeadeSneaktar bet 1.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
HeCKuSumer bet 185.
Round 2
HeCKuSumer decided to !guncheck.
LimeadeSneaktar decided to double cross.
MonisAddiction decided to all in.
OC'sRandomTpyos decided to acquire intel.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
PassivePanga decided to !guncheck.
Results
PassivePanga failed. :(
SnitcherKing failed. :(
OC'sRandomTpyos was successful, and may gain ¥0
MonisAddiction failed. :(
RaysFive01K was successful, and may gain ¥0
LimeadeSneaktar was successful, and may gain ¥1
HeCKuSumer failed. :(
Results:
0. KaylorrCriterion: 3600
1. Lurker: 3600
2. gunHeCK: 3600
3. SnitcherKing: 3586
4. PassivePanga: 2634
5. LimeadeSneaktar: 2496
6. HeCKuSumer: 1909
7. HardHatUmar: 490
8. RaysFive01K: 255
9. OC'sRandomTpyos: 170
10. MonisAddiction: 0
(In this round, 7 players joined the heist, but the dice only rolled right for 3 of them. Of those, only LimeadeSneaktar brought any home--having stolen it from OcsRandomTpyos. RaysFive01K won significantly more, but deposited it all at the bank before leaving. At this point, the players who did not heist are doing well, living off their day jobs.)
#####GAME 14: 231 players######
Round 1:
Lurker bet 0.
HeCKuSumer bet 190.
KaylorrCriterion bet 0.
HardHatUmar bet 0.
MonisAddiction bet 0.
OC'sRandomTpyos bet 1.
gunHeCK bet 0.
LimeadeSneaktar bet 1.
RaysFive01K bet 25.
PassivePanga bet 69.
SnitcherKing bet 1.
Round 2
PassivePanga decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
HeCKuSumer decided to !guncheck.
SnitcherKing decided to finger.
RaysFive01K decided to deposit.
LimeadeSneaktar decided to double cross.
Results
HeCKuSumer failed. :(
OC'sRandomTpyos failed. :(
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
PassivePanga failed. :(
SnitcherKing failed. :(
Results:
0. KaylorrCriterion: 3840
1. Lurker: 3840
2. gunHeCK: 3840
3. SnitcherKing: 3825
4. PassivePanga: 2805
5. LimeadeSneaktar: 2495
6. HeCKuSumer: 1959
7. HardHatUmar: 490
8. MonisAddiction: 240
9. RaysFive01K: 229
10. OC'sRandomTpyos: 161
Six players heisted--but should have been paying more attention to the rabble and backed out, because the probabilities dropped too low to win, and all failed.
#####GAME 15: 300 players######
Round 1:
OC'sRandomTpyos bet 1.
Lurker bet 0.
SnitcherKing bet 1.
MonisAddiction bet 69.
LimeadeSneaktar bet 1.
gunHeCK bet 0.
HardHatUmar bet 0.
RaysFive01K bet 22.
KaylorrCriterion bet 0.
HeCKuSumer bet 195.
PassivePanga bet 69.
Round 2
HeCKuSumer decided to !guncheck.
OC'sRandomTpyos decided to buy guard.
MonisAddiction decided to all in.
PassivePanga decided to !guncheck.
LimeadeSneaktar decided to double cross.
RaysFive01K decided to deposit.
SnitcherKing decided to finger.
Results
OC'sRandomTpyos failed. :(
SnitcherKing failed. :(
MonisAddiction was successful, and may gain ¥0
LimeadeSneaktar failed. :(
RaysFive01K failed. :(
HeCKuSumer failed. :(
PassivePanga failed. :(
And here, the probabilities dropped too low to win again--except for MonisAddiction, who went all in, and therefore avoided the probability modification incurred by the rabble backing out. No winnings are listed here, because a player who wins going all in immediately adds all winnings to its holdings without any possible modification by other players' actions.
Regles du jeu
Tournoi / Structure du jeu
- Le tournoi consistera en un certain nombre de jeux choisis uniformément au hasard entre 1000 et 1100, dans lesquels chaque soumission sérieuse concourra simultanément dans un tournoi gratuit pour tous.
- Chaque joueur commence le premier jeu avec 240 crédits et chaque jeu suivant avec le nombre de crédits qu'il avait à la fin du jeu précédent.
- Chaque jeu se déroule en 2 tours, et à chaque tour, les joueurs sont appelés dans un ordre déterminé uniformément au hasard pour prendre une décision:
- Au premier tour, un joueur peut payer n'importe quel nombre entier de crédits entre 0 et ses avoirs de crédit actuels pour miser la participation à un braquage de banque.
- Au deuxième tour, chaque joueur qui a choisi de participer au hold-up en misant au moins un crédit (ci-après dénommé "heisters") peut décider de laisser son pari rouler (et, ce faisant, éventuellement effectuer une autre action), désactivez le braquage ou faites tapis. (Ces options sont décrites plus en détail ci-dessous.)
- En fonction du nombre d'historiens et du nombre total de crédits qu'ils ont payés, l'une des cinq banques est sélectionnée pour organiser un casse. Cette sélection affecte la probabilité individuelle de victoire et les chances de déterminer le paiement. (Les banques sont décrites ci-dessous.)
- Chaque héritier qui ne s'est pas désengagé gagnera, avec la probabilité (modifiée) de la banque, sa mise multipliée par les cotes (modifiées) de la banque (arrondie vers le bas), ou bien perdra sa mise. Notez que le succès ou l'échec de chaque joueur est déterminé individuellement - certains réussiront là où d'autres échoueront.
- Tous les joueurs, qu'ils aient participé ou non, ont réussi ou échoué, puis reçoivent un chèque de règlement (avec les exceptions décrites ci-dessous).
- Notez qu'il est impossible de quitter définitivement le jeu. Au pire, un joueur peut devoir attendre une partie pour recevoir son prochain chèque de paie.
- Après tous les matchs 1000-1100, le joueur avec le plus grand nombre de crédits sera déclaré vainqueur de ce tournoi.
- Le tournoi sera répété un nombre indéterminé de fois (autant qu'il est possible de le calculer en 48 heures) et les gains des joueurs de tous les tournois seront additionnés afin de déterminer le vainqueur général de ce concours.
Le deuxième tour de paris
- Tout joueur qui a misé une mise positive au premier tour peut participer au deuxième tour.
- Dans ce tour, un joueur peut:
- répondez avec la chaîne "back out" pour annuler sa mise. Cela mettra son pari à zéro pour le casse actuel et diminuera également légèrement la probabilité que les joueurs restant dans le casse réussissent. En prenant cette option, un joueur renonce au chèque de paie de 240 crédits qui suit le casse comme punition pour avoir mis les héritiers restants en danger. (Les héritiers restants réussiront avec une probabilité égale à la probabilité de la banque multipliée par la fraction des héritiers qui n'ont pas "reculé".)
- répondre avec la chaîne "all in" pour faire exploser l'intégralité de ses avoirs de crédit - et contracter un prêt sur salaire sur son prochain chèque de paie de 240 crédits - pour acheter tous les meilleurs équipements et informations pour un braquage et y aller seul, les armes à feu flamboyantes, sans compter sur n'importe qui. La probabilité de victoire d'un tel joueur ne peut pas être affectée par le fait que d'autres héritiers abandonnent le cambriolage, et ses gains ne peuvent pas être volés par des double-crossers. Les gains gagnés seront déterminés comme si son pari était la totalité de ses avoirs de crédit plus 240, tandis que la perte mettrait ses avoirs à zéro.
- Répondez avec n'importe quelle autre chaîne (y compris la chaîne vide) afin de vous en tenir à la mise précédente et de terminer le casse normalement. (Réponse recommandée: "! Guncheck"). Certaines réponses auront des effets secondaires supplémentaires:
- Une réponse de "changement de travail" entraînera le joueur à quitter son travail. À partir de ce tour, à la fin de chaque tour, le joueur aura 5% de chances d'être embauché dans une nouvelle position. Si cela réussit, le joueur est embauché et reçoit immédiatement son premier chèque de paie. Chaque nouvel emploi est garanti de payer exactement 5% de plus que le dernier (arrondi vers le bas). Cette action réussira, que le braquage réussisse ou non.
- Une réponse "acquérir des informations" entraînera, si le casse réussit, le joueur à dépenser tous ses gains de ce casse pour obtenir un 0,00001 supplémentaire par crédit ainsi dépensé sur les cotes de la banque qui a été tenue pour ce joueur uniquement . Cette modification de cotes est permanente. Par exemple, si un joueur choisit cette action en casquant la banque 1 et gagne 6969 crédits dans un coup, les chances de la banque 1 pour ce joueur seront augmentées de façon permanente de 0,06969 et le joueur ne recevra rien de ce coup.
- Une réponse de "acheter un garde" amènera le joueur à acheter l'un des gardes de sécurité de la banque que vous avez cédée. En échange d'une réduction permanente de 1 crédit sur le chèque de paie de ce joueur (le pot-de-vin habituel du gardien), le joueur recevra une probabilité de victoire accrue "permanente" dans cette banque (car le garde "oublie de mentionner" ce joueur aux flics quand a demandé). La probabilité augmentera d'exactement 1% de la différence entre la probabilité de victoire actuelle du joueur dans cette banque et 100%. Cette action réussira même si le braquage échoue. NOTE: Si à tout moment, un joueur n'a pas assez de crédits pour payer tous ses pots-de-vin de garde, il perd immédiatement et "définitivement" autant de bonus de probabilité que le nombre de pots-de-vin qui n'ont pas pu être payés,
- Une réponse de "dépôt", si le casse réussit, laissera l'intégralité des gains d'un joueur dans un compte à la banque cédée. Les crédits ne seront accessibles à aucune fin et ne seront pas comptés dans le score d'un joueur tant qu'ils ne seront pas retirés. Ce compte paiera des intérêts au taux de 0,14% par match.
- Une réponse de "retrait" ajoutera, si le casse réussit, aux gains d'un joueur l'intégralité du contenu de son compte auprès de la banque cédée. Le compte sera alors mis à zéro. Notez que ces gains supplémentaires peuvent être volés par des double-crossers.
- Une réponse de "double croix" fera deux choses:
- Si le nombre d'historiens qui ont joué "double croix" est au plus de 1 / 10ème (arrondi vers le bas) du nombre total d'histoires non-racistes qui ont décidé de passer par le hold-up (ou exactement un s'il y a moins de 10 de ces joueurs) ), le joueur recevra des gains supplémentaires égaux au total des gains de tous les non-doubles-croisés divisé par le nombre de doubles-croisés (arrondi vers le bas). Tous les non-double-crossers dans ce cas reçoivent 0 crédit du casse. En d'autres termes, les double-crossers volent les crédits de tous les autres et le répartissent également entre eux.
- Si le nombre d'historiens qui ont joué "double croix" dépasse le seuil, le joueur ne recevra aucun gain (si son casse a réussi), verra son chèque de paie divisé par deux et sera renvoyé de son travail. (Voir «changer d'emploi».) Dans ce cas, tous les non-double-crossers (y compris la populace) recevront un paiement de bonus du total des gains de tous les double-cross divisé par le nombre total de non-double-crossers. En d'autres termes, la conspiration est devenue trop grande pour garder un secret, les conspirateurs ont été extirpés et exclus du cambriolage, et tout le monde a divisé leurs enjeux pour la punition - et leur réputation de sales coups leur a également fait perdre leur emploi.
- Une réponse de "doigt" (comme dans "doigter un rat scélérat à double croisement") donnera, si le braquage réussit, au joueur huit opportunités (tirant uniformément avec remplacement de l'ensemble des héritiers non racistes) d'identifier un double- croiseur qui n'a pas déjà été ainsi identifié .
- Chaque double-croiseur identifié de cette façon paiera immédiatement le doigté 25% de ses avoirs de crédit actuels (arrondis vers le bas) au lieu d'être abattu, perdra son emploi et verra son chèque de paie réduit de moitié (car le patron ne tolérera pas les mauvais comportements) , et perd 5% de sa probabilité de victoire à la banque en train d'être cambriolé (car les autres héritiers sont très méfiants à l'avenir et susceptibles de le jeter sous le bus si les choses deviennent velues). Les doubles croisements identifiés de cette façon n'affectent pas la réussite du double croisement pour d'autres doubles, mais ils ne reçoivent aucun des crédits volés du double croisement, et lesdits crédits volés seront redistribués aux non traverseurs doubles.
- Si aucun double-croiseur n'est identifié de cette façon, le vif d'or obtiendra des points de suture pour perdre le temps de tout le monde - et paiera également la moitié de ses gains du cambriolage actuel, réduira de 5% son salaire (le patron coupe les heures du tattletale) et perdra 5% de ses cotes de paris à la banque actuelle (car les autres héritiers sont moins susceptibles d'être généreux / justes avec leurs gains à l'avenir). La moitié de ses gains ainsi perdus sera distribuée aux double-crossers sans doigts si les double-crossers réussissent, ou aux non-double-crossers (y compris la racaille) si les double-crossers échouent.
Les banques
La banque est sélectionnée à l'aide de l'indice numheisters + int(totalamountbet/100000)
, où numheisters est le nombre de joueurs qui ont misé une mise positive au tour 1 et totalamountbet est la somme des mises de tous ces joueurs. En d'autres termes, cent mille crédits équivalent à un héritier supplémentaire. Sur la base de cet indice, l'une des banques suivantes sera choisie, la banque avec le seuil le plus élevé que l'indice atteint ou dépasse:
Bank Index Threshold Victory Prob. Bet Odds
---- --------------- ------------- --------
0:Municipal 0 0.540 0.80
1:City 20 0.488 1.10
2:State 40 0.425 1.30
3:National 60 0.387 1.65
4:Federal Reserve 80 0.324 1.95
Notez qu'au fur et à mesure qu'un tournoi se poursuit, la probabilité d'atteindre le niveau de banque le plus élevé augmentera, car le montant que chaque joueur peut miser tend à augmenter. Notez également que ce ne sont que des cotes et des probabilités initiales , avant qu'elles aient été modifiées par des actions "acquérir des informations" ou "acheter un gardien". Avec les probabilités et les cotes initiales, seules la City et les banques nationales s'attendent à des gains supérieurs aux pertes attendues.
The Rabble
- Le tournoi contient également 500 autres joueurs, appelés les "canailles", qui participent en tant que joueurs réguliers aux cambriolages mais ne sont pas marqués au final. Celles-ci servent à rendre chaque jeu différent et quelque peu moins prévisible, et permettent d'atteindre les banques les plus risquées / les plus rémunératrices même avec seulement quelques «vrais» joueurs.
- Chaque jeu comprendra un sous-ensemble de racaille à participer choisi de manière uniforme au hasard sur tous les sous-ensembles de racaille.
- Tous les canailles utilisent la stratégie suivante:
- Choisissez au hasard de parier avec une probabilité égale à la probabilité de réussir à la banque qui serait sélectionnée en fonction des décisions des joueurs qui ont déjà pris leur décision ce tour .
- Si vous misez un montant différent de zéro, choisissez le plus grand des montants suivants qui ne dépasserait pas ses avoirs actuels: 69, 420, 6969, 80085.
- Au deuxième tour, "reculez" avec une probabilité égale à 5% plus 50% de la proportion de parieurs qui ont déjà fait marche arrière, sinon cédez comme d'habitude. (Notez que cela signifie que les premiers joueurs du deuxième tour qui reculent peuvent avoir d'énormes effets en cascade parmi la populace - faites attention et soyez prêt à ce que le braquage s'effondre avant même qu'il ne commence.)
Entrées et sorties
Dans les deux tours, les programmes recevront les informations suivantes, dans cet ordre exactement , comme arguments de ligne de commande . Sauf indication contraire, toutes les valeurs sont des entiers ne contenant aucune décimale.
- Le numéro de jeu actuel (indexé zéro)
- Le numéro du tour de la partie en cours (1 ou 2)
- Le nombre de joueurs dans le jeu en cours (y compris la racaille).
- Le nombre de joueurs qui ont déjà pris leur tour ce tour.
- Le nombre d'histoires qui ont jusqu'à présent engagé un enjeu positif. (Au deuxième tour, ce sera en fait le nombre total d'histoires qui ont adhéré au premier tour.)
- Le nombre total de crédits investis jusqu'à présent. (Dans le second tour, ce sera effectivement le nombre total de crédits investis au premier tour - en particulier, il ne comprend plus que les enjeux initiaux de « all in » heisters et ne comprend les enjeux de « reculer » héritiers.)
- Le nombre d'histoires qui ont confirmé au deuxième tour (c'est-à-dire qui n'ont pas "reculé"). Ce sera zéro lors du premier tour.
- Le numéro (indexé à zéro) de la banque à céder (au premier tour, la banque qui serait cédée si personne d'autre ne pari)
- Le nombre de crédits actuellement disponibles pour le joueur.
- Le nombre de crédits misés par le joueur au premier tour. (C'est toujours zéro au premier tour.)
- Le nombre de crédits que le joueur recevra sur son salaire à la fin de chaque partie.
- 1 si le joueur reçoit actuellement un chèque de paie, 0 si le joueur est au chômage
- Classement du joueur au classement (hors canaille) à la fin de la partie précédente, indexé 1. (Défini comme 1 + le nombre de joueurs avec strictement plus de crédits à ce moment-là. Par exemple, lors du premier match, tous les joueurs ont le rang 1.)
- Le nombre moyen de crédits détenus par tous les joueurs (sans compter la racaille) (représenté par un nombre décimal)
- L'écart absolu moyen dans le nombre de crédits détenus par tous les joueurs (sans compter la racaille) (représenté par un nombre décimal)
- Le nombre maximum de crédits détenus par n'importe quel joueur (c'est-à-dire le nombre de crédits détenus par un joueur de rang 1, sans compter la racaille)
- Le nombre de crédits que le joueur a stockés dans le compte de la banque 0
- Compte bancaire 1
- Compte bancaire 2
- Compte bancaire 3
- Compte bancaire 4
- Probabilité individuelle de victoire du joueur à la banque 0
- Probabilité de la banque 1
- Probabilité de la banque 2
- Probabilité de la banque 3
- Probabilité de la banque 4
- Les chances de paiement individuelles du joueur en cas de succès dans la banque 0
- Cotes de la banque 1
- Cotes de la banque 2
- Banque 3 cotes
- Banque 4 cotes
Au premier tour d'une partie, un programme de joueur doit imprimer pour afficher un entier compris entre 0 et le nombre total de crédits dans le compte de ce joueur. Tout montant de pari supérieur au solde créditeur disponible est considéré comme un pari maximum. Toute autre sortie (ou condition d'erreur) sera interprétée comme un pari zéro.
Au deuxième tour d'un jeu, un programme de joueur doit imprimer pour stdout une chaîne comme décrit dans la section "Le deuxième tour de paris" ci-dessus. Une condition d'erreur ici est considérée comme l'action par défaut: poursuivre le braquage comme d'habitude.
Manette
Le tournoi se déroulera à l'aide de ce contrôleur . Des exemples de robots là aussi. Toujours en cours de test. Plus de code à venir. N'hésitez pas à soumettre des corrections de bugs (sur github). Sera mis à jour si des règles changent également.
Pour organiser un seul tournoi sur votre propre machine, ajoutez une ligne à competers.txt puis utilisez:
python bankheist.py 1000
Règlement du concours
- Les joueurs peuvent soumettre n'importe quel nombre de programmes de joueur dans n'importe quelle langue librement disponible dont les programmes peuvent recevoir des arguments de ligne de commande.
- Les soumissions doivent inclure des instructions assez explicites sur la façon de compiler des programmes et de les exécuter sur mon PC, y compris les noms des outils nécessaires et les commandes exactes à émettre. La soumission doit inclure au moins une commande qui exécute le programme et peut avoir des arguments de ligne de commande qui lui sont directement ajoutés.
- Les soumissions doivent également avoir un nom unique pour les identifier (qui ne contient aucun espace).
- Les programmes doivent s'exécuter dans un délai raisonnablement court. (Je ne fixe pas de limite supérieure à ce qui constitue raisonnable. Au lieu de cela, je conseillerai simplement le créateur toute entrée qui semble avoir un temps d'exécution hors normes pour l'accélérer.)
- Les programmes peuvent ne pas lire ou écrire dans les fichiers. Ils ne peuvent pas non plus utiliser une autre méthode de stockage des informations entre les exécutions. Le but de ce défi est de prendre des décisions complexes sur la base d'informations limitées / résumées.
- Toutes ces règles peuvent être modifiées à tout moment si nécessaire. Un message sera ajouté en haut de ce message indiquant de telles modifications.
- Ce concours se termine au plus tôt une semaine après que le dernier utilisateur a soumis sa première soumission . Les modifications des soumissions existantes sont autorisées à tout moment jusqu'à la fin du concours. Je ferai de mon mieux pour maintenir la date limite actuelle à jour dans un message en haut de cet article.
- Ce concours se termine au plus tôt une semaine après la dernière modification des règles, le cas échéant. Je ferai de mon mieux pour laisser des commentaires aux utilisateurs concernés par les modifications de règles.
- Vous feriez mieux de parier que je participerai moi-même à ce concours. ;)