Detail pembuatan bot untuk Dota 2

Hasil permainan bot kami menunjukkan bahwa bermain dengan diri sendiri [bermain sendiri] dapat secara serius meningkatkan kualitas sistem pembelajaran mesin, dan meningkatkannya dari keadaan yang jauh lebih rendah dari level seseorang ke level superman, jika ada kekuatan komputasi yang sesuai. Dalam sebulan, sistem kami naik dari keadaan yang hampir tidak sesuai dengan tingkat pemain yang baik ke kondisi di mana ia mengalahkan profesional terbaik, dan terus meningkat sejak saat itu. Kualitas suatu sistem pembelajaran yang diawasi secara mendalam ditentukan oleh set data pelatihan, tetapi untuk sistem yang bermain sendiri, set data yang tersedia secara otomatis ditingkatkan.

gambar
Ubah peringkat TrueSkill (mirip dengan nilai Elo untuk catur) bot kami dari waktu ke waktu, dihitung dengan mensimulasikan game di antara bot.

Proyek ini dikembangkan sebagai berikut. Peringkat 15% pemain di bawah tanda 1,5K pada skala MMR ; 58% pemain memilikinya di bawah 3K; 99,99% pemain memiliki kurang dari 7,5 ribu.

• 1 Mei: Pelatihan penguatan pertama menghasilkan lingkungan Dota sederhana di mana Drow Ranger belajar untuk bertarung melawan Earthshaker yang memiliki kode keras.
• 8 Mei: seorang tester dengan MMR 1,5K mengatakan bahwa hasilnya meningkat lebih cepat daripada bot.
• Awal Juni: mengalahkan tester dengan MMR 1,5K
• 30 Juni: Saya memenangkan sebagian besar game dengan tester dengan MMR 3000.
• 8 Juli: untuk pertama kalinya dengan selisih kecil, saya mengalahkan tester semi-profesional dengan MMR 7,5K.
• 7 Agustus: Blitz (6.2K, mantan profesional) menang 3-0, Pajkatt (8.5K, profesional) 2-1, dan CC&C (8.9K, profesional) 3-0. Mereka semua setuju bahwa SumaiL akan mencari cara untuk mengalahkannya.
• 9 Agustus: Arteezy dikalahkan (10K, profesional, salah satu pemain terbaik) 10-0. Dia mengatakan SumaiL akan dapat menangani bot ini.
• 10 Agustus: SumaiL menang (8.3K, profesional, pemain 1 lawan 1 terbaik) 6-0. Pemain mengatakan bahwa bot tidak dapat dikalahkan. Ia bermain dengan versi bot pada 9 Agustus, menang 2-1.
• 11 Agustus: Dendi dikalahkan (7.3K, profesional, mantan juara dunia) 2-0. 60% lebih banyak kemenangan daripada versi 10 Agustus.


Pertandingan melawan SumaiL

Tantangan


Dalam versi lengkap permainan, pemain bermain 5 lawan 5, tetapi di beberapa turnamen ada juga pertandingan 1 lawan 1. Bot kami dimainkan sesuai dengan aturan turnamen standar - kami tidak menambahkan penyederhanaan khusus untuk AI.

Bot bekerja dengan antarmuka berikut:

• Pengamatan: API yang dirancang untuk memiliki kemampuan yang sama seperti pemain langsung mengenai pahlawan, karakter lain dalam permainan, dan permukaan di sebelah pahlawan. Permainan ini dapat diamati sebagian.
• Tindakan: dapat diakses melalui API, dengan frekuensi yang sebanding dengan manusia, termasuk perpindahan ke tempat tertentu, serangan, dan penggunaan objek.
• Umpan balik: bot menerima hadiah untuk kemenangan, serta parameter sederhana, seperti kesehatan dan yang terakhir .

Kami memilih puluhan item yang tersedia untuk bot, dan memilih salah satunya untuk dipelajari. Kami juga secara terpisah melatih creep blocking menggunakan teknik pelatihan penguatan tradisional, karena ini terjadi sebelum lawan muncul.


Bot bermain melawan Arteezy

Turnamen Internasional


Pendekatan kami, menggabungkan permainan dengan diri kami sendiri dan belajar dari luar, memungkinkan kami untuk secara signifikan memperkuat permainan bot kami dari Senin hingga Kamis, sementara turnamen berlangsung. Senin malam Pajkatt menang menggunakan koleksi barang yang tidak biasa. Kami telah menambahkan unit ini ke daftar item yang tersedia.

Sekitar pukul 1 malam pada hari Rabu kami menguji versi terbaru dari bot. Bot kehilangan banyak kesehatan setelah gelombang pertama. Kami memutuskan bahwa kami harus mundur, tetapi kemudian kami perhatikan bahwa permainan berikutnya sangat mengagumkan, dan perilaku pada gelombang pertama hanyalah umpan bagi bot lainnya. Permainan selanjutnya dengan dirinya memecahkan masalah ketika bot belajar untuk menolak strategi dengan umpan. Dan kami menggabungkan ini dengan bot Senin hanya untuk gelombang pertama, dan selesai hanya 20 menit sebelum Arteezy muncul.

