Diese King-of-the-Hill- Herausforderung basiert auf der Game-Show Weakest Link . Für diejenigen, die mit der Show nicht vertraut sind, ist der Kern dieser Herausforderung, wen Sie abstimmen :
- Wenn die anderen Spieler klüger sind als Sie, haben Sie weniger Chancen auf den Pot.
- Wenn die anderen Spieler dümmer sind als Sie, haben Sie weniger Pot zu bekommen.
Zu Beginn jeder Runde beginnt der Pot mit 0 $. Eine Gruppe von 9 Spielern wird gebildet und jedem Spieler wird eine einzigartige Intelligenz von 1 bis 9 verliehen.
Zu Beginn jeder Runde Pot += Smartness
für jeden Spieler, der noch in der Runde ist. Dann stimmen die Spieler über den Spieler ab, den sie entfernen möchten. Der Spieler mit den meisten Stimmen wird entfernt. Im Falle eines Gleichstands wird der intelligentere Spieler behalten.
Wenn nur noch 2 Spieler in der Runde sind, treten sie in einem Kampf um den Verstand gegeneinander an. Die Gewinnchance des Spielers ist Smartness/(Smartness+OpponentSmartness)
. Der Gewinner erhält dann den gesamten Pot.
Der Spieler, der am Ende des Spiels das meiste Geld erhalten hat, gewinnt.
Input-Output
In jeder Runde erhalten Sie die aktuelle Liste der Gegner. Über die Funktionen in der Spielerklasse haben Sie Zugriff auf Ihre Intelligenz und den gesamten Abstimmungsverlauf aller Spieler für die Runde.
Als Ausgabe müssen Sie eine einzelne Ganzzahl zurückgeben, die den Spieler darstellt, für den Sie stimmen möchten (für dessen Schlauheit). Das Wählen für sich selbst ist erlaubt (aber nicht empfohlen).
Runden mit 9 Runden werden wiederholt, bis alle Spieler mindestens 1000 bis 10000 Runden gespielt haben und alle Spieler die gleiche Anzahl von Runden gespielt haben.
Den Controller finden Sie hier: https://github.com/nathanmerrill/WeakestLink
Um einen Player zu erstellen, müssen Sie die Player-Klasse erweitern und Ihren Player der PlayerFactory-Klasse hinzufügen. Ihre Klasse muss die folgenden Regeln befolgen:
Kommunikation oder Interferenzen mit anderen Spielern (einschließlich Ihrer anderen Spieler desselben Typs) sind strengstens untersagt.
Reflexions- und statische Variablen (außer Konstanten) sind nicht zulässig.
Wenn Sie die Zufälligkeit verwenden möchten, habe ich eine
getRandom()
Funktion in der Player-Klasse bereitgestellt . Verwenden Sie es, damit Simulationen deterministisch sein können.
Ich habe in der Player-Klasse viele Funktionen für den einfachen Zugriff auf Daten bereitgestellt. Sie können sie online auf Github finden . Ihr Spieler wird bei jeder neuen Runde instanziiert. "Dumme / Selbstmörderische" Spieler sind erlaubt (aber nicht Spieler mit der gleichen Strategie).
Scores
377195 WeakestLink.Players.PrudentSniper
362413 WeakestLink.Players.Sniper
353082 WeakestLink.Players.VengefulSniper
347574 WeakestLink.Players.AntiExtremist
298006 WeakestLink.Players.BobPlayer
273867 WeakestLink.Players.MedianPlayer
247881 WeakestLink.Players.TheCult
240425 WeakestLink.Players.Leech
235480 WeakestLink.Players.SniperAide
223128 WeakestLink.Players.Guard
220760 WeakestLink.Players.Anarchist
216839 WeakestLink.Players.RevengePlayer
215099 WeakestLink.Players.IndependentVoter
213883 WeakestLink.Players.SniperKiller
210653 WeakestLink.Players.MaxPlayer
210262 WeakestLink.Players.Bandwagon
209956 WeakestLink.Players.MeanPlayer
208799 WeakestLink.Players.Coward
207686 WeakestLink.Players.Spy
204335 WeakestLink.Players.Hero
203957 WeakestLink.Players.MiddleMan
198535 WeakestLink.Players.MinPlayer
197589 WeakestLink.Players.FixatedPlayer
197478 WeakestLink.Players.HighOrLowNotSelf
181484 WeakestLink.Players.RandomPlayer
165160 WeakestLink.Players.BridgeBurner
quelle
src\WeakestLink
ichjavac Game\*.java Players\*.java Main.java
kompiliert undjava -cp .. WeakestLink.Main
ausgeführt.Antworten:
Scharfschütze
Die allgemeine Idee ist, dass einer der dummen Spieler (dh diejenigen, die wir eher im Anspiel schlagen) nach Punkten schnappt. Danach versuchen wir, die anderen Spieler mit niedrigem Wert zu entfernen, um den Pot zu erhöhen. Aber wenn wir zu den intelligenten Spielern kommen, entscheiden wir uns dafür, die gefährlichsten zu entfernen, falls unser dummer Spieler entfernt wird. Auf diese Weise sollten wir jemanden finden, gegen den wir zumindest eine Chance haben, wenn wir niemanden haben, gegen den wir vorgehen können. Da wir immer mit einem Min- oder Max-Spieler abstimmen, bin ich davon überzeugt, dass wir uns recht effektiv durchsetzen können.
quelle
PrudentSniper
Scharfschütze , aber mit zwei besonderen Verhaltensweisen. Eine ist, dass wenn noch drei Bots übrig sind und PrudentSniper der klügste ist, er für den mittleren Bot stimmen wird, anstatt für den am wenigsten klugen. Dies ermöglicht es ihm, ein paar weitere Showdowns zu gewinnen. Das andere Verhalten ist, dass, wenn der intelligenteste Bot danach schießt (beim letzten Mal dafür gestimmt oder der analoge Bot) und der am wenigsten intelligente nicht, er in der Selbstverteidigung für den intelligentesten stimmt.
quelle
Der Kult
Die Kult-Spieler haben ein leicht esoterisches Abstimmungsschema, mit dem sie versuchen, sich gegenseitig zu identifizieren und als Gruppe abzustimmen, wobei sie nur den Abstimmungsbericht verwenden. Da jedes Mitglied des Kults weiß, wie man abstimmt, wird jeder, der anders abstimmt, als Nicht-Mitglied entlarvt und letztendlich zur Eliminierung ausgewählt.
Das Abstimmungsschema auf einen Blick:
Der Code:
Abschließende Gedanken:
Der Kult wählt nun die gefährlichsten Spieler, wenn nur noch zwei oder weniger Kultmitglieder für das Duell übrig sind. Ich habe es mehrmals mit
cult_cnt>1
undcult_cnt>2
Bedingungen getestet und der spätere gewinnt öfter.Trotzdem ist dies eine Vorsichtsmaßnahme und der Kult ist wirklich nicht dafür gedacht, als Einzelspieler zu arbeiten. Je mehr neue Spieler hinzukommen, desto mehr sollte der Kult irgendwann verlieren.
quelle
unusedPlayers.addAll(allPlayers);
in Game.java etwa neun Mal dupliziert wird, damit alle Spieler in unterschiedlicher Vielfalt auftreten können (wie das Mischen mehrerer Kartenspiele) ... nein, natürlich nicht, das ist eine voreingenommene Anfrage, aber Es ist interessant zu sehen, wie effektiv die teambasierte Strategie sein kann, wenn sie nur eine geringe Chance hat, sich zusammenzusetzen.BridgeBurner
Nicht irgendwo, wo ich das jetzt testen kann, und es kam mir wirklich hässlich / dumm vor, aber es sollte funktionieren.
Dieser Bot will einfach nur gehasst werden. Es stimmt für den, der am wenigsten dagegen gestimmt hat . Bei einem Unentschieden wird derjenige ermittelt, der am längsten gegangen ist, ohne dafür zu stimmen. Bei einem erneuten Unentschieden wird der schlaueste ausgewählt (vermutlich, weil er den schlimmsten Feind darstellt). Es wird nicht für sich selbst stimmen, weil niemand es wirklich hassen wird, wenn es nicht da ist.
quelle
-1
gewählt wurde. Aber es sollte jetzt behoben sein.Zug
Folgt der Menge bei der Abstimmung, es sei denn, er ist derjenige, der als Ziel ausgewählt wird.
Ich vermute, dass dies die Scharfschützen nur stärker macht, wenn sie ihnen folgen, aber es auch verhindert, dass der Kult und die Scharfschützen-Helfer auf eine etwas effektive Art und Weise angegriffen werden. Es kann auch ein Schutzschild für Scharfschützenmörder sein oder ihnen helfen, wenn es mehr von ihnen gibt. (Muss mit den neuesten Updates getestet werden).
Verwendung von Java 8-Funktionen, da das Spiel dies sowieso benötigt, um zu laufen.
quelle
RevengePlayer
Dieser Bot wählt, wer am häufigsten für ihn gestimmt hat, wobei der Tiebreaker der klügste Spieler ist. Die Theorie ist, dass ein Spieler, der in der Vergangenheit für Sie gestimmt hat, wahrscheinlich wieder für Sie stimmen wird.
quelle
MeanPlayer
Weder die dümmsten noch die klügsten Spieler wählen, und er trägt eine Waffe (hat sie an der Sicherheit vorbei geschlichen)
quelle
AntiExtremist
Dieser extreme Sozialist glaubt, dass alle Menschen gleich klug sein sollten. Er versucht, diejenigen zu töten, die viel schlauer oder dümmer sind als er. Er denkt über beides nach, bevorzugt aber generell Dummheiten. Er bevorzugt dumme Leute am Anfang und kluge am Ende, aber es hängt davon ab, wie extrem diese Leute sind.
HINWEIS: Laut Linus wird dies die meiste Zeit das Gleiche wie der Scharfschütze sein (525602: 1228).
quelle
static Sniper S = new Sniper()
und gegebenstatic long agrees=0, disagrees=0;
. In Ihrer Abstimmungsmethode füge ich hinzu,S.setSmartness(getSmartness()); int sniper_answer=S.vote(currentOpponents);
welche berechnet, wie ein Scharfschütze in Ihrer Position abstimmen würde, und setze dann Ihre Antwort in eine Variable, um zu zählen, ob sie zugestimmt oder nicht zugestimmt hat, bevor die Antwort zurückgegeben wird. Sobald das Spiel vorbei ist, können Sie ausdrucken: Nicht übereinstimmen, was 525602: 1228 war.Spion
Spion ist reserviert. Er mag es nicht, für die klügsten Leute zu schießen. Ebenso mag er es nicht,
viertelwehrloseIdiotenaufzuspüren. Er mag es also, diejenigen, die ihm am nächsten sind, mit Schlauheit zu eliminieren.Du wurdest gerade verprügelt, mes amis . Es ist ihm egal, ob er gewinnt. Er mag den Klang des Messers in Ihrem Rücken, als er Sie erfolgreich abstimmt.
quelle
Math.abs(enemyIntel - selfIntel) < closestIntel
sollte seinMath.abs(enemyIntel - selfIntel) < Math.abs(closestIntel - selfIntel)
.MedianPlayer
Dieser Spieler versucht, der gemeinste (naja, mittelmäßige) zu sein, der noch übrig ist.
Es wird gewählt, um die klügsten und dümmsten Gegner zu eliminieren (mit einer leichten Neigung, die klügsten abzuwählen), je nachdem, ob es mehr oder weniger kluge / dümmer als sie selbst gibt.
Rahmen eklatant von @Linus oben gestohlen.
quelle
Feigling
Will einfach nicht abgewählt werden, also stimmen Sie für den Gegner, der dem Spieler am ähnlichsten ist, der in der letzten Runde abgewählt wurde, um die Chance zu maximieren, im Gewinnerteam zu sein.
Macht sich momentan nicht besonders gut, könnte aber genauso gut in die Mischung eingehen.
quelle
Held
Stimmen Sie diejenigen ab, die sich für die Schwachen entscheiden ... oder ihn ärgern.
quelle
Bob
Bob ist nur der Durchschnittsbürger, der denkt, er sei schlauer als er wirklich ist. Ich kann die Scharfschützenfamilie nicht gewinnen, erreiche aber die meiste Zeit die Top 5 in meinen Simulationen.
quelle
FixatedPlayer
Wählt ein zufälliges Ziel und wählt es, bis es verschwunden ist. Wirst aber nicht für sich selbst stimmen.
quelle
Statistiken
Dies ist kein Beitrag zum Wettbewerb. Dies ist lediglich eine Möglichkeit, nützliche Statistiken eines Spiels abzurufen. Diese Statistiken geben die prozentuale Wahrscheinlichkeit an, mit der ein bestimmter Spieler in einer Runde abgewählt wird.
Fügen Sie dazu die folgenden Zeilen hinzu,
Round.java
damit der Anfang der Datei wie folgt aussieht:Ändern Sie dann die Abstimmungsmethode wie folgt:
Beispielausgabe:
quelle
Max Spieler
Ein Besserwisser. Entfernt lieber jemanden mit hoher Intelligenz (der daher seinen unübertroffenen Intellekt herausfordern kann)
quelle
Bewachen
Stimmen Sie diejenigen ab, die sich für die Starken entscheiden ... oder diejenigen, die ihn ärgern.
quelle
Blutegel
Verlässt sich auf andere Bots, um die klügsten und dümmsten Typen abzuwählen.
Er ist zufrieden damit, irgendwo in der Mitte aufzutauchen und irgendwann den Pot mit dem Gewinner zu teilen (da er eigentlich ein wirklich anständiger
TypBot ist).quelle
SniperKiller
Eine weitere Antwort, die schamlos aus Linus 'Code gestohlen wurde . Dieser tötet alle Scharfschützen, schützt sie aber nicht. Wenn es weiß, dass keine Scharfschützen mehr übrig sind, verhält es sich wie ein Scharfschütze.
quelle
RandomPlayer
quelle
MinPlayer
Ein Elitist. Entfernt lieber jemanden mit geringer Intelligenz.
quelle
VengefulSniper
Dies begann als etwas, von dem ich dachte, dass es ursprünglich genannt wurde
StupidBuffering
(ein Name, den ich nicht aufgeben wollte), und endete dann als PrudentSniper, dem es egal war, ob er ins Visier genommen wurde. Dies schien auch der einzige Grund zu sein, warum er PrudentSniper nicht schlagen konnte, also habe ich die Dinge ein wenig verändert, um ihn zu fokussieren.Das ist im Grunde genommen ein Scharfschütze, aber wenn der klügste oder dümmste Bot auf ihn zielt, zielt er auf denjenigen, der in der letzten Runde die meisten Stimmen erhalten hat. Wenn beide die gleiche Anzahl von Stimmen erhielten und beide auf ihn abzielten, kehrt er zum normalen Scharfschützenverhalten zurück. In meinen Tests schlägt dieses Produkt gelegentlich PrudentSniper.
quelle
Mittelsmann
Der MiddleMan versucht sein Bestes, um die Gewinne zu maximieren, und achtet dabei darauf, dass er nicht aus dem Spiel ausscheidet. Er hält sich mit weniger Teilnehmern zusammen, um seine Chance auf den Einzug in die nächste Runde zu verbessern (und ein leichtes Ziel zu erreichen). Er wird jemanden abwählen, der klüger ist als er, nur wenn es mehr klügere Kandidaten als weniger Kandidaten gibt. Unabhängig davon, welche der beiden Gruppen er ist, wählt er immer die niedrigste der Gruppe, um den Pot am Klettern zu halten.
PS hoffe, es kompiliert, ich bin kein Java-Typ.
Hatte dieses Schema im Hinterkopf, bevor ich die anderen Einträge las. Dann war ich überrascht, wie nah (aber kritisch anders) Sniper war, also ging ich voran und benutzte dies als Ausgangspunkt, da ich die Java-Syntax nicht kenne. Danke @Linus
quelle
ApproximatePosition
Dieser Bot versucht, ungefähr um die fehlenden Smartness-Werte herum zu schießen, vorausgesetzt, die Gruppe wird mit demselben Muster fortfahren, was bedeutet, dass sie denselben Zieltyp anvisiert. Es wird immer für den klügsten von zwei Spielern gestimmt, wenn es eine Wahl gibt.
Lange habe ich kein Java verwendet und bin gerade auf der Arbeit, also ... Kann es nicht testen, hoffe es ist nicht zu fehlerhaft, sei bitte sanft :).
Übrigens wird awt.Point nur verwendet, weil ich zu faul bin, ein Tupel n_n zu implementieren.
quelle
emptyPosition[emptyPosition.length]=j;
Ihnen immer ein Array außerhalb der Grenzen. Schließlich weiß ich nicht warum, aber Sie stimmen Spieler ab, die nicht in der Runde sind.emptyPosition[emptyPosition.length]
ist es ein blöder Fehler, da Länge immer eins über dem letzten Index ist ^^. Vielen Dank für die Änderungen. Ich werde diese neue Version verwenden, um sie zu korrigieren. Über den ternären Block ... Ja, ich hatte das Gefühl, ihn zu benutzen, und vielleicht war ich es zu gewohnt, für mich selbst zu schreiben. Korrekturen vornehmen und aktualisieren.SniperAide
Vor der Zugabe von PrudentSniper ich einen Bot schrieb Hilfe Sniper schlagen AntiExtremist und andere Betrügereien (benutze ich das Wort mit Liebe). Der Bot, SniperAide, sucht nach Spielern, die wie Scharfschützen abstimmen und abstimmen, so wie es der Fall ist, wenn Konsens herrscht. Wenn alle Spieler wie Scharfschützen aussehen, wählt er das Maximum und schützt die unteren Scharfschützen (die zu diesem Zeitpunkt ebenfalls zum Maximum wechseln würden), auch wenn es sich selbst handelt.
Der Code :
Er hilft derzeit nicht viel gegen PrudentSniper.
quelle
HighOrLowNotSelf
Entfernt zufällig den niedrigsten oder höchsten Intelligenzspieler (aber nicht das Selbst).
quelle
long
, nichtint
. Zweitensops
enthält sich nicht. (Wenn Sie für sich selbst abstimmen möchten, müssen Sie dies ausdrücklich angeben.) Schließlich ist das von Ihnen angegebene if / else kein gültiges Java. Ich habe deinen Code korrigiertAnarchist
Der Anarchist mag keine Regime.
Der Anarchist wird versuchen, den gegenwärtigen Präsidenten zu töten.
Wenn der Anarchist Präsident ist, beschließt er, seine Macht zu missbrauchen und nutzlose Friedensstifter zu töten. Es sei denn, er wurde von einem seiner Untergebenen angegriffen, denn sie sollten stattdessen brennen.
quelle
IndependentVoter
Dieser Bot weiß, dass die allgemeine Bevölkerung immer falsch liegt! Also stimmt es für den, der die geringsten Stimmen bekommt.
Code ist fast identisch mit SolarAarons "Bandwagon", aber die Endlogik ist gespiegelt.
quelle