Details zum Erstellen eines Bots für Dota 2

Das Ergebnis des Spiels unseres Bots zeigt, dass das Spielen mit sich selbst [Selbstspiel] die Qualität maschineller Lernsysteme erheblich verbessern und sie von einem Zustand, der weit unter dem Niveau einer Person liegt, auf das Niveau eines Übermenschen steigern kann, wenn eine angemessene Rechenleistung vorhanden ist. Innerhalb eines Monats stieg unser System von einem Zustand, der kaum dem Niveau eines guten Spielers entsprach, zu einem Zustand, in dem es die besten Profis besiegte, und hat sich seitdem weiter verbessert. Die Qualität eines Systems des überwachten vertieften Lernens wird durch den Satz von Trainingsdaten bestimmt, aber für Systeme, die mit sich selbst spielen, wird der verfügbare Datensatz automatisch verbessert.

Bild
Änderung der TrueSkill- Bewertung (ähnlich der Elo-Bewertung für Schach) unseres Bots im Laufe der Zeit, berechnet durch Simulation von Spielen zwischen Bots.

Das Projekt entwickelte sich wie folgt. Die Bewertung von 15% der Spieler liegt unter der 1,5K-Marke auf der MMR- Skala. 58% der Spieler haben es unter 3K; 99,99% der Spieler haben weniger als 7,5K.

• 1. Mai: Das erste Verstärkungstraining führt zu einer einfachen Dota-Umgebung, in der der Drow Ranger lernt, gegen den hartcodierten Erdschüttler zu kämpfen.
• 8. Mai: Ein Tester mit einem MMR von 1,5 K sagt, dass sich seine Ergebnisse schneller verbessern als der Bot.
• Anfang Juni: Prüfer mit MMR 1,5K schlagen
• 30. Juni: Ich habe die meisten Spiele mit einem Tester mit MMR 3000 gewonnen.
• 8. Juli: Zum ersten Mal habe ich mit einem kleinen Vorsprung einen semiprofessionellen Tester mit einem MMR von 7,5 K geschlagen.
• 7. August: Blitz (6,2 km, ehemaliger Profi) gewann mit 3: 0, Pajkatt (8,5 km, Profi) mit 2: 1 und CC & C (8,9 km, Profi) mit 3: 0. Sie alle waren sich einig, dass SumaiL herausfinden würde, wie man ihn schlägt.
• 9. August: Arteezy besiegt (10 km, professionell, einer der besten Spieler) mit 10: 0. Er sagte, SumaiL werde mit diesem Bot umgehen können.
• 10. August: SumaiL gewann (8,3 km, professionell, bester 1: 1-Spieler) mit 6: 0. Der Spieler sagte, dass der Bot nicht besiegt werden kann. Er spielte mit der Bot-Version am 9. August, gewann 2-1.
• 11. August: Dendi besiegte (7,3 km, Profi, ehemaliger Weltmeister) mit 2: 0. 60% mehr Siege als in der Version vom 10. August.


Das Spiel gegen SumaiL

Herausforderung


In der Vollversion des Spiels spielen die Spieler 5 gegen 5, aber in einigen Turnieren gibt es auch 1 gegen 1 Spiele. Unser Bot spielte nach den Standardregeln des Turniers - wir haben keine speziellen Vereinfachungen für die KI hinzugefügt.

Der Bot arbeitete mit folgenden Schnittstellen:

• Beobachtung: APIs mit denselben Fähigkeiten wie Live-Spieler in Bezug auf Helden, andere Charaktere im Spiel und die Oberfläche neben dem Helden. Das Spiel ist teilweise beobachtbar.
• Aktionen: Zugriff über die API mit einer mit dem Menschen vergleichbaren Häufigkeit, einschließlich Bewegung an einen bestimmten Ort, Angriff und Verwendung von Objekten.
• Feedback: Der Bot erhält Belohnungen für den Sieg sowie einfache Parameter wie Gesundheit und Lastits .

Wir haben Dutzende von Gegenständen ausgewählt, die für den Bot verfügbar sind, und einen für das Studium ausgewählt. Wir haben Blocking Creeps auch separat mit traditionellen Verstärkungstrainingstechniken trainiert, da dies geschieht, bevor ein Gegner erscheint.


Bot spielt gegen Arteezy

Das internationale Turnier


Unser Ansatz, das Spiel mit uns selbst zu kombinieren und von außen zu lernen, ermöglichte es uns, das Spiel unseres Bots von Montag bis Donnerstag während des Turniers erheblich zu verbessern. Montagabend gewann Pajkatt mit einer ungewöhnlichen Gegenstandssammlung. Wir haben diese Baugruppe zur Liste der verfügbaren Elemente hinzugefügt.

Am Mittwoch gegen 13 Uhr haben wir die neueste Version des Bots getestet. Der Bot hat nach der ersten Welle viel Gesundheit verloren. Wir beschlossen, dass wir zurückrollen müssen, aber dann bemerkten wir, dass das nachfolgende Spiel erstaunlich war und das Verhalten in der ersten Welle nur ein Köder für andere Bots war. Nachfolgende Spiele mit sich selbst lösten das Problem, als der Bot lernte, sich der Strategie mit Ködern zu widersetzen. Und wir haben dies nur für die erste Welle mit dem Montag-Bot kombiniert und waren nur 20 Minuten vor Arteezy fertig.

Nach den Spielen mit Arteezy haben wir das Creep-Blocking-Modell aktualisiert, wodurch TrueSkill um eins erhöht wurde. Nachfolgende Trainingseinheiten vor dem Spiel mit SumaiL am Donnerstag erhöhten TrueSkill um zwei Punkte. SumaiL wies darauf hin, dass der Bot gelernt habe, zerstörerische Zauber außerhalb des Sichtfeldes des Feindes zu wirken. Dies geschah dank der Mechanik, von der wir nichts wussten: Wenn er außerhalb des Sichtfelds des Feindes wirft, kann er den Wunder nicht angreifen.

