Classement final
+ ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | Nom | Score | WinRate | TieRate | Probabilité d'élimination | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | 1. SarcomaBotMk11 | 0.06333 | 6.13% | 0,41% | [42 24 10 8 6 4]% | | 2. WiseKickBot | 0.06189 | 5,91% | 0,56% | [51 12 7 10 7 6]% | | 3. StrikerBot | 0.05984 | 5,78% | 0,41% | [46 18 11 8 6 5]% | | 4. PerfectFractionBot | 0.05336 | 5,16% | 0,35% | [49 12 14 10 6 4]% | | 5. MehRanBot | 0,05012 | 4,81% | 0,41% | [57 12 8 7 6 5]% | | 6. OgBot | 0,04879 | 4,66% | 0,45% | [50 15 9 8 7 5]% | | 7. SnetchBot | 0,04616 | 4,48% | 0,28% | [41 29 8 9 5 3]% | | 8. AntiKickBot | 0.04458 | 4,24% | 0,44% | [20 38 17 10 6 4]% | | 9. MehBot | 0,03636 | 3,51% | 0,25% | [80 3 4 4 3 3]% | | 10. Meh20Bot | 0.03421 | 3,30% | 0,23% | [57 12 8 7 9 3]% | | 11. GenericBot | 0.03136 | 3,00% | 0,28% | [18 39 20 11 5 3]% | | 12. HardCodedBot | 0.02891 | 2,75% | 0,29% | [58 21 3 6 5 4]% | | 13. GangBot1 | 0,02797 | 2,64% | 0,32% | [20 31 35 6 3 2]% | | 14. SarcomaBotMk3 | 0,02794 | 2,62% | 0,34% | [16 15 38 17 7 4]% | | 15. GangBot0 | 0,02794 | 2,64% | 0,30% | [20 31 35 6 3 2]% | | 16. GangBot2 | 0,02770 | 2,62% | 0,31% | [20 31 35 6 3 2]% | | 17. TitTatBot | 0,02740 | 2,63% | 0,21% | [54 10 15 10 5 2]% | | 18. MataHari2Bot | 0,02611 | 2,35% | 0,51% | [39 26 11 11 6 5]% | | 19. PolyBot | 0.02545 | 2,41% | 0,27% | [53 18 6 13 5 3]% | | 20. SpitballBot | 0,02502 | 2,39% | 0,22% | [84 10 1 1 0 1]% | | 21. SquareUpBot | 0,02397 | 2,35% | 0,10% | [10 60 14 7 4 3]% | | 22. CautiousGamblerBot2 | 0,02250 | 2,19% | 0,13% | [60 18 10 5 3 1]% | | 23. Bot13 | 0.02205 | 2,15% | 0,11% | [90 0 2 3 2 1]% | | 24. AggroCalcBot | 0.01892 | 1,75% | 0,29% | [26 49 13 5 3 3]% | | 25. CautiousBot | 0,01629 | 1,56% | 0,14% | [15 41 27 11 4 1]% | | 26. CoastBotV2 | 0.01413 | 1,40% | 0,02% | [83 12 3 1 0 0]% | | 27. CalculatingBot | 0,01404 | 1,29% | 0,22% | [87 9 1 1 1 1]% | | 28. HalfPunchBot | 0,01241 | 1,15% | 0,18% | [47 20 13 12 5 2]% | | 29. HalflifeS3Bot | 0,01097 | 1,00% | 0,20% | [76 9 5 4 2 2]% | | 30. AntiGangBot | 0.00816 | 0,76% | 0,11% | [94 1 1 1 1 1]% | | 31. GeometricBot | 0.00776 | 0,74% | 0,07% | [19 46 25 7 2 1]% | | 32. GuessBot | 0.00719 | 0,05% | 1,34% | [65 17 4 6 5 3]% | | 33. BoundedRandomBot | 0.00622 | 0,60% | 0,05% | [42 39 12 5 2 0]% | | 34. SpreaderBot | 0.00549 | 0,54% | 0,02% | [32 43 19 4 1 0]% | | 35. DeterminBot | 0.00529 | 0,45% | 0,16% | [22 41 20 11 4 2]% | | 36. pourcentageBot | 0.00377 | 0,38% | 0,00% | [85 8 4 2 1 0]% | | 37. HalvsiestBot | 0.00337 | 0,29% | 0,08% | [32 43 15 6 2 1]% | | 38. GetAlongBot | 0.00330 | 0,33% | 0,01% | [76 18 4 1 0 0]% | | 39. BandaidBot | 0.00297 | 0,29% | 0,02% | [76 9 10 4 1 0]% | | 40. TENaciousBot | 0.00287 | 0,29% | 0,00% | [94 4 1 0 0 0]% | | 41. SurvivalistBot | 0.00275 | 0,25% | 0,04% | [92 6 1 0 0 0]% | | 42. RandomBot | 0.00170 | 0,13% | 0,07% | [42 36 14 5 2 1]% | | 43. AggressiveBoundedRandomBotV2 | 0.00165 | 0,14% | 0,06% | [8 46 34 9 2 1]% | | 44. BloodBot | 0.00155 | 0,01% | 0,30% | [65 28 5 1 1 0]% | | 45. OutBidBot | 0.00155 | 0,03% | 0,25% | [65 6 21 6 1 1]% | | 46. BoxBot | 0.00148 | 0,10% | 0,09% | [10 51 33 5 1 1]% | | 47. LastBot | 0.00116 | 0,08% | 0,07% | [74 6 16 2 1 0]% | | 48. UpYoursBot | 0.00088 | 0,07% | 0,03% | [37 40 17 5 1 0]% | | 49. AverageBot | 0.00073 | 0,06% | 0,03% | [74 3 10 10 2 0]% | | 50. PatheticBot | 0.00016 | 0,01% | 0,02% | [94 0 5 1 0 0]% | | 51. OverfittedBot | 0.00014 | 0,01% | 0,00% | [58 40 2 0 0 0]% | | 52. RobbieBot | 0.00009 | 0,01% | 0,00% | [32 41 24 2 0 0]% | | 53. WorstCaseBot | 0.00002 | 0,00% | 0,00% | [4 71 23 2 0 0]% | | 54. SmartBot | 0.00002 | 0,00% | 0,00% | [44 51 5 0 0 0]% | | 55. AAAAUpYoursBot | 0.00000 | 0,00% | 0,00% | [40 58 2 0 0 0]% | | 56. KickbanBot | 0.00000 | 0,00% | 0,00% | [67 32 1 0 0 0]% | | 57. OneShotBot | 0.00000 | 0,00% | 0,00% | [2 95 3 0 0 0]% | | 58. KickBot | 0.00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | | 59. KamikazeBot | 0.00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | | 60. MeanKickBot | 0.00000 | 0,00% | 0,00% | [100 0 0 0 0 0]% | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- +
Merci à tous ceux qui ont participé et félicitations à @Sarcome pour cette victoire!
Règles:
Tout le monde commence avec 100 ch. À chaque tour, deux joueurs sont choisis au hasard dans le groupe de concurrents qui n’ont pas encore participé à ce tour. Les deux joueurs choisissent un nombre compris entre 0 et leur CV actuel et les révèlent en même temps. Le joueur qui a choisi le nombre inférieur meurt immédiatement. L'autre joueur soustrait le nombre qu'ils ont choisi de la valeur restante et continue au tour suivant.
Le tournoi fonctionne comme ceci:
Parmi les participants, 2 sont choisis au hasard. Ils s'affrontent et l'un ou l'autre meurt. Un joueur meurt si:
- Ils choisissent un nombre inférieur à celui de leur adversaire
- Leur ch tombe à zéro ou moins
- Ils sont à égalité trois fois de suite avec leur adversaire
En cas d'égalité, les deux joueurs génèrent simplement de nouveaux numéros, jusqu'à 3 fois. Après la mise au jeu, le survivant (le cas échéant) est déplacé vers la piscine pour la ronde suivante et le processus se répète jusqu'à ce que nous ayons épuisé la piscine de la ronde actuelle. S'il y a un nombre impair dans la piscine, alors l'intrus passe au tour suivant gratuitement.
Votre tâche consiste à écrire une fonction dans python2.7 qui prend en entrée votre hp
offre actuelle , une liste de l’enchère de votre adversaire history
et un entier ties
vous indiquant le nombre de fois que vous avez déjà lié votre adversaire actuel, ainsi qu’un entier indiquant comment. beaucoup de bots sont encore alive
(y compris vous), et un nombre entier qui indique le nombre de bots au start
tournoi. Notez que l'historique n'inclut pas les liens. La fonction doit renvoyer un entier compris entre 0 et votre total de CV actuel. Quelques exemples simples, qui ignorent les liens, sont présentés ci-dessous:
def last(hp, history, ties, alive, start):
''' Bet a third of your hp at first, then bet your opponent's last bid, if possible '''
if history:
return np.minimum(hp-1, history[-1])
else:
return hp/3
def average(hp, history, ties, alive, start):
''' Bet the average opponent's bid so far, on the assumption that bids will tend downward '''
if history:
num = np.minimum(hp-1, int(np.average(history))+1)
else:
num = hp/2
return num
def random(hp, history, ties, alive, start):
''' DO YOU WANT TO LIVE FOREVER?! '''
return 1 + np.random.randint(0, hp)
Si votre fonction retourne un nombre supérieur à votre HP, il sera remis à 0. Oui, il est possible de se tuer. Votre fonction ne doit pas tenter d'accéder ou de modifier un membre d'un objet de la classe RouletteBot. Vous n'êtes pas autorisé à prendre des mesures qui identifient sans ambiguïté votre adversaire indépendamment de futurs robots supplémentaires. Il est permis d’inspecter la pile tant qu’il est théoriquement possible que plus d’un adversaire distinct ait pu produire les informations que l’on en tire, même s’il n’existe actuellement qu’un seul bot. En d'autres termes, vous ne pouvez pas simplement lire dans la pile pour voir quelle fonction ennemie a été appelée.
Selon ces règles, il est possible qu’il n’y ait pas de vainqueur et que les deux derniers concurrents s’entretuent. Dans ce cas, les deux finalistes obtiennent un demi-point chacun.
Ceci est ma première tentative de programmation, les critiques sont les bienvenues!
Le contrôleur peut être trouvé ici .
la source
Réponses:
BinaryBot
Est-ce que quelqu'un a déjà fait ça? Mises la moitié de sa santé à chaque tour.
SarcomaBot
Si la dernière bataille a offert HP - 1. Si c'est la première fois, une enchère plus un demi-HP plus un montant aléatoire supplémentaire allant jusqu’à un quart de HP. S'il parvient à battre un adversaire enchéri sur une offre après cet enchère, l'adversaire gagne + 1 PV. Si sa santé est inférieure à celle de l'adversaire, le montant au hasard est compris entre 75% et sa valeur actuelle - 1.
SarcomaBotMk2
Des modifications mineures tentent de réduire les dépenses de la vie.
SarcomaBotMk3
Mettre à jour le réglage fin
SarcomaBotMk4
SarcomaBotMk5
SarcomaBotMk6
SarcomaBotMk7
SarcomaBotMk8
SarcomaBotMk9
SarcomaBotMk10
Entrée finale
SarcomaBotMk11
Mise à jour de la
protection UpYoursBot ajoutée
Mise à jour de la
protection AntiAntiUpYoursBot ajoutée
Mettre à jour
AntiAnitAntiAntiUpYoursBot Je suis vaincu
la source
UpYours
Étant en retard pour entrer, j'ai passé un moment à admirer les robots existants, à compliquer un peu les idées de vos gars, puis à les simplifier. Puis il m'est venu
"Up Yours" parce que je vole sans vergogne (et, parfois, je pointe un ou deux points sur les offres de vos robots pour en augmenter un).
Mais pour de vrai, c'est une excellente compétition les gars. J'aime cette communauté des jours comme celui-ci.
la source
Kamikaze
Pourquoi s'embêter avec une logique compliquée quand on va tous mourir de toute façon ...
Un tir
Il va survivre au moins un tour s'il ne rencontre pas le kamikaze.
la source
Pathetic Bot obtient une mise à niveau indispensable:
La tentative pathétique d'un bot qui tente d'intégrer les fonctionnalités des autres robots
Ce bot incorpore les fonctionnalités de Survivalist Bot et Geometric Bot pour des traitements plus efficaces.
Pré-mise à niveau:
La tentative pathétique d'un bot qui analyse l'histoire de son adversaire
S'il y a des antécédents de son adversaire, il calcule alors la puissance de son adversaire. Ensuite, il effectue l'une des opérations suivantes:
S'il n'y a pas d'histoire, alors il effectue des calculs sophistiqués que j'ai piratés ensemble et enchérit. Si la valeur est supérieure à 100, il enchérit automatiquement son hp moins 1.
J'ai piraté ce code pendant le travail et c'est ma première soumission, donc il ne gagnera probablement pas ou quoi que ce soit, et il perdra face aux kamikazes.
EDIT: En raison de certaines suggestions, le comportement du bot au début a été modifié pour offrir une valeur plus élevée.
EDIT 2: ajout du paramètre start qui ne fait rien
EDIT 3: Ajout d'un nouveau robot dérivant:
[La tentative pathétique d'un bot qui attaque des Gang Bots (en plus de faire tout ce que le bot ci-dessus fait)] Supprimé
[Ce bot analyse si son adversaire est un gangbot ou non et prétend l'être aussi pour obtenir les offres les plus basses qu'il puisse surpasser facilement.]
Ce bot a été supprimé, veuillez le supprimer des classements.
EDIT 4: Erreurs corrigées, fonction de lien modifiée.
la source
opp_hp +1
manque un espace pour être pythonique; vos commentaires commencent par des quantités non équilibrées d'espaces. Enfin, votre fonction manque d'une docstring.Bot bot
Le choix sonore pour mon adversaire est de miser la moitié de sa vie. Ensuite, nous enchérissons jusqu'à la moitié de sa vie + 1 si nous ne pouvons pas le sortir avec une enchère solide, c'est une offre inférieure à la moitié de notre vie.
Le bot bot est évidemment la Némésis du bot bot!
Bot bot moyen
Ce nouveau KickBot est plus doux au premier tour, il sera donc plus fort lors des prochains rounds, c’est méchant!
Bot sage bot
Son frère a dû se suicider tous les deux mais WiseKickBot a appris de ceux qui étaient tombés au combat.
la source
Tat bot
Une tentative d’équivalent d’un bot tit-à-tat. Suppose que la plupart des paris sont approximativement les mêmes entre les tours. En utilisant cette hypothèse, il essaie de vaincre le bot ennemi tout en restant assez frugal. Dépense environ 40 points de vie au premier tour.
AntiAntiAntiAntiUpYoursBot
Une solution de contournement pour la protection anti-UpYours de SarcomaBot, reprenant l'essentiel de son code pour mon propre usage! Ou est-ce que je prends le code de UpYoursBot? Une question à méditer pendant que vous lisez mon bot ...
AntiAntiUpYours Bot a évolué pour devenir AntiAntiAntiAntiUpYours Bot! Maintenant, avec plus de singe-patcher.
Poly bot
Poly bot effectue une régression polynomiale sur l'historique de votre bot et bat légèrement le score prévu.
Bot chic
Classy bot a passé un bon moment, mais a décidé de se coucher tôt. Sommeil serré, bot chic.la source
1/2 Punch Bot, revisité
Je pense que ça va mourir assez vite. Ça vaut le coup. Fonction renommée, j'ai oublié de changer le nom ici.
La version revisitée est en hausse, meilleures chances de gagner (encore plus lors de la ronde finale) et légère protection contre les gang bots
Striker Bot
1/2 Punch Bot a trop été victime d'intimidation et est même devenu un laquais de UpYoursBot, alors son frère aîné, le StrikerBot , est venu l'aider.
Ce n'est pas si différent du 1/2 Punch optimisé, mais il est un peu plus intelligent et a bien réussi dans les manches que j'ai faites (10k et 35k, bien qu'il pourrait perdre contre KickbanBot)
La dernière version est terminée, le temps est écoulé. À moins que des surprises ne se manifestent, il devrait assurer la deuxième place, sinon le premier but (il y a une mince chance de battre kickbanbot)
la source
ceil
semble ne pas être définie.Gang Bot
L'idée était que potentiellement deux ou plus du bot pourraient être utilisés dans la même simulation. Le bot tente de donner des "gains faciles" aux autres robots du gang, en vérifiant si son historique est un multiple de 7 offres. Bien sûr, cela pourrait aussi être facilement manipulé par d'autres robots. Ensuite, je calcule une estimation des offres des bots ne faisant pas partie de gangs sur la base du ratio de mon état de santé sur le leur et de leur état de santé précédent sur leur enchère précédente, en ajoutant 1.
la source
Pire cas
Bot simple. Dans la
hp - hp / (start - alive + 4)
plupart des cas, les retours et, en cas d'égalité, l'augmentent de 2 (il en faut un!) Pour chaque égalité, en veillant à ne pas renvoyer de numéro par dessushp
.la source
alive==8
. Je peux modifier manuellement le nombre total de bot, mais cela élargit les règles car ce n'est pas une entrée pour votre fonction - vous savez si combien d'adversaires il vous reste à un moment donné, pas combien vous avez démarré.Surenchère
Bot tentera de faire une offre supérieure à celle de son adversaire, dans la mesure du possible.
la source
where np.random.randint(hp/5, hp/2)
peut échouer sihp/5 == hp/2
, c'est-à-dire sihp==0
ouhp==1
Spitball Bot
Elle juge quelle quantité de santé elle devrait sacrifier en fonction du nombre de robots restants. S'il ne reste plus que deux robots, il enchérira
hp-1
, mais s'il en reste trois, la moitié, quatre, un troisième, etc.Cependant, dans un très gros concours, je pense que je devrai miser plus de 3 ou 4 ch pour éviter de mourir au premier tour. J'ai donc fixé la limite inférieure à 10. Bien sûr, je ne miserai toujours pas plus que
hp-1
.Il ajoute également 1,5 cv pour les cravates, car je vois plusieurs bots "ajouter 1 cv pour les cravates". Je ne sais pas si cela compte pour la triche. Si c'est le cas, je le changerai.
Excellente idée, au fait!
Spitball Bot 2.0
Quoi de neuf?
Passage à la division par le nombre de tours restants au lieu du nombre de robots restants (Merci à @Heiteira!). En fait, je divise maintenant par ce nombre élevé de puissance
.8
, afin de charger un peu plus mes offres.Augmentation de l'enchère minimum de 10 à 20 (Merci @KBriggs!)
Insertion vérifie si l'enchère de spitball est au-dessus du PV actuel de l'adversaire, et l'abaissez si c'est le cas.
(SO ne rendra pas le code ci-dessous en tant que code, sauf si je mets du texte ici, alors OK)
la source
Géométrique
la source
Bot 13
Essayez de maximiser les gains avec le moins d’effort:
Pourquoi?
Essayez de tirer parti de la probabilité: gagner le premier tour en jouant le plus bas est la meilleure façon de commencer le tournoi. 13 semble être le bon choix: le deuxième tour est une victoire assurée, et le reste est un Spaziergang dans le parc.
la source
Devinez Bot
Première publication ici. Cela semblait très amusant, alors je soumets ma terrible tentative et je devine ce que les autres robots parieront.
Edit 1: Ajout d'un autre 1 au premier pari, simplement pour réduire le risque d'égalité avec d'autres personnes qui parient 51.
Edit 2: Stole Le coup d'envoi du Sarcoma bot puisqu'il avait de bonnes chances de ne pas être éliminé en premier.
Edit 3: Bot survit très bien au premier tour, mais il est facilement détruit à un stade ultérieur. Changement de la façon dont le robot pense au deuxième tour maintenant que les demi-parieurs sont morts dans l'eau.
Edit 4: Maintenant que le premier tour est bon, j'ai changé la façon dont il gère le second tour. Mourir beaucoup au second tour donc je dois survivre.
Sang bot
Fait un bot assoiffé à la recherche d'une tuerie. L'idée est d'essayer de gagner contre les bots à faible pari et qu'après le bain de sang du premier tour, il devrait être impossible de l'arrêter, car il devrait avoir des quantités énormes de HP pour surenchérir sur ses ennemis.
la source
meh_bot
Juste enchérir un peu plus de la moitié de ses CV
MehBot 20
mehRan
la source
Robbie Roulette
Ce bot effectue une analyse simple de l'historique du bot ennemi ou offre la moitié de ses points de vie restants, sinon
la source
Enchérissez plus le moins de concurrence que vous avez. Merci aux commentateurs d’avoir suggéré des améliorations.
la source
SurvivalistBot et HalvsiesBot
Merci d'avoir répondu à mes questions. Le résultat final est un bot plus complexe.
HalvsiesBot est un robot fantaisiste qui «passe juste la moitié» avec une chance sur 50/50 de gagner. Je suppose.
SurvivalistBot prend une série de décisions d'arborescence binaire if-else basées sur l'ensemble de données, y compris une dérogation sur une égalité (si elle atteint 2 liaisons, les kamikazes évitent la mort par triple liaison).
Mon python est un peu rouillé, le code peut donc être un peu buggé, alors n'hésitez pas à le corriger ou le mettre à jour.
Il a été conçu pour essayer de manipuler des données afin de déduire des informations telles que le nombre de HP restants, le nombre minimum de robots qu’il est susceptible de combattre, le nombre minimum de HP à quitter, les enchères moyennes. Il exploite également la randomisation dans des situations ambiguës, telles que des jeux d'ouverture ou des enchères optimales.
BoxBot
la source
Opponent_Average_Bid = Opponent_Remaining_HP / float(len(history)) ZeroDivisionError: float division by zero
. Cette ligne doit gérer le cas d’historique 0 longueur.else
,math.[func] -> np.[func]
et à un moment donné que vous utilisezLowest
où vous voulez direLowestBid
. Tous corrigés dans le contrôleur sur github et les scores mis à jour sous peu.Calcul Bot
Bot calculateur agressif
Anti Kick Bot
Si nous pouvons prédire les actions de l'adversaire, nous pouvons faire les paris optimaux! Si nous ne pouvons pas jouer (pas assez de données ou d’opposants, c’est trop aléatoire), nous pouvons au moins faire ce qui maximiserait notre potentiel de gain. Théoriquement, au moins la moitié des robots vivants mourront à chaque tour. Je peux donc m'attendre à ce qu'il y ait au plus log2 (en vie) rounds. Idéalement, nous répartirions notre CV uniformément entre tous les tours. Cependant, nous savons que certains robots seront stupides et se suicideront / mourront tôt, nous devrions donc miser un peu plus lors des tours précédents.
Agressif Calculating Le code de calcul de Bot modifié pour tenter de rester en vie en étant plus agressif, au détriment de la santé à long terme. Seules les simulations diront si le tempo ou la valeur l'emporte.
Anti Kick Bot devrait toujours battre le leader actuel KickBot: P
EDIT: Remplacé Déterministic Bot par Anti Kick Bot, un bot plus intelligent avec presque exactement les mêmes valeurs de retour. Également empêché de voter plus que les opposants HP
la source
return np.max(theoreticalBet, hp - 1): AxisError: axis 23 is out of bounds for array of dimension 0
. J'ai posté un lien vers le contrôleur afin que vous puissiez le tester.GenericBot
Il est vraiment tard ... je suis fatigué ... je ne trouve pas de nom ... et le format de ce bot est vraiment similaire aux autres, avec un algorithme légèrement différent étant donné l'historique. Il essaie d'obtenir le taux actuel de l'adversaire vers le jeu ... ou quelque chose comme ça ... zzz
la source
np.maximum
au lieu denp.max
, idem pourmin
HalflifeS3
la source
Coast Bot [À la retraite]
Je vais essayer de surmonter la concurrence en divisant équitablement sa puissance entre les rondes. Soumettra tout HP restant au premier tour pour se donner une meilleure chance de se qualifier pour les tours "côtes".
Coast Bot V2
Comme j'aime tellement ce défi, je devais créer un autre bot. Cette version sacrifie une partie de ses derniers chevaux en utilisant plus de chevaux dans les deux premiers tours.
Pourcentage Bot
Essaie de calculer le pourcentage moyen de dépenses que l'adversaire dépense en HP, et offre en conséquence.
la source
ConsistentBot
Mises le même montant à chaque tour. Il n’est pas très probable que les premiers tours survivent, mais s’il a la chance d’arriver au bout, il lui restera encore une quantité raisonnable de PV.
la source
Kickban Bot
Ce bot essaie simplement de contrer le leader actuel, Mean Kickbot, en le battant au premier tour et en jouant plus agressivement par la suite s’il le reconnaît.
la source
Trois-quart Bot
Il ne va pas battre MehBot ou SarcomaBot (s), mais je pense qu'il s'en sort plutôt bien. Quand j’ai vu le défi pour la première fois, c’était la première chose qui me vint à l’esprit: pariez toujours les trois quarts de votre santé à moins d’y avoir aucune raison de le faire.
* après le début du premier tour.
Quatre Sept Sept
Après le succès modéré de 3/4 bot, il y a une nouvelle fraction en ville, ce n'est que rationnel.
La fraction parfaite
Je suis entier
la source
BandaidBot
BandaidBot veut que tout le monde joue bien! Si son adversaire était gentil au dernier tour, il se sacrifiera pour inciter un comportement gentil chez les autres. Si son adversaire était méchant au dernier tour, il fera autant de dégâts que possible à son adversaire, en se sacrifiant si nécessaire. Il offre un tiers de ses CV s'il n'a pas d'historique à travailler. (J'espère que ce bot aura des effets d'entraînement intéressants sur d'autres stratégies, pas tellement que ce bot aura un taux de victoire élevé. Il pourrait être amusant d'avoir deux de ces stratégies en jeu)
GetAlongBot
GetAlongBot sera aussi agréable que nécessaire pour profiter de BandaidBot. Il retournera un peu moins du tiers de sa puissance à moins de pouvoir tuer son adversaire pour moins que cela. Si son adversaire ressemble à BandaidBot, il enchérira 2, sachant que BandaidBot enchérira 1 car GetAlongBot s'entend si bien avec tout le monde - une victoire facile tant que BandaidBot se trouve à l'autre bout.
la source
return np.random.randint(history[-1], hp/2): ValueError: low >= high
cette affaire doit être traitée d'une manière ou d'une autreBot TENacious
Ce bot tente de conserver sa valeur favorite de 10, mais il change parfois de choix s'il le faut pour briser l'égalité (avec sa valeur favorite doublée ou quadruplée) ou pour épargner en vue des prochains rounds, mais pas de manière optimale car il veut confondre et ne veut pas envisager d’enchérir à moins de 2 à tout moment, persuadé que c’est bien mieux que d’espérer que son adversaire enchérisse moins de 1, c’est-à-dire 0.
PS: ce bot peut avoir des problèmes stratégiques s’il ya plus de 2 ^ 9 robots.
la source
CautiousBot
Première soumission à la programmation Puzzles jamais! Vous avez trouvé votre défi assez intéressant: P
Si le dernier tour est un peu inférieur à HP, si aucun historique ne parie, un demi-HP plus une petite quantité aléatoire.
Si l'historique vérifie la puissance de l'adversaire et le nombre de rounds restants et tente de surenchérir sur l'adversaire hp / 2 en utilisant un tampon supplémentaire pouvant aller jusqu'à la fraction de hp restante divisé par le nombre de rounds restants (il essaie de conserver le hp restant d'une manière ou d'une autre pour les rounds postérieurs). . Vérifiez si vous dépensez trop de CV (ne vous tuez pas et ne faites pas plus que votre adversaire).
Corrigez toujours pour les liens comme les autres robots.
CautiousBot2
Trop agressif lors des premiers tours, CautiousBot devient de plus en plus prudent ...
la source
buffer_bet = np.random.randint(0, buffer) if buffer > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Notez que tampon est un mot clé en python, vous pouvez choisir un nom de variable différent.buff_bet = np.random.randint(0, buff) if buff > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Il semble que buff soit parfois un nombre à virgule flottante compris entre 0 et 1, qui est probablement attribué à 0 à l'intérieurrandint
. Cela fonctionne si vous lancezbuff
àint
avant l'appelceil
retourne unfloat
. A raté celui-là ... Ty encore: PBon, je vais essayer ma main à ceci.
SnetchBot
Vérifier les fractions de santé avec lesquelles l'adversaire s'est rendu. Si l'adversaire a été relancé, battez-le.
EDIT: perdre beaucoup au premier tour, ajusté les limites aléatoires du premier tour
la source
SquareUpBot
Il ne semblait pas que beaucoup de robots jouaient avec des pouvoirs au lieu de fractions, alors j'ai décidé d'en créer un, avec quelques optimisations standard et de voir où je placerais. Assez simpliste.
Essaie également de déterminer si le bot ennemi n'essaie pas d'utiliser une fraction constante, car puissances > fractions .
EDIT: Je suis un mannequin et mon détecteur de fraction ne pourrait pas fonctionner. Réparé maintenant.
la source