Neueste Bestenliste @ 2014-08-02 12:00
| Pos # | Author | Name | Language | Score | Win | Draw | Loss | Avg. Dec. Time |
+-------+----------------------+-------------------------+------------+-------+-------+-------+-------+----------------+
| 1st | Emil | Pony | Python2 | 064 | 064 | 000 | 005 | 0026.87 ms |
| 2nd | Roy van Rijn | Gazzr | Java | 062 | 062 | 001 | 006 | 0067.30 ms |
| 2nd | Emil | Dienstag | Python2 | 062 | 062 | 001 | 006 | 0022.19 ms |
| 4th | ovenror | TobiasFuenke | Python2 | 061 | 061 | 001 | 007 | 0026.89 ms |
| 5th | PhiNotPi | BayesianBot | Perl | 060 | 060 | 000 | 009 | 0009.27 ms |
| 6th | Claudiu | SuperMarkov | Python2 | 058 | 058 | 001 | 010 | 0026.77 ms |
| 7th | histocrat | Alternator | Ruby | 057 | 057 | 001 | 011 | 0038.53 ms |
| 8th | histocrat | LeonardShelby | Ruby | 053 | 053 | 000 | 016 | 0038.55 ms |
| 9th | Stretch Maniac | SmarterBot | Java | 051 | 051 | 002 | 016 | 0070.02 ms |
| 9th | Martin Büttner | Markov | Ruby | 051 | 051 | 003 | 015 | 0038.45 ms |
| 11th | histocrat | BartBot | Ruby | 049 | 049 | 001 | 019 | 0038.54 ms |
| 11th | kaine | ExcitingishBot | Java | 049 | 049 | 001 | 019 | 0065.87 ms |
| 13th | Thaylon | UniformBot | Ruby | 047 | 047 | 001 | 021 | 0038.61 ms |
| 14th | Carlos Martinez | EasyGame | Java | 046 | 046 | 002 | 021 | 0066.44 ms |
| 15th | Stretch Maniac | SmartBot | Java | 045 | 045 | 001 | 023 | 0068.65 ms |
| 16th | Docopoper | RoboticOboeBotOboeTuner | Python2 | 044 | 044 | 000 | 025 | 0156.55 ms |
| 17th | Qwix | Analyst | Java | 043 | 043 | 001 | 025 | 0069.06 ms |
| 18th | histocrat | Analogizer | Ruby | 042 | 042 | 000 | 027 | 0038.58 ms |
| 18th | Thaylon | Naan | Ruby | 042 | 042 | 004 | 023 | 0038.48 ms |
| 20th | Thaylon | NitPicker | Ruby | 041 | 041 | 000 | 028 | 0046.21 ms |
| 20th | bitpwner | AlgorithmBot | Python2 | 041 | 041 | 001 | 027 | 0025.34 ms |
| 22nd | histocrat | WereVulcan | Ruby | 040 | 040 | 003 | 026 | 0038.41 ms |
| 22nd | Ourous | QQ | Cobra | 040 | 040 | 003 | 026 | 0089.33 ms |
| 24th | Stranjyr | RelaxedBot | Python2 | 039 | 039 | 001 | 029 | 0025.40 ms |
| 25th | JoshDM | SelfLoathingBot | Java | 038 | 038 | 001 | 030 | 0068.75 ms |
| 25th | Ourous | Q | Cobra | 038 | 038 | 001 | 030 | 0094.04 ms |
| 25th | Ourous | DejaQ | Cobra | 038 | 038 | 001 | 030 | 0078.31 ms |
| 28th | Luis Mars | Botzinga | Java | 037 | 037 | 002 | 030 | 0066.36 ms |
| 29th | kaine | BoringBot | Java | 035 | 035 | 000 | 034 | 0066.16 ms |
| 29th | Docopoper | OboeBeater | Python2 | 035 | 035 | 002 | 032 | 0021.92 ms |
| 29th | Thaylon | NaanViolence | Ruby | 035 | 035 | 003 | 031 | 0038.46 ms |
| 32nd | Martin Büttner | SlowLizard | Ruby | 034 | 034 | 004 | 031 | 0038.32 ms |
| 33rd | Kyle Kanos | ViolentBot | Python3 | 033 | 033 | 001 | 035 | 0032.42 ms |
| 34th | HuddleWolf | HuddleWolfTheConqueror | .NET | 032 | 032 | 001 | 036 | 0029.86 ms |
| 34th | Milo | DogeBotv2 | Java | 032 | 032 | 000 | 037 | 0066.74 ms |
| 34th | Timmy | DynamicBot | Python3 | 032 | 032 | 001 | 036 | 0036.81 ms |
| 34th | mccannf | YAARBot | JS | 032 | 032 | 002 | 035 | 0100.12 ms |
| 38th | Stranjyr | ToddlerProof | Java | 031 | 031 | 010 | 028 | 0066.10 ms |
| 38th | NonFunctional User2..| IHaveNoIdeaWhatImDoing | Lisp | 031 | 031 | 002 | 036 | 0036.26 ms |
| 38th | john smith | RAMBOBot | PHP | 031 | 031 | 002 | 036 | 0014.53 ms |
| 41st | EoinC | SimpleRandomBot | .NET | 030 | 030 | 005 | 034 | 0015.68 ms |
| 41st | Martin Büttner | FairBot | Ruby | 030 | 030 | 006 | 033 | 0038.23 ms |
| 41st | Docopoper | OboeOboeBeater | Python2 | 030 | 030 | 006 | 033 | 0021.93 ms |
| 44th | undergroundmonorail | TheGamblersBrother | Python2 | 029 | 029 | 000 | 040 | 0025.55 ms |
| 45th | DrJPepper | MonadBot | Haskel | 028 | 028 | 002 | 039 | 0008.23 ms |
| 46th | Josef E. | OneBehind | Java | 027 | 027 | 007 | 035 | 0065.87 ms |
| 47th | Ourous | GitGudBot | Cobra | 025 | 025 | 001 | 043 | 0053.35 ms |
| 48th | ProgramFOX | Echo | .NET | 024 | 024 | 004 | 041 | 0014.81 ms |
| 48th | JoshDM | SelfHatingBot | Java | 024 | 024 | 005 | 040 | 0068.88 ms |
| 48th | Trimsty | Herpetologist | Python3 | 024 | 024 | 002 | 043 | 0036.93 ms |
| 51st | Milo | DogeBot | Java | 022 | 022 | 001 | 046 | 0067.86 ms |
| 51st | William Barbosa | StarWarsFan | Ruby | 022 | 022 | 002 | 045 | 0038.48 ms |
| 51st | Martin Büttner | ConservativeBot | Ruby | 022 | 022 | 001 | 046 | 0038.25 ms |
| 51st | killmous | MAWBRBot | Perl | 022 | 022 | 000 | 047 | 0016.30 ms |
| 55th | Mikey Mouse | LizardsRule | .NET | 020 | 020 | 007 | 042 | 0015.10 ms |
| 55th | ja72 | BlindForesight | .NET | 020 | 020 | 001 | 048 | 0024.05 ms |
| 57th | robotik | Evolver | Lua | 019 | 019 | 001 | 049 | 0008.19 ms |
| 58th | Kyle Kanos | LexicographicBot | Python3 | 018 | 018 | 003 | 048 | 0036.93 ms |
| 58th | William Barbosa | BarneyStinson | Lua | 018 | 018 | 005 | 046 | 0005.11 ms |
| 60th | Dr R Dizzle | BartSimpson | Ruby | 017 | 017 | 001 | 051 | 0038.22 ms |
| 60th | jmite | IocainePowder | Ruby | 017 | 017 | 003 | 049 | 0038.50 ms |
| 60th | ArcticanAudio | SpockOrRock | PHP | 017 | 017 | 001 | 051 | 0014.19 ms |
| 60th | Dr R Dizzle | BetterLisaSimpson | Ruby | 017 | 017 | 000 | 052 | 0038.23 ms |
| 64th | Dr R Dizzle | LisaSimpson | Ruby | 016 | 016 | 002 | 051 | 0038.29 ms |
| 65th | Martin Büttner | Vulcan | Ruby | 015 | 015 | 001 | 053 | 0038.26 ms |
| 65th | Dr R Dizzle | Khaleesi | Ruby | 015 | 015 | 005 | 049 | 0038.29 ms |
| 67th | Dr R Dizzle | EdwardScissorHands | Ruby | 014 | 014 | 002 | 053 | 0038.21 ms |
| 67th | undergroundmonorail | TheGambler | Python2 | 014 | 014 | 002 | 053 | 0025.47 ms |
| 69th | cipher | LemmingBot | Python2 | 011 | 011 | 002 | 056 | 0025.29 ms |
| 70th | Docopoper | ConcessionBot | Python2 | 007 | 007 | 000 | 062 | 0141.31 ms |
+-------+----------------------+-------------------------+------------+-------+-------+-------+-------+----------------+
Total Players: 70
Total Matches Completed: 2415
Total Tourney Time: 06:00:51.6877573
Turnier Notes
- WOO HOO 70 BOTS
- Emil ist immer noch KOTH mit
Pony
und sein neuer Bot belegtDienstag
den 3. Platz - Herzlichen Glückwunsch an Roy, der mit seinem
Gazzr
Bot auf Platz 2 gesprungen ist - William Barbosa gewinnt den Quick Draw Award für seinen Bot
BarneyStinson
Und Slow Poke Preis geht für seine Bots Docopoper
R.O.B.O.T
undConcessionbot
die waren beide> 140ms pro HandProtokolle verfügbar unter https://github.com/eoincampbell/big-bang-game/blob/master/tourneys/Tournament-2014-08-01-23-24-00.zip?raw=true
Ausgeschlossene Bots
- BashRocksBot - immer noch keine Freude, wenn .net Cygwin-Bash-Skripte ausführt
- CounterPreferenceBot - Warten auf Fehlerbehebung
- RandomlyWeighted - Warten auf Fehlerbehebung
- CasinoShakespeare - ausgeschlossen, da eine aktive Internetverbindung erforderlich ist
Original gepostete Frage
Du bist zu deinem Freund nach Hause geschwungen, um die epischste Showdown-Schlacht aller Zeiten zwischen Rock, Paper, Scissors, Lizard, Spock zu bestreiten. Im echten BigBang-Nerd-Stil spielt keiner der Spieler selbst, sondern hat Konsolen-Bots erstellt, um in ihrem Namen zu spielen. Sie ziehen Ihren USB-Stick heraus und übergeben ihn an Sheldor the Conqueror, um ihn in den Showdown einzubeziehen . Penny ohnmächtig. Oder vielleicht fällt Howard in Ohnmacht. Wir richten hier bei Leonard nicht.
Regeln
Es gelten die Standardregeln für Steine, Papier, Schere, Echse und Spock.
- Schere schneiden Papier
- Papier bedeckt Rock
- Rock zerquetscht Lizard
- Eidechse vergiftet Spock
- Spock zerschmettert die Schere
- Schere enthauptet Eidechse
- Eidechse isst Papier
- Papier widerlegt Spock
- Spock verdampft Rock
- Rock zerquetscht die Schere
Der Bot eines jeden Spielers spielt im Turnier ein Match gegen einen anderen Bot.
Jedes Match besteht aus 100 Iterationen eines RPSLV-Spiels.
Nach jedem Spiel gewinnt der Spieler, der die meisten Spiele / Hände von 100 gewonnen hat.
Wenn Sie ein Spiel gewinnen, erhalten Sie 1 Punkt in der Rangliste. Bei einem Unentschieden erhält keiner der Spieler einen Punkt.
Bot-Anforderungen
Ihr Bot muss über die Befehlszeile ausgeführt werden können.
Sheldors * nix-Box ist gestorben, daher wird sie von seinem Windows 8-Gaming-Laptop ausgeführt. Stellen Sie also sicher, dass Ihre bereitgestellte Lösung unter Windows ausgeführt werden kann. Sheldor hat freundlicherweise angeboten, alle erforderlichen Laufzeiten (innerhalb eines angemessenen Rahmens) zu installieren, um Ihre Lösung ausführen zu können. (.NET, Java, PHP, Python, Ruby, Powershell ...)
Eingänge
Im ersten Spiel eines jeden Matches werden Ihrem Bot keine Argumente geliefert. In jedem folgenden Spiel jedes Spiels: - Arg1 enthält die Historie Ihrer Bots Hände / Entscheidungen in diesem Spiel. - Arg2 enthält die Historie der Hände / Entscheidungen Ihres Gegners in diesem Spiel.
Der Verlauf wird durch eine Folge von Großbuchstaben dargestellt, die die möglichen Hände darstellen, die Sie spielen können.
| R | Rock |
| P | Paper |
| S | Scissors |
| L | Lizard |
| V | Spock |
Z.B
- Spiel 1: MyBot.exe
- Spiel 2: MyBot.exe SV
- Spiel 3: MyBot.exe SS VL
- Spiel 4: MyBot.exe SSR VLS
Ausgabe
Ihr Bot muss für jedes Spiel eine Antwort schreiben, die seine "Hand" darstellt. Das Ergebnis sollte nach STDOUT geschrieben werden und der Bot sollte dann beendet werden. Gültige einfache Großbuchstaben finden Sie weiter unten.
| R | Rock |
| P | Paper |
| S | Scissors |
| L | Lizard |
| V | Spock |
In dem Fall, dass Ihr Bot keine gültige Hand zurückgibt (dh 1 der obigen 5 Großbuchstaben), verlieren Sie diese Hand automatisch und das Match wird fortgesetzt.
Wenn beide Bots keine gültige Hand zurückgeben, wird das Spiel als unentschieden gewertet und das Spiel fortgesetzt.
Übereinstimmungsformat
Jeder eingereichte Bot spielt im Turnier ein Match gegen einen anderen Bot.
Jedes Match wird genau 100 Spiele dauern.
Die Spiele werden anonym gespielt. Sie verfügen nicht über fortgeschrittene Kenntnisse des spezifischen Bots, gegen den Sie spielen. Sie können jedoch alle Informationen, die Sie aus seiner Entscheidungsfindung im Verlauf des aktuellen Spiels erhalten, verwenden, um Ihre Strategie gegen Ihren zu ändern Gegner. Sie können auch den Verlauf Ihrer vorherigen Spiele verfolgen, um Muster / Heuristiken usw. aufzubauen. (Siehe Regeln unten)
Während eines einzelnen Spiels führt die Orchestrierungs-Engine Ihren Bot und den des Gegners im Abstand von 100 Millisekunden aus und vergleicht dann die Ergebnisse, um PRNG-Kollisionen in derselben Sprache / Laufzeit zu vermeiden. (Das ist mir tatsächlich beim Testen passiert).
Urteilen & Einschränkungen
Dr. Sheldon Cooper in der Gestalt von Sheldor the Conqueror hat freundlicherweise angeboten, die Durchführung des Turniers zu überwachen. Sheldor the Conqueror ist ein fairer und gerechter Aufseher (meistens). Alle Entscheidungen von Sheldor sind endgültig.
Das Spielen wird auf faire und angemessene Weise durchgeführt:
- Ihr Bot-Skript / Programm wird in der Orchestrierungs-Engine unter einem Unterordner gespeichert
Players\[YourBotName]\
- Sie können den Unterordner verwenden
Players\[YourBotName]\data
, um die Daten oder den Spielverlauf des aktuellen Turniers zu protokollieren. Datenverzeichnisse werden zu Beginn jedes Turnierlaufs gelöscht. - Sie dürfen nicht auf das Spielerverzeichnis eines anderen Spielers im Turnier zugreifen
- Ihr Bot kann keinen bestimmten Code haben, der auf ein anderes bestimmtes Bots-Verhalten abzielt
- Jeder Spieler kann mehr als einen Bot zum Spielen einreichen, solange er nicht interagiert oder sich gegenseitig unterstützt.
Bearbeiten - Zusätzliche Einschränkungen
- Verfallserklärungen werden nicht unterstützt. Ihr Bot muss eine der 5 gültigen Hände spielen. Ich werde jeden Bot außerhalb des Turniers mit zufälligen Daten testen, um sicherzustellen, dass er sich verhält. Alle Bots, die Fehler werfen (dh Fehler verwirken), werden vom Turnier ausgeschlossen, bis sie einen Fehler behoben haben.
- Bots können abgeleitet sein, solange sie sich in ihrem Verhalten prägnant unterscheiden. Bots (auch in anderen Sprachen), die genau dasselbe Verhalten wie ein vorhandener Bot aufweisen, werden disqualifiziert
- Es gibt bereits Spam-Bots für die folgenden E-Mails. Bitte senden Sie sie nicht erneut
- Rock - BartSimpson
- Papier - LisaSimpson
- Scissor - EdwardScissorhands
- Spock - Vulcan
- Eidechse - Khaleesi
- Pseudo-Zufall - SimpleRandomBot & FairBot
- Pseudo-Zufalls-RPS - ConservativeBot
- Psuedo Random LV - Barney Stinson
- Bots dürfen keine Dienste oder Webressourcen von Drittanbietern anrufen (oder irgendetwas anderes, das die Geschwindigkeit / Entscheidungszeit der Spiele erheblich verlangsamt).
CasinoShakespeare
Dies ist die einzige Ausnahme, da dieser Bot gesendet wurde, bevor diese Einschränkung hinzugefügt wurde.
Sheldor wird diese Frage so oft wie möglich mit Turnierergebnissen aktualisieren, da mehr Bots eingereicht werden.
Orchestrierungs- / Steuerungsprogramm
Das Orchestrierungsprogramm sowie der Quellcode für jeden Bot sind auf github verfügbar.
https://github.com/eoincampbell/big-bang-game
Einreichungsdetails
Ihre Einreichung sollte enthalten
- Der Name Ihres Bots
- Dein Code
- Ein Befehl an
- Führen Sie Ihren Bot aus der Shell aus, z
- ruby myBot.rb
- python3 myBot.py
- ODER
- Kompilieren Sie zuerst Ihre beiden und führen Sie sie dann aus. z.B
- csc.exe MyBot.cs
- MyBot.exe
Beispielhafte Einreichung
BotName: SimpleRandomBot
Compile: "C:\Program Files (x86)\MSBuild\12.0\Bin\csc.exe" SimpleRandomBot.cs
Run: SimpleRandomBot [Arg1] [Arg2]
Code:
using System;
public class SimpleRandomBot
{
public static void Main(string[] args)
{
var s = new[] { "R", "P", "S", "L", "V" };
if (args.Length == 0)
{
Console.WriteLine("V"); //always start with spock
return;
}
char[] myPreviousPlays = args[0].ToCharArray();
char[] oppPreviousPlays = args[1].ToCharArray();
Random r = new Random();
int next = r.Next(0, 5);
Console.WriteLine(s[next]);
}
}
Klärung
Fragen, stellen Sie in den Kommentaren unten.
quelle
Antworten:
Pony (Python 2)
Dies basiert auf einem Rock-Paper-Scissors-Bot, den ich vor einiger Zeit für eine Programmieraufgabe am Ende eines Udacity-Online-Kurses geschrieben habe . Ich habe es geändert, um Spock und Eidechse einzuschließen, und einige Verbesserungen vorgenommen.
Das Programm hat 11 verschiedene einfache Strategien mit jeweils 5 Varianten. Die Auswahl richtet sich danach, wie gut sie in den letzten Runden abgeschnitten hätten.
Ich habe eine Fallback-Strategie entfernt, die zufällig gegen stärkere Gegner gespielt hat. Ich denke, es macht mehr Spaß.
Rennen wie:
Bearbeiten : Ich habe eine kleine Änderung vorgenommen, indem ich mich in unsicheren Fällen auf die einfachste Strategie konzentriert habe (dh immer den gleichen Zug gespielt habe). Dies hilft ein wenig, um nicht zu versuchen, übermäßig komplizierte Muster zu finden, in denen es keine gibt, z. B. in Bots wie ConservativeBot.
Hinweis : Ich habe versucht, die grundlegende Strategie für den Verlaufsabgleich zu erläutern, die dieser Bot im Beitrag für meinen anderen Bot Dienstag verwendet .
quelle
Markov, Rubin
Betrachtet die letzten beiden Züge des Gegners und bestimmt die möglichen (und wahrscheinlichsten) Folgemaßnahmen. Wenn die Kombination noch nicht ausgewählt wurde, verwendet er stattdessen (bisher) alle Züge des Gegners. Dann sammelt er alle möglichen Antworten für diese und wählt eine zufällige.
Laufen wie
quelle
ConservativeBot, Ruby
Neue Dinge sind schlechte Dinge.
Laufen wie
quelle
Star Wars Fan - Rubin
Fick dich, Spock
Führen Sie es wie folgt aus:
quelle
Barney Stinson - Lua
Ich habe nur eine Regel: Neu ist immer besser. Scheiß auf den alten Jo Ken Po oder wie du es nennst.
Führen Sie es wie folgt aus:
quelle
Langweiliger Bot (Java)
Er geht davon aus, dass jeder immer das Gleiche spielt und entsprechend plant. Normalerweise zieht er Steine in einer Krawatte, weil alle anderen das auch tun, oder?
quelle
max
IocainPowder, Ruby
Basierend auf der RPS-Strategie (die hier schamlos gestohlen wurde) . Der Bot wählt eine Vermutung, die mit dem Markov-Bot identisch ist, nimmt jedoch an, dass der Gegner erraten hat, was er auswählen wird, und wählt einen Zug, um diesen entsprechend zu schlagen.
Beachten Sie, dass ich gerade die Grundidee der verknüpften Strategie angepasst habe und sie nicht im Detail befolgt habe.
Laufen wie
quelle
HuddleWolfTheConqueror - C #
HuddleWolf ist zurück und besser als je zuvor. Er wird Sheldor den Eroberer in seinem eigenen albernen Spiel besiegen. HuddleWolf ist intelligent genug, um Spammerbots zu identifizieren und ihnen entgegenzuwirken. Für intelligentere Gegner nutzt HuddleWolf sein Wissen über grundlegende Statistiken der 5. Klasse und verwendet einen gewichteten Würfelwurf, der auf der Spielgeschichte der Gegner basiert.
quelle
Kleinkindersicher
Dieser ziemlich dumme Bot geht davon aus, dass er ein Kleinkind spielt, das seine Züge "verfolgt" und immer versucht, das zu besiegen, was zuletzt geworfen wurde. Wenn der Bot mehrmals hintereinander geschlagen wird, springt er zu einem neuen Punkt im Muster. Es basiert auf meiner Strategie, meinen viel jüngeren Bruder immer zu schlagen . :)
BEARBEITEN :: Die Länge einer Verlustserie wurde geändert, die erforderlich ist, um in zufällige Würfe zu springen. Außerdem wurde ein größerer Fehler mit dem Zufallssprung behoben.
Speichern unter
ToddlerProof.java
, kompilieren und ausführen mitjava ToddlerProof [me] [them]
quelle
Bart Simpson
"Guter alter Rock! Nichts geht über Rock!"
Rennen wie
Lisa Simpson
"Armer, vorhersehbarer Bart. Wählt immer Rock."
Rennen wie
Besser Lisa Simpson
Ich hatte ein schlechtes Gewissen, weil ich Lisa so dumm gemacht habe, also habe ich ihr erlaubt, nach dem Zufallsprinzip zwischen den Händen zu wählen, die den Rock schlagen. Immer noch dumm, aber sie ist doch eine Simpson. Vielleicht hat sich ein Wachsmalstift in ihrem Gehirn festgesetzt?
Rennen wie
quelle
Echo
Geschrieben in C #. Kompilieren mit
csc Echo.cs
. Laufen wieEcho.exe ARG1 ARG2
.Beim ersten Durchlauf wählt Echo eine zufällige Option. Bei jedem Lauf nach dem ersten wiederholt Echo einfach die letzte Aktion des Gegners.
quelle
Vulkanier, Rubin
Meine Finger sind zusammengeklebt.
Laufen wie
(Ich denke, dies ist die einzige In-Character-Strategie für Ihre Hintergrundeinstellung.)
quelle
Tyrannosaurus, Godzilla, Barney ... Eidechsen-Regel. Gelegentlich geraten sie in Schwierigkeiten und müssen Spock anrufen oder Rocks werfen
quelle
BayesianBot, Perl (jetzt v2!)
Dies ist vor allem ein einzigartiges Programm. Darin werden Sie die brillante Verschmelzung von Statistik und schrecklicher Programmierform sehen. Auch dieser Bot bricht wahrscheinlich viele Regeln der Bayes'schen Statistik, aber der Name klingt cooler.
Das Kernstück dieses Bots ist die Erstellung von 250 verschiedenen Vorhersagemodellen. Jedes Modell hat die Form "Vorausgesetzt, ich habe in der letzten Runde Rock gespielt und mein Gegner hat vor zwei Runden Schere gespielt, ist dies die Wahrscheinlichkeitsverteilung für den nächsten Zug meines Gegners." Jede Wahrscheinlichkeitsverteilung hat die Form einer mehrdimensionalen Dirichlet-Verteilung.
In jeder Runde werden die Vorhersagen aller anwendbaren Modelle (in der Regel 10) zu einer Gesamtprognose multipliziert, anhand derer dann bestimmt wird, welche Züge die höchste erwartete Auszahlung haben.
Edit 1: In dieser Version habe ich die vorherige Distribution geändert und den Bot zufälliger gemacht, wenn er verliert.
Es gibt einige Dinge, die verbessert werden können, wie die Anzahl der Modelle (250 ist nur eine dreistellige Zahl), die Wahl der vorherigen Verteilung (derzeit Dir (3,3,3,3,3)) und die Methode zum Zusammenführen von Vorhersagen. Außerdem habe ich mich nie darum gekümmert, eine der Wahrscheinlichkeitsverteilungen zu normalisieren, was im Moment in Ordnung ist, weil ich sie multipliziere.
Ich habe keine besonders hohen Erwartungen, aber ich hoffe, dieser Bot wird es schaffen.
Ich habe dieses Programm so ausgeführt:
quelle
DynamicBot
Der dynamische Bot ändert sich fast immer. Es hasst es wirklich, sich zu wiederholen
Sprache: Python 3.4.1
Befehl:
python dynamicbot.py <history>
oderpython3 dynamicbot.py <history>
abhängig von Ihrem Systemquelle
SmartBot - Java
Mein allererster Eintrag für irgendetwas auf dieser Seite!
Obwohl kein sehr kreativer Name ...
SmartBot findet Abfolgen von Zügen, bei denen die Züge des Gegners und / oder sich selbst den zuletzt ausgeführten Zügen ähneln, und plant entsprechend.
name = SmartBot
Ich denke, es auszuführen, korrigiere mich, wenn ich falsch liege.
java -jar SmartBot.jar
Für jeden möglichen nächsten Zug wird eine Punktzahl vergeben, die angibt, wie oft ähnliche Muster aufgetreten sind.
Es begünstigt leicht Eidechse.
quelle
java ABot
sollte es funktionieren (denken Sie daran, die Datei genauso wie die öffentliche Klasse zu benennen)SpockOrRock - PHP
In der realen Welt spielen die meisten Leute instinktiv mit der Schere. Dieser Bot wählt entweder Spock oder Rock, um den durchschnittlichen Spieler zu schlagen. Es kümmert sich nicht um vorherige Runden.
renn mit
php spockorrock.php
quelle
SlowLizard, Ruby
Nach dem Start mit Lizard wird immer ein zufälliger Zug ausgewählt, der den vorherigen Zug des Gegners schlägt.
Laufen wie
quelle
LexicographicBot
Dieser Bot bestellt gerne seine Briefe, also wählt er eine Antwort, die 1 höher ist als die seines Gegners in der vorherigen Runde - es sei denn, der Gegner hat Vulcan gewählt, dann wählt er zufällig eine Antwort aus.
Dies erwartet, dass die gegnerische Hand an zweiter Stelle ausgeteilt wird:
quelle
Werevulcan - Rubin
Rennen wie
ruby werevulcan.rb
Der Werevulkaner sieht tagsüber normal aus, aber wenn der Mond aufgeht, werden seine Ohren spitz und seine Bewegungen logischer.
quelle
Analogizer - Ruby
Laufen Sie mit
ruby analogizer.rb
. Ich habe eine logische Korrektur des Codes vorgenommen, aber keine Ahnung, warum es dabei Fehler gab.Angenommen, der gegnerische Bot reagiert immer auf meinen vorherigen Zug und wählt entweder etwas aus, das ihn schlagen würde, etwas, das ihn verlieren würde, oder denselben Zug, möglicherweise aus einer begrenzten Anzahl möglicher Züge. Unter dieser Annahme wird der beste Zug ausgewählt.
Abgesehen davon, dass die ersten zehn Züge fest codiert sind: Zuerst gebe ich vor, ich kenne nur die Echse, dann gehe ich davon aus, dass mein Gegner immer etwas wirft, um das letzte, was ich geworfen habe, zu schlagen, bis ich genug Daten für eine ordnungsgemäße Analyse habe.
quelle
Java - SelfLoathingBot
Der Bot startet nach dem Zufallsprinzip, dann ~ 33%, um zufällig zu spielen, oder ~ 33%, um eine Siegertaktik gegen eines der unmittelbar vorhergehenden Spiele zu spielen, wobei 50% der Siegertaktiken zur Auswahl stehen.
quelle
Der Analyst
Der Analyst analysiert einige Dinge und unternimmt einige, um Sie zu schlagen.
kompilieren
javac Analyst.java
und ausführen alsjava Analyst
quelle
Der Spieler - Python 2
Im Gegensatz zum Namen wird in diesem Programm nur in der ersten Runde Zufälligkeit verwendet, wenn keine Informationen vorliegen. Stattdessen ist es nach dem Irrtum des Spielers benannt, der Überzeugung, dass ein zufälliges Ereignis, das in der Vergangenheit seltener aufgetreten ist, mit größerer Wahrscheinlichkeit in der Zukunft eintreten wird. Wenn Sie zum Beispiel 20 Mal eine faire Münze werfen und die ersten 15 Köpfe sind, gibt der Irrtum des Spielers an, dass sich die Wahrscheinlichkeit erhöht, dass die verbleibenden Köpfe Schwänze sind. Das ist natürlich falsch. Unabhängig von den vorangegangenen Flips beträgt die Wahrscheinlichkeit, dass eine faire Münze auftaucht, immer 50%.
Dieses Programm analysiert die Geschichte des Gegners, findet die 2 Züge, die es bisher am wenigsten benutzt hat, und geht davon aus, dass der Zug des Gegners diesmal einer dieser beiden sein wird. Wenn Sie 2 für einen Sieg, 1 für ein Unentschieden und 0 für einen Verlust festlegen, wird der Zug mit der maximalen Punktzahl gegen diese beiden vorhergesagten Züge ermittelt und geworfen.
Der Bruder des Spielers - Python 2
Durch Umschalten der
MODE
Variablen auf 0 wird dieses Programm auf der Grundlage eines verwandten Irrtums ausgeführt, der manchmal auch als der Irrtum des Spielers bezeichnet wird. Es besagt, dass ein zufälliges Ereignis, das in der Vergangenheit häufiger aufgetreten ist, mit größerer Wahrscheinlichkeit in der Zukunft eintreten wird. Wenn Sie beispielsweise 20-mal eine Münze werfen und die ersten 15 Köpfe sind, bedeutet dies, dass die verbleibenden Köpfe eher Köpfe sind, da derzeit ein Streifen vorliegt. Im Modus 0 arbeitet dieses Programm auf die gleiche Weise, mit der Ausnahme, dass der Gegner einen der beiden Züge ausführt, die er bisher am häufigsten ausgeführt hat.Also ja, diese beiden Programme sind nur ein Zeichen voneinander entfernt. :)
quelle
Dienstag (Python 2)
Mein erster Eintrag Pony scheint mit all seinen zweiten Vermutungen (Dreifach-Vermutungen, ...) und Meta-Überlegungen ganz gut abzuschneiden. Aber ist das überhaupt nötig?
Hier ist also Dienstag, Ponys kleiner Freund, mit nur einer der 55 Strategien: Sagen Sie den nächsten Zug des Gegners voraus und schlagen Sie ihn.
Langfristig gewinnt oder bindet Dienstag jeden Bot in den Top Ten der aktuellen Bestenliste. Mit Ausnahme von Pony.
Rennen wie:
Ich gebe zu, dass der Code etwas verschleiert ist. Wenn jemand mehr darüber wissen möchte, kann ich Erklärungen hinzufügen.
Bearbeiten: Hier ist eine
kurzeexemplarische Vorgehensweise, um die Idee zu erklären:Das Programm erhält die eigene Geschichte und die Züge des Gegners:
sys.arg[1] = 'LLVLLVL', sys.arg[2] = 'RPSPSSP'
Die Historie wird zu einer Liste von Paaren zusammengefasst und die Züge in Zahlen übersetzt (R = 0, ...):
hist = [[4, 0], [4, 1], [3, 2], [4, 1], [4, 2], [3, 2], [4, 1]]
Die Anzahl der bisher gespielten Runden wird bestimmt:
N = 7
Die Grundidee ist nun, nach der längsten ununterbrochenen Kette der letzten Züge in der früheren Geschichte zu suchen. Das Programm verfolgt, wo eine solche Kette in der Liste endet
cand
(für "Kandidaten"). Zu Beginn wird ohne Überprüfung jede Position in der Historie mit Ausnahme der letzten berücksichtigt:cand = [0, 1, 2, 3, 4, 5]
Jetzt wird die Länge möglicher Ketten schrittweise erhöht. Bei der Kettenlänge
l = 1
wird nach früheren Vorkommen des letzten Zugpaars gesucht[4, 1]
. Dies kann an der historischen Position1
und gefunden werden3
. Nur diese sind in dercand
Liste enthalten:cand = [1, 3]
Anschließend wird
l = 2
geprüft, vor welchem der möglichen Kandidaten sich das vorletzte Zugpaar befand[3, 2]
. Dies ist nur für die Position der Fall3
:cand = [3]
Für
l = 3
und mehr gibt es keine vorherigen Ketten dieser Länge undcand
wäre leer. In diesem Fallcand
bleibt das letzte Element von :cand = [3]
Der Bot geht nun davon aus, dass sich die Geschichte wiederholen wird. Das letzte Mal, als das Kain
[3, 2], [4, 1]
auftrat, folgte es[4, 2]
. Also hat der Gegner gespielt2
(Schere), was von(2+1)%5 = 3
(Spock) oder(2+3)%5 = 0
(Rock) geschlagen werden kann. Der Bot antwortet, wobei die erste oder zweite Alternative davon abhängt, ob sieN
gerade oder ungerade ist, um eine gewisse Varianz einzuführen.Hier wird move
3
gewählt, der dann zurück übersetzt wird:print 'V'
Hinweis: Dienstag hat die Zeitkomplexität O ( N 2 ), um den nächsten Zug nach N Runden zurückzugeben. Pony hat Zeitkomplexität O ( N 3 ). In dieser Hinsicht sind sie wahrscheinlich viel schlechter als die meisten anderen Einträge.
quelle
Bash Rocks
Ist cygwin als Laufzeit zu viel verlangt?
bashrocks.sh:
und führe es so aus:
quelle
R
. ;)dos2unix
in Cygwin ausführen, bevor Sie sie ausführen?Algorithmus
Ein Algorithmus, um einen zu haben.
Denn es fühlt sich immer sicherer an, etwas zu tun. Je komplizierter, desto besser.
Ich habe noch keine ernsthaften Berechnungen angestellt, daher ist dieser Algorithmus möglicherweise nicht so effektiv.
Python 2-Programm:
python algorithm.py
quelle
FairBot, Ruby
Fangen wir einfach an.
Laufen wie
quelle
ViolentBot
Dieser Bot wählt die gewalttätigste Option basierend auf der vorherigen Auswahl des Gegners:
Rennen wie
quelle
Haskell - MonadBot
Ich weiß nicht, ob ghc als "im Rahmen der Vernunft" betrachtet wird, aber nehmen wir einfach an, dass es so ist. Die Strategie dieses Bots besteht darin, dem beliebtesten Zug seines Gegners entgegenzuwirken.
Code:
quelle