Testfahrer • Herausforderung Diskussion • Submit Adventurer
( Bildquelle )
Mehrere rivalisierende Abenteurer durchsuchen die Ruinen nach Schätzen, können aber nur so viel auf einmal tragen und haben ihre Grenzen der Ausdauer. Sie möchten den wertvollsten Schatz finden und hinausgehen, bevor sie zu müde werden, um fortzufahren. Sie versuchen, durch ihre Plünderungen so reich wie möglich zu werden.
Gameplay
Jeder Abenteurer beginnt im ersten Raum des Dungeons mit 1000 Ausdauerpunkten und 50 kg Platz im Rucksack.
Das Spiel funktioniert rundenbasiert, wobei alle Spieler gleichzeitig ihre Züge abwickeln. In jeder Runde kannst du eine der folgenden Aktionen ausführen:
- Gehe in den nächsten Raum.
- Zum vorherigen Raum gehen.
- Bieten Sie Ausdauer, um einen Schatz zu nehmen.
- Lass einen Schatz fallen.
Der Wechsel zwischen den Räumen erfordert 10 Ausdauer plus 1 Ausdauer pro 5 kg, die sich gerade in Ihrem Rucksack befinden. Zum Beispiel benötigt ein Abenteurer, der 3 kg Schatz trägt, 11 Ausdauer, und ein Abenteurer, der 47 kg trägt, benötigt 20 Ausdauer, um sich zu bewegen.
Das Fallenlassen eines Schatzes erfordert 1 Ausdauer, unabhängig davon, welcher Schatz gefallen ist.
Beim Verlassen der Ruinen werden vom Spieler keine Züge mehr ausgeführt.
Wenn ein Spieler keine dieser Aktionen ausführen kann (aufgrund mangelnder Ausdauer oder fehlender Schätze), stirbt sein Abenteurer vor Erschöpfung und verschüttet seinen gehaltenen Schatz in den aktuell besetzten Raum. Wenn ein Spieler versucht, eine ungültige Aktion auszuführen, wird sein Abenteurer stattdessen durch eine Falle getötet, was zur gleichen Verschwendung von Schätzen führt.
Bieten
Das Mindestgebot für einen Schatz beträgt 1 Ausdauer pro 1 kg, das der Schatz wiegt. Sie können auch zusätzliche Ausdauerpunkte bieten, um den Schatz mit größerer Wahrscheinlichkeit zu erhalten. Die gebotene Ausdauer wird unabhängig vom Ergebnis verbraucht.
Falls mehrere Spieler geboten haben, denselben Schatz zu nehmen, erhält der Spieler, der das höchste Gebot abgegeben hat, den Schatz. Wenn mehr als ein Spieler das höchste Gebot abgegeben hat, erhält keiner von ihnen den Schatz.
Gewinnbedingung
Der Spieler mit dem höchsten Gesamtwert an Schätzen ist der Gewinner. Im unwahrscheinlichen Fall eines Unentschieden gehen die Unentschieden zum kleinsten Gesamtgewicht, dann zur kleinsten Anzahl von Schätzen, dann zum Wert des wertvollsten Schatzes, zum zweitwertvollsten, zum dritten ... bis das Unentschieden gebrochen ist. Für den nahezu unmöglichen Fall, dass es an dieser Stelle noch ein Unentschieden gibt, sagt der Testfahrer "Screw it" und der Sieger wird dabei willkürlich ermittelt.
Im Rahmen des Turniers erhalten die Spieler den ersten Platz mit 10 Punkten, den zweiten Platz mit 9 Punkten, den dritten Platz mit 8 Punkten usw., wobei tote Spieler und Abenteurer ohne Schätze 0 Punkte erzielen.
Über die Ruinen
- Jeder Raum enthält anfangs zwischen undSchätze. (Wobeidie Zimmernummer ist)
- Es gibt beliebig viele Räume, die nur durch die Ausdauer und Erkundungsbereitschaft der Abenteurer begrenzt sind.
- Jeder Schatz hat einen Geldwert (in ganzen $) und ein Gewicht (in ganzen kg).
- Schätze sind in der Regel wertvoller und zahlreicher, wenn Sie tiefer in die Ruinen vordringen.
- Die spezifischen Formeln zum Erzeugen von Schätzen lauten wie folgt: (Verwenden der -Notation für Würfelwürfe)
- Das Gewicht wird zuerst mit der Formel berechnet. D 6 - 2 (mindestens 1)
- Der Schatzwert wird dann über (wobei die Raumnummer und das Gewicht ist).
Für Spieler sichtbare Informationen
In jedem Zug erhalten die Spieler die folgenden Informationen:
- Die Nummer des Raums, in dem sie sich gerade befinden. Dies ist 1-indiziert, daher befindet sich der Ausgang konzeptionell bei "Raum 0".
- Eine Liste der aktuell im Raum befindlichen Schätze
- Eine Liste der anderen Spieler, die sich ebenfalls gerade im Raum befinden.
- Ihr aktueller Schatzbestand
- Ihre aktuelle Ausdauer
Codierung
Den Testfahrer finden Sie hier .
Sie sollten eine Unterklasse davon implementieren Adventurer
Klasse :
class Adventurer:
def __init__(self, name, random):
self.name = name
self.random = random
def get_action(self, state):
raise NotImplementedError()
def enter_ruins(self):
pass
Sie müssen nur die get_action
Methode überschreiben . enter_ruins
wird ausgeführt, bevor ein Spiel beginnt, und ist Ihre Chance, alles vorzubereiten, was Sie für das Spiel bereithalten möchten. Sie müssen nicht überschreiben __init__
, und Sie sollten es wirklich nicht tun . Wenn Sie __init__
abstürzen, werden Sie disqualifiziert.
get_action
erhält ein einziges Argument, das a ist namedtuple
mit den folgenden Feldern (in dieser Reihenfolge, wenn Sie die Destrukturierung bevorzugen):
room
: Die Nummer des Raumes, in dem Sie sich gerade befindentreasures
: die Liste der Schätze im Raumplayers
: die Liste der anderen Spieler im Raum. Auf diese Weise erhältst du nur den Spielernamen, sodass du nicht weißt, welcher Bot sie kontrolliert oder welches Inventar / welche Ausdauer sie haben.inventory
: die Liste der Schätze in Ihrem Rucksackstamina
: Ihre aktuelle Ausdauer
Dieses Objekt bietet zusätzlich zwei Utility-Eigenschaften:
carry_weight
: das Gesamtgewicht aller Schätze, die Sie tragentotal_value
: der Gesamtwert aller Schätze, die Sie tragen
Die treasures
und inventory
Listen enthalten namedtuple
s mit diesen Attributen:
name
: der Name des Schatzes (für kosmetische Zwecke)value
: der Geldwert des Schatzes in $.weight
: das Gewicht des Schatzes in kg
get_action
sollte einen der folgenden Werte / Muster zurückgeben:
'next'
oder'previous'
, um zum nächsten / vorherigen Raum zu wechseln'take', <treasure index>, <bid>
(Ja, als Tupel, obwohl jede Sequenz auch technisch funktioniert), um auf den Schatz an dem angegebenen Index in der Schatzliste des Raums zu bieten. Beide Argumente sollten Ganzzahlen sein. Schwimmer werden abgerundet.'drop', <inventory index>
den getragenen Schatz fallen zu lassen, der bei dem gegebenen Index gefunden wurde. Der Index sollte (natürlich) eine ganze Zahl sein.
Andere Einschränkungen
- Sie dürfen nur die zufällige Instanz verwenden, die Ihnen während der Initialisierung für Pseudozufälligkeit zur Verfügung gestellt wurde.
- Alles andere, was einen verhaltensbedingten Nichtdeterminismus hervorrufen könnte, ist nicht erlaubt. Die Absicht hierbei ist, dass Bots sich identisch verhalten, wenn sie denselben Startwert erhalten, um beim Testen neuer Bots (und potenziellen Bugs im Testtreiber) zu helfen. Nur kosmische Strahlung sollte Abweichungen / Nichtdeterminismus verursachen.
- Denken Sie daran, dass Hash-Codes in Python 3 zufällig angeordnet sind, sodass die Verwendung
hash
für Entscheidungen nicht zulässig ist.dict
s sind in Ordnung, auch wenn die Iterationsreihenfolge für Entscheidungen verwendet wird, da die Reihenfolge seit Python 3.6 garantiert konsistent ist.
- Sie dürfen den
ctypes
Testtreiber nicht mit Hacks oderinspect
Stack-Voodoo (oder einer anderen Methode) umgehen . Es gibt einige beeindruckend beängstigende Dinge, die Sie mit diesen Modulen tun können. Bitte nicht- Jeder Bot ist durch defensive Kopien und die natürliche Unveränderlichkeit von einigermaßen gut in Sandkästen eingeschlossen
namedtuple
s , aber es gibt einige unverbesserliche Schlupflöcher / Exploits. - Andere Funktionen von
inspect
undctypes
können verwendet werden, sofern keine davon zur Umgehung der Steuerungsfunktionen verwendet wird. - Es ist nicht zulässig, Instanzen der anderen Bots in Ihrem aktuellen Spiel zu erfassen.
- Jeder Bot ist durch defensive Kopien und die natürliche Unveränderlichkeit von einigermaßen gut in Sandkästen eingeschlossen
- Bots sollten alleine agieren und dürfen sich in keiner Weise für irgendeinen Zweck mit anderen Bots koordinieren. Dies beinhaltet das Erstellen von zwei Bots mit unterschiedlichen Zielen, sodass sich einer für den Erfolg des anderen opfert. Sobald es mehr als 10 Konkurrenten gibt, kann nicht garantiert werden, dass die beiden Bots im selben Spiel sind, und die Namen der Abenteurer geben keinen Hinweis auf die Bot-Klasse. Daher sind diese Arten von Strategien ohnehin begrenzt.
- Derzeit gibt es keine feste Beschränkung der Ausführungszeit. Ich behalte mir jedoch das Recht vor, die Ausführungszeit in Zukunft zu beschränken, wenn Turniere zu lange dauern. Seien Sie vernünftig und versuchen Sie, die Verarbeitung unter 100 ms zu halten , da ich nicht damit , sie unter diesen Schwellenwert einschränken zu müssen. (Turniere dauern ungefähr 2 Stunden, wenn alle Bots ungefähr 100 ms pro Runde benötigen.)
- Ihre Bot-Klasse muss unter allen Einsendungen eindeutig benannt sein.
- Sie können sich an nichts zwischen Spielen erinnern. (Sie können sich jedoch an Dinge zwischen den Runden erinnern )
- Bearbeiten Sie keine sys.modules. Alle externen Instanzvariablen sollten als Konstante behandelt werden.
- Sie dürfen den Code eines Bots einschließlich Ihres eigenen Codes nicht programmgesteuert ändern.
- Dies beinhaltet das Löschen und Wiederherstellen Ihres Codes. Dies soll das Debuggen und die Turniere rationalisieren.
- Jeder Code, der zum Absturz des Controllers führt, wird sofort disqualifiziert. Während die meisten Ausnahmen abgefangen werden, können einige durchrutschen und Fehler können nicht abgefangen werden. (Ja, Sie können in Python dank segfault
ctypes
)
Einreichungen
Geben Sie oben in der Antwort den Namen Ihres Bots mit einem an, um die Antwortverwaltung zu vereinfachen #Header1
und stellen Sie sicher, dass Ihre Antwort mindestens einen Codeblock enthält (nur der erste in Ihrer Antwort wird verwendet). Sie müssen keine Importe oder Dokumentzeichenfolgen einfügen, da diese vom Scraper automatisch hinzugefügt werden.
Ich werde eher geneigt sein, Antworten mit detaillierten und verständlichen Erklärungen abzustimmen. Andere werden sich wahrscheinlich genauso verhalten.
Grob gesagt sollte Ihre Antwort so formatiert sein:
# Name of Bot
Optional blurb
#imports go here
class BotName(Adventurer):
#implementation
Explanation of bot algorithm, credits, etc...
(gerendert als)
Name des Bots
Optionaler Klappentext
#imports go here class BotName(Adventurer): #implementation
Erklärung von Bot-Algorithmen, Credits, etc ...
Lokales Ausführen des Testtreibers
Sie benötigen Python 3.7+ und ich empfehle, dass Sie auch tabulate
über Pip installieren . Das Scrappen dieser Seite für Einreichungen erfordert zusätzlich lxml
und requests
. Sie sollten auch ein Terminal mit Unterstützung für ANSI-Farbverluste verwenden, um optimale Ergebnisse zu erzielen. Informationen zum Einrichten in Windows 10 finden Sie hier .
Fügen Sie Ihren Bot zu einer Datei in einem Unterverzeichnis in demselben Verzeichnis wie ruins.py
( ruins_bots
standardmäßig) hinzu und stellen Sie sicher, dass Sie ihn from __main__ import Adventurer
oben im Modul hinzufügen . Dies wird zu den Modulen hinzugefügt, wenn der Scraper Ihre Einreichung herunterlädt, und obwohl es definitiv hacky ist, ist dies die einfachste Möglichkeit, um sicherzustellen, dass Ihr Bot richtig Zugriff hat Adventurer
.
Alle Bots in diesem Verzeichnis werden zur Laufzeit dynamisch geladen, sodass keine weiteren Änderungen erforderlich sind.
Turnier
Der endgültige Sieger wird in einer Reihe von Spielen mit bis zu 10 Bots in jedem Spiel ermittelt. Bei mehr als 10 Einsendungen werden die 10 besten Bots ermittelt, indem sie systematisch in 10er-Gruppen aufgeteilt werden, bis jeder Bot (genau) 20 Spiele gespielt hat. Die Top 10 Bots werden aus dieser Gruppe mit zurückgesetzten Punktzahlen ausgewählt und spielen solange, bis der Erstplatzierte einen Vorsprung von 50 Punkten vor dem Zweitplatzierten erreicht hat oder bis 500 Spiele gespielt wurden.
Bis mindestens 10 Einsendungen vorliegen, werden leere Slots mit "Säufer" gefüllt, die nach dem Zufallsprinzip durch die Ruinen wandern und zufällige Schätze einsammeln (und gelegentlich fallen lassen), bis ihnen die Ausdauer ausgeht und sie geradewegs zum Ausgang müssen.
Turniere werden wöchentlich wiederholt, wenn neue Einreichungen vorliegen. Dies ist eine offene KOTH-Challenge ohne festgelegtes Enddatum.
Bestenliste
Vom Lauf am 4. Mai 2019 um 16:25 Uhr MEZ: (04.05.2019 16:25 - 06:00 Uhr)
Seed: K48XMESC
Bot Class | Score | Mean Score
--------------+---------+--------------
BountyHunter | 898 | 7.301
Scoundrel | 847 | 6.886
Accountant | 773 | 6.285
Ponderer | 730 | 5.935
Artyventurer | 707 | 5.748
PlanAhead | 698 | 5.675
Sprinter | 683 | 5.553
Accomodator | 661 | 5.374
Memorizer | 459 | 3.732
Backwards | 296 | 2.407
Update - 15. April: Einige Regel-Updates / Klarstellungen
Update - 17. April: Verbot einiger bemerkenswerter Fälle schändlicher Handlungen wie das Ändern des Codes anderer Bots.
Update - 4. Mai: Sleafar erhält Kopfgeld, weil er Rückwärts absolut zerstört hat. Herzliche Glückwünsche!
quelle
pip
installiert habenPATH
(was bei neueren Installationen AFAIK Standard ist), können Sie über Windowspip install modulename
in der Eingabeaufforderung ausführen . Für andere Umstände (von denen ich nichts weiß) gehe zu pip , suche nach dem benötigten Modul und wähle eine Option.Antworten:
Buchhalter
Der Buchhalter ist eine sehr risikoaverse Person. Er möchte sicher sein, dass das, was er tut, in der gegebenen Situation die beste Option ist. Also setzt er sich ein Ziel und sammelt nur dann Schätze, wenn seine Berechnungen zeigen, dass er auf dem richtigen Weg zu diesem Ziel ist. Er ist jedoch sehr bürokratisch und mag es nicht, Gegenstände fallen zu lassen, für die er sich bereits entschieden hat; Alle Versuche, ihm dies beizubringen, führten bisher dazu, dass der Buchhalter einen Gegenstand fallen ließ und ihn unmittelbar danach wieder aufnahm.
Möglicherweise wird fortgesetzt.
quelle
Accomodator
Basiert locker auf meinem anderen LightWeight-Bot. Wo Lightweight bietet einfach war, dann ist dies bietet viel komplexer , um zu empfangen Wechselwirkungen mit anderen Bots: sowohl gutartige als auch deliberatly distruptive.
Dieser Bot sprintet zuerst in einen zufällig zugewiesenen Raum und versucht dann, nach dem besten Wert / Gewicht-Verhältnis-Schatz zu bieten. Wenn sich noch andere Spieler im Raum befinden, wird davon ausgegangen, dass sie ebenfalls bieten, statt nach dem zweitbesten Schatz zu bieten. Wenn dieses Gebot fehlschlägt, bieten Sie in der nächsten Runde für den nächstbesten Schatz.
Sobald ein Gebot erfolgreich war, wiederholen Sie das Bieten um das beste / zweitbeste, bis keine Schätze mehr im Raum vorhanden sind, und bewegen Sie sich dann tiefer in die Ruine
Geben Sie für jeden Raum in die Ruine ein und wiederholen Sie das Bieten um das Beste / Zweitbeste, bis keine Schätze mehr im Raum vorhanden sind, und bewegen Sie sich dann tiefer in die Ruine. Wenn wir feststellen, dass wir nicht tiefer gehen können, wechseln Sie in den Status "Verlassen" und beginnen Sie, das Schlimmste fallen zu lassen Schatz, bis wir garantieren können, dass wir die Ruine lebend verlassen können.
Wenn wir den Status verlassen, werden wir prüfen, ob wir 1 kg Schatz hinzufügen können und es trotzdem lebend herausfinden. Wenn dies der Fall ist, werden wir versuchen, auf einen 1 kg Schatz zu bieten. Wenn nicht, werden wir in den vorherigen Raum gehen.
Seine Leistung ist sehr unterschiedlich ... normalerweise wird er jedoch einer der drei besten Bots sein.
quelle
Sprinter
Ähnlich wie der Taucher geht Sprinter in die Tiefe und sammelt die besten Gegenstände auf dem Rückweg ein.
Sprinter geht in die Tiefe, berechnet dann eine Punktzahl für jeden Schatz und nimmt alles auf, was eine bestimmte Schwelle überschreitet. Diese Schwelle hängt von dem Raum ab, in dem er sich gerade befindet, da die Entnahme von Gegenständen aus tiefer gelegenen Räumen mehr kostet.
Ich habe noch 2 Optimierungen in Bezug auf "Fighting for Treasure", die für die nächsten Tage geplant sind.
17.04 .: Scoundrel wurde zu schlau, Sprinter entschloss sich, ihn in eine Falle zu schieben. Anfangs wollte ich jeden Bot töten, der versuchte, Sprinter aufzurufen, aber der Testfahrer handhabt leider keine Ausnahmen, die bei Init auftreten. Das nächste Update für Scoundrel ist also ganz einfach ...
quelle
Vorausplanen
Ich habe die besten / schlechtesten Berechnungsmerkmale von Artemis Fowl verwendet , aber die Auswahllogik ist ganz von mir selbst und wurde seitdem geändert, um einige zusätzliche Faktoren zu berücksichtigen, z Schatz, nur um zurückzugehen, ihn fallen zu lassen und etwas anderes aufzuheben).
Bot Ventures, die so tief gehen, wie es für einigermaßen sicher gehalten wird (diese Berechnung funktioniert effektiv bis zu einer bestimmten Tiefe, hat jedoch die Flexibilität, mit anderen anfänglichen Ausdauerwerten umzugehen), sammeln dann Artefakte (priorisieren hohe Kosten und geringes Gewicht) beginnt sich zurückzuziehen, sobald es feststellt, dass es nicht mehr tragen kann.
Auf dem Weg nach draußen sammelt es zusätzliche Schätze, die es sicher zum Ausgang tragen kann. Es wird sogar bereits vorhandene Artefakte fallen lassen, wenn das neue Angebot besser ist und nicht zu Erschöpfung führt. Wenn es Platz im Rucksack hat, wird der neue Schatz aufgesammelt, bevor der niedrigere abgeworfen wird, wodurch der Kampf mit anderen Bots minimiert wird.
quelle
__init__
Funktion ist bereits implementiert, Sie müssen sie nicht überschreiben.Artyventurer
Schlägt die Säufer um etwa 1000 Dollar! Konnte nicht an einen kreativen Namen denken, aber hier sind Sie:
Manchmal macht der größte Teil des Codes hier nie etwas (zumindest wenn ich ihn gegen Drunkards teste), das Programm versucht nur den besten Zug zu finden, einschließlich der Verarbeitung für Situationen, in denen es versucht, sich nicht selbst zu versetzen. Einiges davon kann nie laufen, es ist nur da, damit ich mit den Zahlen herumspielen kann, die wahrscheinlich noch verbessert werden können.
Erläuterung
if state.inventory ... worsti = None
Finden Sie den 'schlechtesten' Gegenstand im Inventar, dh den Gegenstand mit dem niedrigsten Verhältnis von Wert zu Gewicht. Es speichert
worsti
den Index, den Wert und das Gewicht als Tupel oderNone
wenn sich keine Gegenstände im Inventar befinden.if self.drop ... return 'drop', worsti[0]
Wenn ich ihm sagte, dass er diese Runde in der letzten Runde fallen lassen soll (siehe unten), kann er den oben berechneten "schlimmsten" Gegenstand fallen lassen.
extra = ... * state.room
Berechnen Sie, wie viel Ausdauer es übrig geblieben wäre, wenn ich gesagt hätte, dass es sofort zurückgehen soll.
if extra > CONTINUE_IN:\ return 'next'
Wenn es mehr als CONTINUE_IN ist, kehren Sie zurück
'next'
.if extra < 0 and worsti:\ return 'drop', worsti[0]
Wenn es kleiner als ist
0
, lass das schlechteste Objekt fallen.if extra < state.room:\ return 'previous'
Wenn es weniger als die Zimmernummer ist (kann keinen Schatz mehr tragen), gehe zurück.
if state.treasures: ... bestt = None
Finde den besten Schatz, den du nehmen kannst, ähnlich dem schlechtesten Gegenstand im Inventar oben. Speichern Sie es in
bestt
.if extra > 0 and bestt: ... return 'take', bestt[0], bid
Bei aktuellen Zahlen wird dies ausgeführt, sobald wir soweit sind und ein Schatz verfügbar ist. Wenn es sicher ist, den 'besten' Schatz zu nehmen, tut es das auch. Das Gebot ist das Minimum oder eines mehr, wenn jemand anwesend ist.
if bestt and worsti: ... return 'take', bestt[0], bid
Bei aktuellen Nummern wird dieser Codeblock niemals ausgeführt, da der vorherige Codeblock eine umfassendere Bedingung aufweist. Dies wird ausgeführt, wenn wir so weit sind und beide Schätze in meinem Inventar und im Raum sind. Wenn der 'beste' Schatz im Raum wertvoller ist als der 'schlechteste' Schatz in meinem Inventar und es sicher ist, sie in den nächsten zwei Runden zu tauschen, ist dies der Fall.
return 'previous'
Wenn nichts davon passiert, gehe einfach zurück.
Update 16.04.19:
Anti-Schurken-Maßnahmen. Dies wird zu einem Bieterkrieg :(
Weiteres Update 16.04.19:
Zurückgesetztes vorheriges, stattdessen wechselt zufällig jedes andere Element, wenn es das beste findet, z.
[1, 2, 3, 4, 5, 6] → [2, 1, 3, 4, 6, 5]
. Sollte schwerer zu kopieren sein :).Update 17/04/19:
Vorher zurückgesetzt, löscht es stattdessen seinen eigenen Quellcode . Es tut dies,
__init__
was immer vorher sein wirdScoundrel.enter_ruins
, und hindert Scoundrel daran, es zu laden. Es ersetzt seinen Code, wennget_action
ersten Aufruf, damit er für das nächste Mal bereit ist. BEHOBEN, Scoundrel stirbt jetzt bei der Ankunft.Weiteres Update 17.04.19:
Vorher zurückgesetzt, ersetzt es stattdessen seinen
sys.modules
Eintrag durch das Mathematikmodul, sodass es stattdessen das Mathematikmodul lädt, wenn Scoundrel versucht, es zu laden. :)Außerdem habe ich gerade erst gemerkt, dass die Bewegungsausdauer 10 + Gewicht / 5 beträgt , also habe ich versucht, das zu beheben.
Weiteres Update 17.04.19:
Enthält jetzt Knoblauch aus beiden vorherigen Updates.
Update 18.04.19:
Wenn Sie mit Zahlen und Berechnungen experimentieren, erhalten Sie jetzt $ 2000 - $ 3000.
Weitere Aktualisierung 18.04.19:
Entfernt den verbotenen Knoblauch zum Löschen von Dateien und fügt neuen Knoblauch hinzu, der sicherstellt, dass er
'draco'
nicht dafür verantwortlich ist, dass er ausgeführt wird, wenn er geradeprevious
beim ersten Zug zurückkehrt. Die Ergebnisse haben einen mysteriösen Sprung auf 1200 bis 1800 US-Dollar gemacht, auf den ich mich gerade konzentriere.quelle
Der Schurke
Der Schurke arbeitet hauptsächlich, um andere Teilnehmer zu stören. Derzeit stört es Sprinter, Artyventurer und Accountant (diese Liste wird im Laufe der Zeit erweitert, sofern dies im Interesse des Schurken liegt). Dies geschieht, indem die anderen Bots nachgeahmt werden und dann entweder überboten, unterschnitten oder auf andere Weise um Relikte gekämpft wird. Insofern ist es unwahrscheinlich, dass dieser Eintrag jemals die Rangliste dominiert und stattdessen als verwöhnende Kraft wirkt. Die aktuelle Version zum Zeitpunkt der Veröffentlichung belegt den 2. Platz mit einer durchschnittlichen Punktzahl von ca. 7.
Scoundrel vereitelt den Versuch eines anderen Bots, sich gegen den Scoundrel zu verteidigen, indem er den Code des anderen Teilnehmers direkt als nicht unterscheidbare Klonkopie ausführt. Probleme mit Importen, die zu doppelten Einträgen führten, wurden behoben, indem die Klone über Reflection erstellt wurden (Bearbeitungskriege mit genauen Details der mathematischen Bestimmung sind aus Sicht des Stapelaustauschs nicht wünschenswert, würden jedoch zum gleichen Ergebnis führen). Die KOTH-Herausforderungen haben es in der Vergangenheit auch zugelassen.
Schurke ersetzt die Teamsters, um die Teamsters interessant zu halten. Nach dieser Bearbeitung sollten Teamsters nicht mehr vom Controller geschabt werden.
Update 17.04.2013: Weitere Gegenmaßnahmen.
Die Teamsters (illegal gemacht)
Aber fühle dich frei, vor Ort zu rennen, wo es nicht mehr als 8 andere Teilnehmer gibt!
Dieser Eintrag (der jetzt ausdrücklich ungültig ist) ist tatsächlich zwei Bots, und der Controller freut sich schabt sie beide und fügt sie der Kandidatenliste hinzu (weil Hurra, Python?).
Phase 1:
1. Wenn es keinen Schatz gibt, der weniger als 3 wiegt, bewegt er sich nach unten.
2. Da er so ziemlich garantiert der letzte ist Abenteurer ist, der an die Oberfläche zurückkehrt, muss er nur jemanden finden.
Phase 2:
Der Name der Schätze erwies sich als nützlich, um der Logik zu helfen, keinen Müll auf Etage 25 zu laden und früh zu verschwinden, da es keine Möglichkeit gab, zwischen den beiden Bots zu kommunizieren (und TeamsterA befand sich vorher immer in einem Raum mit jemand anderem TeamsterB war zurückgekehrt).
Die nächste logische Schlussfolgerung: Eine Armee aufstellen
Theoretisch könnte dies verwendet werden, um die Tiefen auszuloten und Schätze aus der Tiefe von Raum 98 zu sammeln. Da dies jedoch mehr als zwei Bots erfordern würde, würde die Logik, die diese Bots umfasst, immer komplexer, und da ich mir sicher bin, dass dies der Fall ist eine illegale Einreichung wegen Verstoßes gegen eine ungeschriebene Regel, also werde ich mich nicht darum kümmern.
A
Wartet effektiv um 30,B
wartet um 50 ...n
springt auf 98, nimmt einen Schatz auf, geht auf 97, lässt ihn fallen (und stirbt dann),n-1
nimmt ihn auf und geht auf 96 ...C
lässt ihn fallen (stirbt),B
holt ihn ab auf und geht auf 30, lässt es fallen (stirbt),A
nimmt es auf und kehrt zum Ausgang zurück.Ich schätze, dass dies 11 Bots dauern würde.
Es lohnt sich jedoch nicht, es sei denn, Sie können ungefähr 4 Schätze aus dieser Tiefe bergen, um mit Einträgen wie PlanAhead oder Artyventure zu konkurrieren. Dies liegt an der Skalierung zwischen den Ausdauer-Bewegungskosten und dem Durchschnittswert der Schätze.
Probenergebnisse
Erzielt selten weniger als 4000 US-Dollar und erreicht gelegentlich 6000 US-Dollar.
quelle
Rückwärts
Weil es umgekehrt funktioniert
Warum heißt es Rückwärts?
Weil ich den Buchhalter mitgenommen habe und versucht habe, ihn so zu logisieren, dass er tief taucht und dann seine bevorzugte Beute auf dem Weg nach draußen aufnimmt (rückwärts vom Buchhalter).
Am Ende sammelt es immer noch einen Großteil seiner Preise auf dem Weg hinein (es schöpft sie aus, bevor es die traditionellen In-Collect-Out-Sucher tun, die rückwärts zu allen anderen agieren), aber es ist viel selektiver welche es nimmt, obwohl es immer noch nimmt Dinge auf dem Rückweg auf.
Das Endergebnis ist, dass die Ausdauer auf dem Weg nach innen erhalten bleibt, während immer noch hochwertige Schätze im Vordergrund stehen. Auf dem Weg nach oben profitieren Sie dann von einer tiefen Wendung und einer leichten Ernte. Es ist bekannt, dass Rückwärts Schätze aus der Tiefe von Raum 41 sammelt (und während der Entwicklung Raum 42 betritt und dann sofort verlässt).
quelle
Kopfgeldjäger
Die einfache Methode ist die beste. Sammle wertvolle und leichte Schätze und gehe dabei so tief wie möglich. Besorgen Sie sich auf dem Rückweg weniger wertvolle Schätze.
quelle
Leicht
Ein einfacher Bot, der immer noch recht gut abschneidet.
Nach dem Betreten der Ruinen (derzeit 21 Räume) wird der beste Schatz im Raum gefunden, der nur 1 kg wiegt (daher der Name des Bots) und wertvoller ist als der am wenigsten wertvolle Schatz im Inventar. Wenn das Inventar voll ist, lasse den am wenigsten wertvollen Schatz fallen. Wenn keine andere Aktion ausgewählt ist, erfolgt der Einzug in die Ruinen. Wenn wir an der Grenze unserer Ausdauer sind, um lebend herauszukommen, begeben wir uns zum Ausgang
quelle
dumping
dieenter_ruins
Methode einzufügen. Dies wird sich tatsächlich zwischen den Spielen daran erinnern und wird bei Spiel 2 nicht funktionieren. Technisch nicht erlaubt, aber ich habe die Regel erst jetzt hinzugefügt (ich habe es vorher vergessen, aber es war meine Absicht), also werde ich ein wenig nachlassen. : PAuswendiglernen
Ich kann Bots an meine eigene KotH senden, oder?
Dieser Bot taucht in Raum 30 und merkt sich alle Schätze, die er gesehen hat. An diesem Punkt beginnt er seinen Rückweg zum Eingang und versucht, gute Schätze zu sammeln, an die er sich in früheren Räumen erinnert hatte.
Ich hoffte, es würde besser gehen. Mögliche Verbesserungen ergeben sich möglicherweise aus einer besseren Planung und einer dynamischeren Ermittlung des Raums, in dem nicht mehr getaucht wird, sowie aus einer größeren Bereitschaft, die Backup-Optionen zu prüfen.
Update: Schnappt euch jetzt 1 kg Schätze im Wert von 60 USD oder mehr.
quelle
[Turn 072] Ryu Ridley (Memorizer) collapsed in the doorway to room #1 and died of exhaustion
Ponderer
Ich denke, es ist Memorizer ziemlich ähnlich, da es die Kenntnis der besuchten Räume verwendet, um auszuwählen, welche Räume und Schätze auf dem Weg zurück zum Ausgang gesammelt werden sollen. Es wurde jedoch unabhängig abgeleitet.
Dieser Bot sprintet, bis ein zufälliger tiefer Raum eine Aufzeichnung der unterwegs gefundenen Schätze aufnimmt. Sobald es im Zielraum angekommen ist, wird es über die ideale Auswahl an Schätzen nachdenken , die es auf dem Weg zurück zum Ausgang findet. Jede Runde wird es erneut nachgedacht , um die wahrscheinlich beste Auswahl an Schätzen zu finden.
Derzeit gibt es einen einfachen Algorithmus (Potenz der Raumnummer umgekehrt), der die angenommene Anzahl an Schätzen ergibt, die für jeden Raum genommen wurden (oder genommen wurden, wenn dieser Bot ihn besucht). Diese Schätze werden ignoriert, wenn über welche Schätze / Räume nachgedacht wird zu nehmen aus. Ich habe Ideen für andere fortgeschrittene Algorithmen, um zu modellieren, welche Schätze noch vorhanden sind. Aber ich werde sehen müssen, ob sich der Nutzen lohnt.
quelle
Hamsterer
Der Hamsterer bleibt in einem Raum, bis er alle Schätze im Raum genommen hat (oder berechnet, dass er nicht genug Ausdauer hat, um weiterzumachen). Wenn alle Schätze verschwunden sind und der Bot sich sicher fortbewegen kann, wird er den Prozess fortsetzen, alle Schätze zu nehmen.
quelle
Backwards
's,Sprinter
' s undMemorizer
's Strategie arbeiten; weil sie wissen, was die relativen Werte jedes Schatzes sind, den sie sehen.Taucher
(Kann im Moment nicht testen, lass es mich wissen, wenn dies kaputt ist.)
Der beste Schatz liegt tiefer in den Ruinen. Tauchen Sie also tief ein und holen Sie sich auf dem Weg nach draußen, was wir können.
quelle
diving
definiert?Jacob the Orphan (Diver) was sliced in half by a swinging blade trap.
Ich bin mir nicht sicher, was Sie falsch gemacht haben, aber das bedeutet, dass die AFAIK ungültig ist.