Frage

Ein Freund von mir ist zu Beginn bauen Sie ein NetHack-bot (ein bot der spielt Lustiges Spiel:NetHack).Es gibt einen sehr gut funktionierenden bot für das ähnliche Spiel Angband, aber es funktioniert teilweise, weil Sie die Leichtigkeit zurück in die Stadt und immer in der Lage, Abschaum niedrigen Ebenen zu gewinnen Positionen.

In NetHack, das problem ist viel schwieriger, weil das Spiel belohnt ballsy Experimentieren und ist gebaut, im Grunde als 1.000 edge-Fällen.

Vor kurzem habe ich vorgeschlagen, eine Art naive Bayes-Analyse, in sehr viel die gleiche Weise wie spam erstellt.

Im Grunde würde der bot auf den ersten build-Korpus, indem Sie versuchen, jedes mögliche Aktionen mit jedem Objekt oder eine Kreatur, die es findet, und speichern diese Informationen mit, wie beispielsweise in der Nähe, die einen Tod, Verletzung der negativ war.Im Laufe der Zeit scheint es, wie Sie generieren konnte ein halbwegs spielbar Modell.

Kann mir jemand zeigen, der uns in die richtige Richtung, was ein guter Anfang wäre?Bin ich auf dem Holzweg oder Missverständnis der Idee der Bayes-Analyse?

Edit: Mein Freund legte ein github repo seiner NetHack patch , dass ermöglicht die python-Bindungen.Es ist immer noch in einem ziemlich primitiven Zustand, aber wenn jemand interessiert ist...

War es hilfreich?

Lösung