Setelah pertandingan dengan Arteezy, kami memperbarui model pemblokiran creep, yang menambah TrueSkill satu per satu. Sesi latihan berikutnya sebelum pertandingan dengan SumaiL pada hari Kamis meningkatkan TrueSkill dengan dua poin. SumaiL menunjukkan bahwa bot itu belajar melemparkan mantra [reruntuhan] yang merusak di luar bidang pandang musuh. Ini terjadi berkat mekanisme, yang kita tidak tahu tentang: casting di luar bidang pandang musuh tidak memungkinkan dia untuk mengisi keajaiban.

Arteezy memainkan pertandingan dengan tester 7.5K kami. Arteezy memenangkan permainan, tetapi penguji kami berhasil mengejutkannya dengan bantuan strategi yang dimata-matai oleh bot. Arteezy kemudian mencatat bahwa Paparazi pernah menggunakan strategi ini untuk melawannya, dan bahwa mereka jarang melakukannya.


Paykatt memenangkan bot hari Senin. Dia memikat bot, dan kemudian menggunakan regenerasi.

Kerentanan bot


Meskipun SumaiL menyebut bot "tak terkalahkan," masih bisa membingungkan dalam situasi yang terlalu berbeda dari yang dilihatnya. Kami meluncurkannya di salah satu acara yang diadakan di turnamen, di mana para pemain memainkan lebih dari 1000 pertandingan untuk mengalahkan bot dengan semua cara yang memungkinkan.

Kerentanan yang berhasil jatuh ke dalam tiga kategori:

• Tarik ulur. Anda dapat terus-menerus membuat creep dari garis mengejar Anda tepat setelah mereka muncul. Akibatnya, beberapa lusin creep akan berjalan setelah Anda melintasi peta, dan creep musuh akan menghancurkan menara bot.
• Orb racun + renda angin: memberi Anda keuntungan dalam kecepatan gerakan di atas bot di tingkat pertama dan memungkinkan Anda dengan cepat menyebabkan kerusakan.
• Meruntuhkan di tingkat pertama: itu membutuhkan keterampilan, tetapi beberapa pemain kelas 6-7K mampu membunuh bot di tingkat pertama, berhasil menyelesaikan 3-5 mantra dalam waktu singkat.

Memperbaiki masalah untuk pertandingan satu lawan satu akan sama dengan memperbaiki bug dengan Pajkatt. Tetapi untuk pertandingan 5v5, masalah ini bukan kerentanan, dan kami akan membutuhkan sistem yang dapat mengatasi situasi aneh yang belum pernah terlihat sebelumnya.

Infrastruktur


Kami belum siap untuk membahas fitur-fitur internal bot - tim sedang mengerjakan solusi untuk masalah dengan 5 pada 5 pertandingan.

Langkah pertama dari proyek ini adalah untuk memahami cara menjalankan Dota 2 di cloud pada GPU fisik. Permainan memberikan kesalahan yang tidak bisa dipahami dalam kasus-kasus seperti itu. Tetapi ketika meluncurkan GPU pada desktop Greg (selama pertunjukan desktop ini dibawa ke atas panggung), kami melihat bahwa Dota melakukan booting dengan monitor yang terhubung dan menampilkan pesan yang sama tanpa monitor. Oleh karena itu, kami mengkonfigurasi mesin virtual kami untuk berpura-pura seolah-olah monitor fisik terhubung dengannya.

Pada saat itu, Dota tidak mendukung server khusus, yaitu meluncurkan dengan penskalaan dan tanpa GPU hanya mungkin dalam versi dengan perenderan perangkat lunak yang sangat lambat. Kemudian kami membuat sebuah rintisan untuk sebagian besar panggilan OpenGL, kecuali untuk yang perlu dimuat.

Pada saat yang sama, kami menulis bot dalam skrip - sebagai referensi untuk perbandingan (khususnya, karena bot bawaan tidak berfungsi dengan baik dalam mode 1 pada 1) dan untuk memahami semantik API untuk bot . Bot skrip mencapai 70 lasthits dalam 10 menit di jalur yang kosong, tetapi masih kalah dari orang-orang yang bermain cukup baik. Bot terbaik kami yang bermain 1 lawan 1 mencapai tingkat sekitar 97 (ia menghancurkan menara lebih awal, sehingga kami hanya dapat memperkirakan), dan maksimum teoretis adalah 101.


Bot bermain melawan SirActionSlacks. Strategi pengalihan bot tidak bekerja dengan kerumunan kurir

Lima hingga lima


Bermain 1 lawan 1 adalah tugas yang sulit, tetapi 5 lawan 5 adalah samudera kompleksitas. Kami perlu memperluas kemampuan AI agar dapat menanganinya.

Dengan cara biasa, kita mulai dengan menyalin perilaku. Dota menyelenggarakan sekitar satu juta game publik per hari. Rekaman kecocokan disimpan di server Valve selama dua minggu. Kami mengunduh setiap entri game di level pakar sejak November lalu, dan mengumpulkan kumpulan data 5,8 juta game (setiap game sekitar 45 menit dengan 10 pemain). Kami menggunakan OpenDota untuk mencari catatan dan mentransfer $ 12.000 kepada mereka (sepuluh kali lebih banyak dari yang ingin mereka kumpulkan dalam setahun) untuk mendukung proyek.

Kami masih memiliki banyak ide, dan kami mempekerjakan programmer (tertarik pada pembelajaran mesin, tetapi belum tentu ahli) dan peneliti untuk membantu kami. Kami berterima kasih kepada Microsoft Azure dan Valve atas dukungan mereka dalam pekerjaan kami.

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


All Articles