1

Ich habe einen kommenden Programmierwettbewerb, bei dem wir KI-Spieler entwerfen, die gegeneinander antreten. Die Struktur unseres Codes ist so, dass wir einzelne Einheiten haben, die wir von einer Zentrale aus erzeugen können, die bestimmte Aktionen ausführen und unter bestimmten Regeln interagieren können. Der Einfachheit halber werde ich Detail ein spezifisches Mittel, A, das ist hat folgende Eingänge und Aktionen:Maschinelles Lernen mit begrenzten Computerressourcen

Agent A: 

Inputs: Position, Surrounding Tiles, Radio Message 

Actions: Move, Attack, Build, Mine Resources, Broadcast Radio 

Das Radio bezieht sich auf eine einem ganzzahligen Signal, das an andere Agenten übertragen werden können. Dies ist eine vereinfachte Version dessen, was die Einheiten tatsächlich tun können, aber die Frage bleibt die gleiche.

Es gibt eine Schlüsseleinschränkung für dieses Problem, und zwar hat jeder Agent eine begrenzte Anzahl von Zyklen, um Berechnungen durchzuführen, um seine Strategie zu bestimmen. Ich würde gerne versuchen, eine Art maschinelles Lernen in die Bestimmung einer optimierten Strategie zu implementieren, aber eine Struktur wie ein neuronales Netz über dem Eingangsraum (die relativ hochdimensional sein kann) führt zu einer zu komplexen Berechnung. Mit anderen Worten, ich kann nicht einfach jedem Agenten sein eigenes neuronales Netzwerk geben, das durch irgendeinen genetischen Algorithmus trainiert wird (Matrixmultiplikation ist eine zu teure Operation). Andere Mitbewerber konstruieren ihre Agenten von Hand und geben ihnen einen einfachen Satz von Bedingungen, um Aktionen zu bestimmen (zB wenn ein Feind nah ist, entferne dich vom Feind).

Also meine Frage ist konkret, ob jemand einen Vorschlag hat, wie man eine reduzierte Form des Verhaltens implementieren kann, so dass es immer noch verschiedene Strategien ausprobieren kann, ohne bedingte Festkommandos zu schreiben und ohne anspruchsvoll groß zu werden Rechenressourcen. Mit anderen Worten, gibt es eine Möglichkeit, eine begrenzte Regelliste von Aktionen für einen gegebenen Eingabebereich zu erzeugen, so dass das Regelwerk sinnvoll trainierbar ist?

Tut mir leid, wenn diese Frage ein wenig mehrdeutig oder unklar erscheint; Ich bin mehr als bereit, zusätzliche Details zu spezifizieren, wenn es irgendwelche Fragen gibt, was genau ich meine. Vielen Dank!

Antwort

0

Das klingt für mich wie der MIT BattleCode-Wettbewerb, ist das richtig? Ich habe einmal an einem Agenten für die Ausgabe 2014 gearbeitet (obwohl viel später als die tatsächliche Wettbewerbszeit, nicht teilgenommen oder ähnliches), und zumindest in diesem Jahr waren die Rechenbeschränkungen in der Tat sehr begrenzt; so einschränkend, dass fast jeder Online-Algorithmus grundsätzlich sofort aus dem Fenster geworfen werden kann.

Theoretisch könnten Sie jederzeit Algorithmen wie die Monte-Carlo Baumsuche untersuchen, die theoretisch jederzeit gestoppt werden können und ein Ergebnis liefern, bei dem die Qualität des Ergebnisses mit zunehmender Verarbeitungszeit zunimmt. In diesem Fall müssten Sie den Prozess wahrscheinlich so früh beenden, dass er nicht wirklich aussagekräftige Ergebnisse liefert.

Wenn Sie wirklich mit Machine Learning-Ansätzen gehen möchten, würde ich wahrscheinlich empfehlen, mit den billigsten Modellen zur Nutzungszeit zu gehen, die ich denke, Decision Trees oder Rule-Learning-Systeme. Sie würden einen großen Datensatz von verschiedenen Spielzuständen und "korrekten" Bewegungen benötigen, um in solchen Situationen zu spielen, um solche Systeme zu trainieren. Haben Sie Zugang zu einem solchen Datensatz oder haben Sie darüber nachgedacht, wie Sie diesen erzeugen? (Beachten Sie, dass dies auch ein Problem mit einem neuronalen Netzwerk wäre).

+0

Dies ist genau MIT BattleCode. Dies sind einige sehr interessante Möglichkeiten, auf die ich mehr eingehen möchte. Mein ursprünglicher Plan, mit dem neuronalen Netzwerk zu arbeiten, bestand darin, eine Form des Verstärkungslernens zu verwenden, um iterativ die KI gegen sich selbst auf meiner eigenen Maschine zu spielen. Wenn ich in Entscheidungsbäume schaute, fand ich eine Arbeit über diese Methode, aber ich bin mir nicht sicher, wie es in unserer Anwendung funktionieren wird. Hier ist ein Link, wenn Sie interessiert sind: https://arxiv.org/pdf/1507.06923v1.pdf Egal, diese Antwort war wirklich nützlich, um mir einige potenziell lebensfähige Optionen, danke! –

+0

Bei näherer Betrachtung ist das Papier möglicherweise nicht unglaublich anwendbar, da es immer noch auf Anfragen an die Umgebung über die korrekte Antwort in einem gegebenen Zeitschritt beruht, was schwierig zu bestimmen sein kann. –

+0

@AustinGarrett kannst du die Regeln von BattleCode lokal ändern, um dir viel mehr Verarbeitungszeit zu geben? (Natürlich nicht während des eigentlichen Wettkampfes, aber vielleicht zum Testen?) Wenn ja, könntest du dir eine große Menge an Rechenzeit gönnen, Spiele mit einem anderen Algorithmus ausführen und eine Datenbank erstellen, die aus Spielzuständen besteht und sich bewegt dieser andere, rechenintensivere Algorithmus. Dann trainiere einen Entscheidungsbaum offline auf diesen Daten und verwende ihn anschließend online in den Spielen mit den realen Berechnungsbeschränkungen –

Verwandte Themen