Arteezy hat ein Match mit unserem 7,5-km-Tester gespielt. Arteezy hat das Spiel gewonnen, aber unser Tester hat es geschafft, ihn mit Hilfe einer vom Bot ausspionierten Strategie zu überraschen. Arteezy bemerkte später, dass Paparazi diese Strategie einmal gegen ihn angewandt hatte und dass sie selten darauf zurückgegriffen hatten.


Paykatt gewinnt den Bot vom Montag. Er lockt den Bot und nutzt dann die Regeneration.

Bot Schwachstellen


Obwohl SumaiL den Bot "unbesiegbar" nannte, kann er in Situationen, die sich von denen unterscheiden, die er sah, immer noch verwirrt sein. Wir haben es bei einem der Events des Turniers gestartet, bei denen die Spieler mehr als 1000 Spiele gespielt haben, um den Bot auf alle möglichen Arten zu besiegen.

Erfolgreiche Schwachstellen wurden in drei Kategorien unterteilt:

• Tauziehen. Sie können ständig Kriechen von der Linie machen, die Sie direkt nach dem Erscheinen verfolgt. Infolgedessen rennen Ihnen mehrere Dutzend Creeps über die Karte, und feindliche Creeps zerstören den Bot-Turm.
• Kugel aus Gift + Windspitze: Verschaffen Sie sich einen Vorteil in der Bewegungsgeschwindigkeit gegenüber dem Bot in der ersten Stufe und können Sie schnell Schaden anrichten.
• Raze im ersten Level: Es erfordert Fähigkeiten, aber mehrere Spieler der Klasse 6-7K konnten den Bot im ersten Level töten und 3-5 Zauber in kurzer Zeit erfolgreich abschließen.

Das Beheben von Problemen bei Eins-zu-Eins-Spielen ähnelt dem Beheben eines Fehlers mit Pajkatt. Bei 5-gegen-5-Spielen handelt es sich jedoch nicht um Sicherheitslücken, und wir benötigen ein System, das mit seltsamen Situationen fertig wird, die es zuvor noch nicht gesehen hat.

Die Infrastruktur


Wir sind noch nicht bereit, die internen Funktionen des Bots zu diskutieren - das Team arbeitet an einer Lösung des Problems mit einem 5-gegen-5-Spiel.

Der erste Schritt des Projekts bestand darin, zu verstehen, wie Dota 2 in der Cloud auf einer physischen GPU ausgeführt wird. Das Spiel gab in solchen Fällen einen unverständlichen Fehler. Beim Start auf der GPU auf dem Desktop von Greg (während der Show wurde dieser Desktop auf die Bühne gebracht) stellten wir jedoch fest, dass Dota mit einem angeschlossenen Monitor hochfährt und dieselbe Meldung ohne Monitor anzeigt. Aus diesem Grund haben wir unsere virtuellen Maschinen so konfiguriert, als ob ein physischer Monitor mit ihnen verbunden wäre.

Zu diesem Zeitpunkt unterstützte Dota keine dedizierten Server, dh das Starten mit Skalierung und ohne GPU war nur in der Version mit einem sehr langsamen Software-Rendering möglich. Dann haben wir einen Stub für die meisten OpenGL-Aufrufe erstellt, mit Ausnahme derjenigen, die zum Laden benötigt wurden.

Gleichzeitig haben wir Bots in Skripten geschrieben - als Referenz zum Vergleich (insbesondere, weil die integrierten Bots im 1-zu-1-Modus nicht gut funktionieren) und um die Semantik der API für Bots zu verstehen. Der Skript-Bot erreicht 70 Lasthits in 10 Minuten auf einem leeren Pfad, verliert aber immer noch gegen Leute, die gut genug spielen. Unser bester Bot, der 1 gegen 1 spielt, erreicht das Level von ungefähr 97 (es zerstört den Turm früher, so dass wir nur extrapolieren können) und das theoretische Maximum ist 101.


Der Bot spielt gegen SirActionSlacks. Die Bot-Ablenkungsstrategie funktionierte nicht mit einer Menge von Kurieren

Fünf vor fünf


1 gegen 1 zu spielen ist eine schwierige Aufgabe, aber 5 gegen 5 ist ein Ozean der Komplexität. Wir müssen die Fähigkeiten der KI erweitern, damit sie damit umgehen kann.

In üblicher Weise kopieren wir zunächst das Verhalten. In Dota finden täglich rund eine Million öffentliche Spiele statt. Aufzeichnungen über Übereinstimmungen werden zwei Wochen lang auf Valve-Servern gespeichert. Wir haben jeden Spieleintrag seit letztem November auf Expertenebene heruntergeladen und einen Datensatz von 5,8 Millionen Spielen gesammelt (jedes Spiel dauert ungefähr 10 Minuten mit 10 Spielern). Wir verwenden OpenDota , um nach Datensätzen zu suchen, und haben ihnen 12.000 US-Dollar überwiesen (zehnmal mehr als das, was sie in einem Jahr sammeln wollten), um das Projekt zu unterstützen.

Wir haben noch viele Ideen und stellen Programmierer (die an maschinellem Lernen interessiert sind, aber nicht unbedingt Experten) und Forscher ein, um uns zu helfen. Wir danken Microsoft Azure und Valve für ihre Unterstützung bei unserer Arbeit.

Source: https://habr.com/ru/post/de406359/


All Articles