Obwohl Bayes-Analyse viel mehr umfasst, Algorithmus, um die Naive Bayes auch von Spam-Filter bekannt auf eine sehr grundlegende Annahme beruht: alle Variablen sind im wesentlichen unabhängig voneinander. So zum Beispiel in dem Spam jedes Wortes Filterung wird in der Regel als Variable behandelt, so das bedeutet unter der Annahme, dass, wenn die E-Mail das Wort ‚Viagra‘ enthält, ist, dass das Wissen um die Wahrscheinlichkeit beeinflussen, dass es auch das Wort enthält ‚Medizin‘ (oder ‚foo "oder‚Spam‘oder irgendetwas anderes). Das Interessante daran ist, dass diese Annahme ist ganz offensichtlich falsch, wenn es um natürliche Sprache kommt aber immer noch gelingt, vernünftige Ergebnisse zu erzielen.

Jetzt ein Weg, um Menschen manchmal die Unabhängigkeit Annahme ist, Variablen zu definieren, die technisch Kombinationen von Dingen sind (wie für das Token suchen ‚buy viagra‘). Das kann funktionieren, wenn Sie bestimmte Fälle kennen, aber im Allgemeinen zu suchen, in einer Spielumgebung, es bedeutet, dass Sie nicht im Allgemeinen nichts erinnern kann. So ist jedes Mal, wenn Sie bewegen müssen, eine Aktion auszuführen, usw., seine völlig unabhängig von allem anderen haben Sie bisher getan. Ich würde sagen, selbst für die einfachsten Spiele, ist dies ein sehr ineffizienter Weg, um das Spiel zu gehen, um zu lernen.

Ich würde vorschlagen, Blick in der Verwendung q-Learning statt. Die meisten Beispiele werden Sie feststellen, sind in der Regel nur einfache Spiele sowieso (wie das Lernen, um eine Karte zu navigieren, während Wände zu vermeiden, Fallen, Monster, etc). Verstärkung Lernen ist eine Art von Online-Lernen ohne Aufsicht, die wirklich gut funktioniert in Situationen, die als ein Mittel, die Interaktion mit einer Umgebung, wie ein Spiel (oder Roboter) modelliert werden können. Er tut dies, versucht in jedem Zustand, um herauszufinden, was in der Umgebung die optimale Wirkung ist (wobei jeder Staat so viele Variablen wie benötigt enthalten kann, viel mehr als nur ‚Wo bin ich‘). Der Trick ist, dann gerade genug Zustand halten, den die Bot macht gute Entscheidungen helfen, ohne für jede mögliche Kombination von früheren Maßnahmen einen deutlichen Punkt in Ihrem Zustand ‚Raum‘ ist.

setzen, die in Konkreter, wenn Sie ein Schach Bot zu bauen sind Sie wahrscheinlich Schwierigkeiten haben würden, wenn man versucht, eine Entscheidung Politik zu schaffen, dass Entscheidungen auf der Grundlage aller vorherigen bewegt, da die Menge aller möglichen Kombinationen von Schachzug wächst sehr schnell. Selbst ein einfacheres Modell, wo auf dem Brett jedes Stück ist noch ein sehr großer Zustandsraum, so dass Sie einen Weg finden müssen, zu vereinfachen, was den Überblick zu behalten. Beachten Sie aber, dass Sie den Überblick über einigen Zustand zu halten bekommen, so dass Ihr Bot hält nicht nur versucht, ein linkes Glied in einer Mauer zu machen und immer wieder.

Artikel ist ziemlich Jargon schwer, aber diese

Andere Tipps

Es gibt Präzedenzfall: das monströse rog-o-matic-Programm ist es gelungen, Spiel Schelm und sogar mit dem Amulett von Yendor ein paar Mal zurück. Leider war Schelm nur eine binäre, nicht Quelle freigegeben, so dass er gestorben ist (es sei denn, Sie ein 4.3BSD-System auf einem MicroVAX einrichten können), so dass rog-o-matic nicht in der Lage eine der Klone zu spielen. Es ist einfach hängt cos sie sind nicht nah genug Emulationen.

Allerdings rog-o-matic ist, glaube ich, mein Lieblingsprogramm aller Zeiten, nicht nur aufgrund dessen, was sie wegen der Lesbarkeit des Codes erreicht, sondern und die nachvollziehbare Intelligenz seiner Algorithmen. Es verwendete „genetische Vererbung“: ein neuer Spieler eine Kombination von Präferenzen von einem vorherigen Paar erfolgreicher Spieler erben würde, mit einiger zufälligen, dann auf der Maschine ausgespielt werden. Weitere erfolgreiche Präferenzen würde im Genpool wandern und weniger erfolgreichen nach unten.

Die Quelle kann schwer sein, in diesen Tagen zu finden, aber die Suche „rogomatic“ werden Sie auf dem Pfad festgelegt.

Ich bezweifle, dass der Bayes ' schen Analyse erhalten Sie weit, weil die meisten von NetHack ist hoch kontextabhängig.Es gibt nur sehr wenige Maßnahmen, die immer eine schlechte Idee;die meisten sind auch lebensrettern in der "richtigen" situation (ein extremes Beispiel ist Essen ein cockatrice:das ist schlecht, es sei denn, Sie sind ausgehungert und derzeit verwandelt sich in einen Stein-gegen-monster, in welchem Fall Essen die cockatrice ist die richtige Sache zu tun).Einige dieser "fast bösen" Handlungen sind erforderlich, um das Spiel zu gewinnen (z.B.kommen die Treppe hoch, auf der Ebene 1, oder absichtlich fallen in fallen zu erreichen Gehennom).

Was man versuchen könnte wäre zu versuchen, es zu tun auf der "meta" - Ebene.Design der bot wie die Auswahl nach dem Zufallsprinzip eine Vielzahl von "elementarer Verhaltensweisen".Dann versuchen zu Messen, wie diese bots tarif.Extrahieren Sie dann die Kombinationen von Verhaltensweisen, die scheinen zu fördern, überleben;die Bayes-Analyse tun könnte, die unter einer breiten Korpus von spielen zusammen mit Ihren "Erfolg"definiert ist.Zum Beispiel, wenn es sind Verhaltensweisen, die "pick up daggers" und "avoid engaging Monster im Nahkampf", würde ich davon ausgehen, dass die Analyse würde zeigen, dass diese beiden Verhaltensweisen passen gut zusammen:bots, die das pick Dolche ohne Verwendung von Ihnen, und bots, die versuchen zu werfen Raketen auf Monster ohne Angabe solcher Raketen, vermutlich tarif schlimmer.

Das irgendwie imitiert, was lernen Gamer Fragen sich oft, für die in rec.Spiele.lustiges.nethack.Die meisten Fragen sind ähnlich:"soll ich trinken unbekannten Tränke, Sie zu identifizieren ?" oder "welcher Ebene sollte mein Charakter, bevor Sie gehen, die tief in den Kerker ?".Antworten auf diese Fragen stark davon abhängen, was die Spieler tun, und es gibt keine gute absolute Antwort.

Ein schwieriger Punkt ist hier, wie zu Messen Sie den Erfolg auf überleben.Wenn Sie einfach versuchen zu maximieren die Zeit verbrachte, bevor Sie sterben, dann werden Sie zugunsten bots, die Sie nie verlassen die ersten Ebenen;diese können lange Leben, aber nie das Spiel zu gewinnen.Wenn Sie Erfolg Messen, wie tief der Charakter geht, bevor Sie sterben, dann ist die beste bots werden Archäologen (die mit einem pick-axe) in einem Graben liegen.

In nethack unbekannten Aktionen in der Regel einen boolean Effekt haben - entweder Sie gewinnen oder verlieren Sie. Bayes-Netzwerke stützen „Fuzzy-Logik“ Werte um - eine Aktion kann eine Verstärkung mit einer gegebenen Wahrscheinlichkeit geben. Aus diesem Grund müssen Sie nicht ein Bayes-Netzwerk, nur eine Liste von „entdeckt Effekte“ und ob sie gut oder schlecht sind.

Keine Notwendigkeit, wieder die Cockatrice zu essen, oder?

Alles in allem hängt es davon, wie viel „Wissen“ Sie bot als Starter geben wollen. Wollen Sie ihm alles „auf die harte Tour“ lernen, oder werden Sie füttern ihn Spoiler ‚, bis er ausgestopft wird?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top