Endstand
+ ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | Name | Partitur | WinRate | TieRate | Eliminierungswahrscheinlichkeit | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- + | 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. PercentBot | 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]% | + ---------------------------------- + --------- + ---- ----- + --------- + ---------------------------- +
Vielen Dank für die Teilnahme und herzlichen Glückwunsch an @Sarcoma zum Sieg!
Regeln:
Jeder fängt mit 100 PS an. In jeder Runde werden 2 Spieler nach dem Zufallsprinzip aus dem Pool der Teilnehmer ausgewählt, die in dieser Runde noch nicht teilgenommen haben. Beide Spieler wählen eine Zahl zwischen 0 und ihrer aktuellen PS und decken diese Zahlen gleichzeitig auf. Der Spieler, der die niedrigere Zahl gewählt hat, stirbt sofort. Der andere Spieler subtrahiert die gewählte Zahl von seiner verbleibenden HP und geht in die nächste Runde.
Das Turnier funktioniert so:
Aus der Gruppe der Teilnehmer werden 2 zufällig ausgewählt. Sie stehen sich gegenüber und einer oder beide sterben. Ein Spieler stirbt, wenn:
- Sie wählen eine Nummer, die kleiner ist als die ihres Gegners
- Ihre PS fallen auf oder unter Null
- Sie treffen dreimal hintereinander auf ihren Gegner
Bei Gleichstand generieren beide Spieler einfach bis zu dreimal neue Zahlen. Nach dem Anspiel wird der Überlebende (falls vorhanden) für die nächste Runde in den Pool verschoben, und der Vorgang wird wiederholt, bis der Pool der aktuellen Runde erschöpft ist. Befindet sich eine ungerade Zahl im Pool, geht die ungerade umsonst in die nächste Runde.
Ihre Aufgabe ist es, eine Funktion in python2.7 zu schreiben, die Ihre aktuelle Zahl hp
, eine Liste der Gebote Ihres Gegners history
und eine Ganzzahl, ties
die angibt, wie oft Sie bereits mit Ihrem aktuellen Gegner verbunden sind, sowie eine Ganzzahl, die angibt, wie Es gibt noch viele Bots alive
(einschließlich Sie) und eine Ganzzahl, die die Anzahl der Bots zum Zeitpunkt start
des Turniers angibt . Beachten Sie, dass der Verlauf keine Bindungen enthält. Die Funktion muss eine Ganzzahl zwischen 0 und Ihrer aktuellen Gesamthöhe zurückgeben. Ein paar einfache Beispiele, die Bindungen ignorieren, sind unten gezeigt:
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)
Wenn Ihre Funktion eine Zahl zurückgibt, die größer als Ihre HP ist, wird sie auf 0 zurückgesetzt. Ja, Sie können sich selbst töten. Ihre Funktion darf nicht versuchen, auf ein Mitglied eines Objekts der RouletteBot-Klasse zuzugreifen oder dieses zu ändern. Sie dürfen keine Maßnahmen ergreifen, die Ihren Gegner eindeutig identifizieren, unabhängig von zukünftigen zusätzlichen Bots. Das Überprüfen des Stapels ist zulässig, solange es theoretisch möglich ist, dass mehr als ein einzelner Gegner die Informationen erzeugt hat, die Sie von ihm erhalten, selbst wenn derzeit nur ein Bot vorhanden ist, der dies könnte. Sie können also nicht einfach den Stapel durchlesen, um zu sehen, welche feindliche Funktion aufgerufen wurde.
Nach diesen Regeln ist es möglich, dass es keinen Gewinner gibt und die letzten beiden Teilnehmer sich gegenseitig töten. In diesem Fall erhalten beide Finalisten jeweils einen halben Punkt.
Dies ist mein erster Versuch, ein Puzzle zu programmieren. Kritik ist willkommen!
Die Steuerung finden Sie hier .
quelle
Antworten:
BinaryBot
Hat das schon jemand gemacht? Setzt die Hälfte seiner Gesundheit in jeder Runde auf den Boden.
SarcomaBot
Wenn der letzte Kampf HP bietet - 1. Wenn es der erste Kampf ist, bieten Sie eine halbe HP plus einen zusätzlichen Zufallsbetrag von bis zu einem Viertel HP. Wenn es ein Gegengebot nach diesem Gebot überbieten kann, erhält der Gegner HP + 1. Wenn es weniger Gesundheit als das Gegengebot hat, liegt der zufällige Betrag zwischen 75% und der aktuellen HP-1.
SarcomaBotMk2
Kleinere Optimierungen versuchen, den Lebensaufwand zu reduzieren.
SarcomaBotMk3
Feineinstellung aktualisieren
SarcomaBotMk4
SarcomaBotMk5
SarcomaBotMk6
SarcomaBotMk7
SarcomaBotMk8
SarcomaBotMk9
SarcomaBotMk10
Letzter Eintrag
SarcomaBotMk11
Update
UpYoursBot-Schutz hinzugefügt
Update
AntiAntiUpYoursBot-Schutz hinzugefügt
Update
AntiAnitAntiAntiUpYoursBot Ich bin besiegt
quelle
UpYours
Da ich mich verspätet habe, habe ich einige Zeit damit verbracht, die vorhandenen Bots zu bewundern, die Ideen Ihrer Jungs zu komplizieren und sie dann zu entschärfen. Dann kam es zu mir
"Up Yours", weil ich unverschämt klaue (und manchmal ein oder zwei Punkte auf die Gebote Ihrer Bots geheftet habe, um sie zu erhöhen).
Aber für den Ernstfall ist dies ein großartiger Wettbewerb. Ich liebe diese Community an solchen Tagen.
quelle
Kamikaze
Warum sich mit komplizierter Logik herumschlagen, wenn wir alle sowieso sterben werden?
Ein Schuss
Es wird mindestens eine Runde überleben, wenn es nicht auf die Kamikaze trifft.
quelle
Pathetic Bot bekommt ein dringend benötigtes Upgrade:
Der erbärmliche Versuch eines Bots, der versucht, die Funktionen anderer Bots einzubeziehen
Dieser Bot enthält Funktionen von Survivalist Bot und Geometric Bot für effizientere Bot-Takedowns.
Vor dem Upgrade:
Der erbärmliche Versuch eines Bots, der die Geschichte seines Gegners analysiert
Wenn es eine Vorgeschichte seines Gegners gibt, berechnet er die HP seines Gegners. Dann führt es eine der folgenden Aktionen aus:
Wenn es keine Geschichte gibt, werden einige ausgefallene Berechnungen durchgeführt, die ich zusammen gehackt habe und die geboten haben. Wenn der Wert 100 überschreitet, bietet er automatisch seine HP minus 1.
Ich habe diesen Code während der Arbeit zusammen gehackt und dies ist meine erste Vorlage, daher wird er wahrscheinlich weder gewinnen noch irgendetwas gewinnen und gegen die Kamikaze verlieren.
BEARBEITEN: Aufgrund einiger Vorschläge wurde das Startverhalten des Bots geändert, um einen höheren Wert zu bieten.
EDIT 2: Startparameter hinzugefügt, der nichts bewirkt
EDIT 3: Neuer Spinoff-Bot hinzugefügt:
[Der erbärmliche Versuch eines Bots, der Gang Bots angreift (und alles tut, was der obige Bot tut)] ENTFERNT
[Dieser Bot analysiert, ob sein Gegner ein Gangbot ist oder nicht und gibt vor, einer zu sein, um die süßen niedrigen Gebote zu erhalten, die er leicht übertreffen kann.]
Dieser Bot wurde verschrottet, bitte entfernen Sie ihn aus den Bestenlisten.
EDIT 4: Fehler behoben, Bindefunktion geändert.
quelle
opp_hp +1
fehlt ein Raum, um pythonisch zu sein; Ihre Kommentare beginnen mit unausgeglichenen Leerzeichen. Schließlich fehlt Ihrer Funktion ein Docstring.Kick Bot
Die gesunde Wahl für meinen Gegner ist, die Hälfte seines Lebens zu bieten. Dann bieten wir bis zur Hälfte seines Lebens + 1, wenn wir ihn nicht mit einem vernünftigen Gebot herausholen können, das ist ein Gebot, das kleiner als die Hälfte unseres Lebens ist.
Der Kick Bot ist offensichtlich die Nemesis des Punch Bot!
Mean Kick Bot
Dieser neue KickBot tritt in der ersten Runde weicher aus, nur damit er in den nächsten Runden härter treten kann, das ist gemein!
Wise Kick Bot
Sein Bruder musste sich beide umbringen, aber WiseKickBot lernte von seinen Gefallenen.
quelle
Tat bot
Ein Versuch, ein Äquivalent zu einem Tit-for-Tat-Bot zu finden. Angenommen, die meisten Wetten sind zwischen den Runden ungefähr gleich. Mit dieser Annahme versucht es, den feindlichen Bot zu besiegen und dabei ziemlich sparsam zu bleiben. Verbraucht ungefähr 40 Gesundheit in der Eröffnungsrunde.
AntiAntiAntiAntiUpYoursBot
Ein Workaround für SarcomaBots Anti-UpYours-Schutz, bei dem der größte Teil des Codes für mich selbst verwendet wird! Oder nehme ich den Code von UpYoursBot? Eine Frage zum Nachdenken, während Sie meinen Bot lesen ...
AntiAntiUpYours Bot hat sich zu AntiAntiAntiAntiUpYours Bot entwickelt! Jetzt mit mehr Affen-Patching.
Poly bot
Poly-Bot führt eine polynomielle Regression in der Geschichte Ihres Bots durch und übertrifft die vorhergesagte Punktzahl um einen kleinen Betrag.
Nobler Bot
Nobler Bot hat eine gute Zeit gehabt, aber hat sich dafür entschieden, früh zu Bett zu gehen. Schlaf gut, edler Bot.quelle
1/2 Punch Bot, überarbeitet
Ich denke, es wird ziemlich schnell sterben. Es ist es wert. Funktion umbenannt, vergessen dort den Namen zu ändern.
Die überarbeitete Version ist fertig, es gibt bessere Gewinnchancen (vor allem in der letzten Runde) und es gibt leichten Schutz vor Gang-Bots
Stürmer Bot
1/2 Punch Bot wurde zu sehr gemobbt und wurde sogar ein Lakai für den UpYoursBot, so dass sein älterer Bruder, der StrikerBot , kam, um zu helfen.
Kein großer Unterschied zum optimierten 1/2 Punch, aber er ist ein bisschen schlauer und hat sich in meinen Läufen gut geschlagen (10 km und 35 km, obwohl er möglicherweise gegen KickbanBot verliert).
Die letzte Version ist abgelaufen. Sofern nicht einige Überraschungen auftauchen, sollte es den zweiten Platz sichern, wenn es nicht den ersten gibt (es gibt eine geringe Chance, Kickbanbot zu besiegen).
quelle
ceil
scheint nicht definiert zu sein.Gang Bot
Die Idee war, dass möglicherweise zwei oder mehr der Bot in derselben Simulation verwendet werden könnten. Der Bot versucht, anderen Bots in der Gruppe "leichte Gewinne" zu geben, indem er prüft, ob sein Verlauf ein Vielfaches von 7 Geboten ist. Natürlich kann dies auch von anderen Bots leicht manipuliert werden. Dann berechne ich eine Schätzung für Gebote von Nicht-Gang-Bots basierend auf dem Verhältnis meiner Gesundheit zu ihrer und dem Verhältnis ihrer vorherigen Gesundheit zu ihrem vorherigen Gebot und addiere 1.
quelle
Schlimmsten Fall
Einfacher Bot. Gibt
hp - hp / (start - alive + 4)
in den meisten Fällen zurück und erhöht im Falle von Unentschieden den Wert für jedes Unentschieden um 2 (muss um eins erhöht werden!)hp
.quelle
alive==8
. Ich kann es manuell in die Gesamtzahl der Bot ändern, aber es ist eine Überlastung der Regeln, da dies keine Eingabe für Ihre Funktion ist - Sie wissen nur, ob Sie zu einem bestimmten Zeitpunkt noch so viele Gegner übrig haben, und nicht, gegen wie viele Sie gestartet sind.Überbieter
Bot wird versuchen , höher zu bieten als sein Gegner kann bieten , soweit möglich.
quelle
where np.random.randint(hp/5, hp/2)
die fehlschlagen kannhp/5 == hp/2
, dh ifhp==0
oderhp==1
Spitball Bot
Beurteilt anhand der Anzahl der verbleibenden Bots, wie viel von ihrer Gesundheit sie opfern sollte. Wenn nur noch zwei Bots übrig sind, wird geboten
hp-1
, wenn jedoch noch drei übrig sind, werden die Hälfte, vier übrig, ein Drittel usw. geboten.In einem sehr großen Wettbewerb muss ich jedoch mehr als 3 oder 4 PS bieten, um zu vermeiden, dass ich in der ersten Runde sterbe. Deshalb habe ich eine Untergrenze von 10 festgelegt. Natürlich werde ich immer noch nie mehr bieten als
hp-1
.Es fügt auch 1,5 PS für Krawatten hinzu, da ich mehrere "Add 1 PS für Krawatten" -Bots sehe. Ich bin mir nicht sicher, ob das als Betrug gilt. Wenn ja, werde ich es ändern.
Tolle Idee übrigens!
Spitball Bot 2.0
Was gibt's Neues?
Auf Teilen durch die Anzahl der verbleibenden Runden anstatt der Anzahl der verbleibenden Bots umgestellt (Danke an @Heiteira!). Tatsächlich dividiere ich jetzt durch diese Zahl, die an die Macht gebracht wurde
.8
, um meine Gebote ein bisschen mehr vorab zu laden.Erhöhtes Mindestgebot von 10 auf 20 (Danke @KBriggs!)
Eingefügte Überprüfung, ob das Spitball-Gebot über den aktuellen HP des Gegners liegt, und ggf. Reduzierung.
(SO wird der unten stehende Code nicht als Code gerendert, es sei denn, ich füge hier Text ein, also OK)
quelle
Geometrisch
quelle
Bot 13
Versuchen Sie, Gewinne mit dem geringsten Aufwand zu maximieren:
Warum?
Versuche die Wahrscheinlichkeit auszunutzen: Die erste Runde zu gewinnen, indem du niedrig spielst, ist der beste Weg, um das Turnier zu starten. 13 scheint der Sweet Spot zu sein: Die zweite Runde ist ein sicherer Sieg, und der Rest ist ein Spaziergang im Park.
quelle
Ratet mal, Bot
Zum ersten Mal hier posten. Das sah nach einer Menge Spaß aus, also reiche ich meinen überaus schrecklichen Versuch ein und rate, was die anderen Bots wetten werden.
Edit 1: Der ersten Wette wurde eine weitere 1 hinzugefügt, um die Wahrscheinlichkeit eines Gleichstands mit anderen Spielern zu verringern, die 51 setzen.
Edit 2: Hat den Eröffnungszug des Sarkom-Bots gestohlen, da die Wahrscheinlichkeit groß war, dass er nicht immer zuerst eliminiert wurde.
Edit 3: Bot überlebt in der ersten Runde sehr gut, wird aber später leicht zerstört. Die Art und Weise, wie der Roboter an die zweite Runde denkt, wurde geändert, da die Halbbetter jetzt tot im Wasser sind.
Edit 4: Jetzt, da die erste Runde gut ist, habe ich die Art und Weise geändert, wie die zweite Runde gehandhabt wird. In der zweiten Runde viel gestorben, also muss ich irgendwie überleben.
Blood Bot
Machte einen durstigen Bot auf der Suche nach einem Kill. Die Idee ist, zu versuchen, gegen Bots mit niedrigen Einsätzen zu gewinnen, und sobald das Blutbad der ersten Runde überschritten ist, sollte es nicht mehr aufzuhalten sein, da es gewaltige Mengen an HP haben sollte, um Gegner zu überbieten.
quelle
meh_bot
Bieten Sie einfach etwas mehr als die Hälfte seiner PS
MehBot 20
mehRan
quelle
Robbie Roulette
Dieser Bot analysiert auf einfache Weise die Geschichte des feindlichen Bots oder bietet die Hälfte der verbleibenden Trefferpunkte
quelle
Bieten Sie höher, je weniger Konkurrenz Sie haben. Vielen Dank an die Kommentatoren für die Verbesserungsvorschläge.
quelle
SurvivalistBot und HalvsiesBot
Vielen Dank für die Beantwortung meiner Fragen. Das Endergebnis ist ein komplexerer Bot.
HalvsiesBot ist ein skurriler "nur die Hälfte weitergeben" -Bot mit einer 50/50-Gewinnchance. Ich vermute.
SurvivalistBot trifft eine Reihe von binären Baum-If-else-Entscheidungen basierend auf dem Datensatz, einschließlich eines Overrides bei einem Gleichstand (wenn es 2 Gleichstände trifft, wird es mit Kamikazes behandelt, um den Tod von Dreifachgleichständen zu vermeiden).
Meine Python ist etwas verrostet, daher ist der Code möglicherweise etwas fehlerhaft. Sie können ihn also jederzeit korrigieren oder aktualisieren.
Es wurde entwickelt, um zu versuchen, Datenbits zu ermitteln, um daraus zu schließen, wie viel HP noch übrig ist, wie viele Bots es voraussichtlich mindestens geben wird, wie viel HP mindestens noch übrig ist und wie hoch die durchschnittlichen Gebote sind. Es nutzt auch die Randomisierung in mehrdeutigen Situationen aus, z. B. beim Öffnen von Spielen oder bei Problemen mit optimalen Geboten.
BoxBot
quelle
Opponent_Average_Bid = Opponent_Remaining_HP / float(len(history)) ZeroDivisionError: float division by zero
. Diese Zeile muss den Verlaufsfall der Länge 0 behandeln.else
,math.[func] -> np.[func]
und an einer Stelle verwenden Sie,Lowest
wo Sie meinenLowestBid
. Alle im Controller auf Github behoben und die Ergebnisse in Kürze aktualisiert.Berechnung von Bot
Aggressiver Rechenbot
Anti Kick Bot
Wenn wir die Aktionen des Gegners vorhersagen können, können wir die optimalen Einsätze machen! Wenn wir nicht können (nicht genug Daten oder der Gegner ist zu zufällig), können wir zumindest das tun, was unser Gewinnpotential maximieren würde. Theoretisch stirbt in jeder Runde mindestens die Hälfte der lebenden Bots. Daher kann ich davon ausgehen, dass es höchstens log2 (lebendige) Runden gibt. Im Idealfall würden wir unsere PS gleichmäßig auf alle Runden verteilen. Wir wissen jedoch, dass einige Bots dumm sind und frühzeitig sterben werden, daher sollten wir in den früheren Runden etwas mehr setzen.
Aggressives Berechnen des Bots-Codes Berechnen des Bots-Codes, um zu versuchen, am Leben zu bleiben, indem man aggressiver ist, auf Kosten der langfristigen Gesundheit. Nur Simulationen zeigen, ob Tempo oder Wert gewinnen.
Anti Kick Bot sollte immer den aktuellen Anführer KickBot: P schlagen
EDIT: Deterministischer Bot durch Anti-Kick-Bot ersetzt, ein intelligenterer Bot mit fast genau den gleichen Rückgabewerten. Auch verhinderte die Abstimmung mehr als die Gegner HP
quelle
return np.max(theoreticalBet, hp - 1): AxisError: axis 23 is out of bounds for array of dimension 0
. Ich habe einen Link zum Controller gepostet, damit Sie ihn testen können.GenericBot
Es ist wirklich spät ... ich bin müde ... kann mir keinen Namen vorstellen ... und das Format dieses Bots ist wirklich ähnlich wie bei anderen, nur mit einem etwas anderen Algorithmus in der Vorgeschichte. Es versucht, die aktuelle Rate zu ermitteln, die der Gegner zum Spielen neigt ... oder so ähnlich ... zzz
quelle
np.maximum
anstelle von verwendennp.max
, das gleiche fürmin
HalflifeS3
quelle
Coast Bot [im Ruhestand]
Werde versuchen, den Wettbewerb zu meistern, indem du die PS gleichmäßig auf die Runden verteilst. Bietet in der ersten Runde übrig gebliebene PS, um sich eine bessere Chance zu geben, in die "küstentauglichen" Runden zu kommen.
Coast Bot V2
Da mir diese Herausforderung so gut gefällt, musste ich einfach einen anderen Bot machen. In dieser Version wird ein Teil der später auslaufenden PS geopfert, indem in den ersten beiden Runden mehr PS verbraucht werden.
Prozent Bot
Versucht, die durchschnittlichen prozentualen PS-Ausgaben des Gegners zu berechnen, und bietet darauf basierend.
quelle
ConsistentBot
Setzt in jeder Runde den gleichen Betrag. Es ist nicht sehr wahrscheinlich, dass er die ersten Runden überlebt. Wenn er jedoch das Glück hat, das Ende zu erreichen, sollte noch eine angemessene Menge HP übrig sein.
quelle
Kickban Bot
Dieser Bot versucht einfach, dem aktuellen Anführer Mean Kickbot entgegenzuwirken, indem er ihn in Runde eins schlägt und danach aggressiver spielt, wenn er ihn erkennt.
quelle
Dreiviertel-Bot
Er wird weder MehBot noch SarcomaBot (s) schlagen, aber ich denke, er macht es ziemlich gut. Als ich die Herausforderung zum ersten Mal sah, war dies das erste, was mir in den Sinn kam. Wetten Sie immer auf drei Viertel Ihrer Gesundheit, es sei denn, es gibt keinen Grund dazu.
* Nach dem Low-Balling der ersten Runde.
Vier-Siebtel-Bot
Nach dem mäßigen Erfolg von 3/4 bot gibt es eine neue Fraktion in der Stadt, es ist nur rational.
Die perfekte Fraktion
Ich bin ganz
quelle
BandaidBot
BandaidBot möchte, dass alle nett spielen! Wenn sein Gegner in der letzten Runde nett war, wird er sich selbst opfern, um Anreize für nettes Verhalten bei anderen zu schaffen. Wenn sein Gegner in der letzten Runde gemein war, fügt er seinem Gegner so viel Schaden wie möglich zu und opfert sich gegebenenfalls selbst. Es bietet ein Drittel seiner PS, wenn es keine Geschichte hat, mit der es arbeiten kann. (Ich hoffe, dass dieser Bot interessante Welligkeitseffekte auf andere Strategien hat, nicht so sehr, dass dieser Bot selbst eine hohe Gewinnrate hat. Es könnte Spaß machen, ein paar davon im Spiel zu haben.)
GetAlongBot
GetAlongBot wird genauso schön sein, wie es sein muss, um BandaidBot zu nutzen. Es wird knapp ein Drittel seiner PS zurückgeben, es sei denn, es kann seinen Gegner für weniger als das töten. Wenn sein Gegner wie BandaidBot aussieht, bietet er 2, in dem Wissen, dass BandaidBot 1 bietet, weil GetAlongBot mit allen anderen so gut zurechtkommt - ein einfacher Gewinn, solange es wirklich BandaidBot war.
quelle
return np.random.randint(history[-1], hp/2): ValueError: low >= high
Dieser Fall muss irgendwie behandelt werdenNervöser Bot
Dieser Bot versucht, seinen Lieblingswert von 10 beizubehalten, ändert jedoch gelegentlich seine Auswahl, um ein Unentschieden zu lösen (wobei sich sein Lieblingswert verdoppelt oder vervierfacht) oder für zukünftige Runden zu speichern, jedoch nicht um den optimalen Betrag, weil er verwirren möchte Gegner und es möchte nicht in Betracht ziehen, zu jedem Zeitpunkt weniger als 2 zu bieten, da es davon überzeugt ist, dass es viel besser ist, als zu hoffen, dass der Gegner weniger als 1, dh 0, bietet.
PS: Dieser Bot kann strategische Probleme haben, wenn es mehr als 2 ^ 9 Bots gibt.
quelle
CautiousBot
Erste Einreichung bei Programming Puzzles! Fanden Sie Ihre Herausforderung sehr interessant: P
Wenn die letzte Runde eins weniger als PS ist, wenn in der Vergangenheit keine Wette mit einer halben PS plus einem kleinen Zufallsbetrag abgeschlossen wurde.
Wenn der Verlauf des Gegners HP und die Anzahl der verbleibenden Runden überprüft und versucht, den Gegner HP / 2 mit einem zusätzlichen Puffer von bis zu dem Bruchteil der verbleibenden HP geteilt durch die Anzahl der verbleibenden Runden zu überbieten (es wird versucht, die verbleibenden HP für hintere Runden irgendwie zu konservieren). . Überprüfen Sie, ob Sie zu viel PS verbrauchen (töten Sie sich nicht und bieten Sie nicht mehr, als Ihr Gegner kann).
Korrigieren Sie Krawatten immer wie andere Bots.
CautiousBot2
Zu aggressiv in den ersten Runden, jetzt wird CautiousBot noch vorsichtiger ...
quelle
buffer_bet = np.random.randint(0, buffer) if buffer > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Beachten Sie, dass buffer ein Schlüsselwort in Python ist. Möglicherweise möchten Sie einen anderen Variablennamen auswählen.buff_bet = np.random.randint(0, buff) if buff > 0 else 0 File "mtrand.pyx", line 993, in mtrand.RandomState.randint ValueError: low >= high
. Es scheint, dass Buff manchmal eine Gleitkommazahl zwischen 0 und 1 ist, die vermutlich im Inneren auf 0 gesetzt wirdrandint
. Dies funktioniert , wenn Sie werfenbuff
aufint
vor dem Aufrufceil
zurückgibtfloat
. Das habe ich verpasst ... Ty nochmal: POkay, ich werde mich bemühen.
SnetchBot
Überprüfung der Gesundheitsanteile, mit denen der Gegner gereist ist. Wenn der Gegner erhöht hat, schlagen Sie ihn dazu.
BEARBEITEN: In der ersten Runde viel verlieren, die Zufallsgrenzen für die erste Runde angepasst
quelle
SquareUpBot
Es schien nicht so, als würden viele Bots mit Kräften statt mit Brüchen spielen, also habe ich beschlossen, einen mit einigen Standardoptimierungen zu machen und zu sehen, wo ich platzieren werde. Ganz simpel.
Versucht auch festzustellen, ob der feindliche Bot nicht versucht, einen konstanten Bruch zu verwenden, da Kräfte > Brüche .
EDIT: Ich bin ein Dummy und mein Fraktionsdetektor konnte nicht funktionieren. Jetzt repariert.
quelle