Perilaku apa yang harus dilakukan untuk menjadikan pejuang AI yang "tidak sempurna"?


19

Saat membuat kombatan NPC, sangat mudah apa yang harus dilakukan untuk mendapatkan robot deathmachine dengan mengoptimalkan taktik tempur, waktu dan tipe serangan, tetapi lebih sulit (dan lebih menarik dalam pertarungan) untuk mendapatkan musuh yang aneh, tak terduga, tak terduga. Perilaku apa (algoritma?) Yang berguna untuk menciptakan musuh yang lebih organik dan tidak konvensional?

Sunting: Kasus penggunaan khusus saya adalah dengan musuh mirip-MMO, misalnya World of Warcraft, walaupun dengan lebih sedikit grafik yang terlibat. Perhatikan bahwa itu berarti musuh manusia dan tidak manusiawi (hewan, monster, dll)

Jawaban:


14

Ada artikel yang sangat menarik tentang masalah ini di Gamasutra: Kesalahan Cerdas: Cara Memasukkan Kebodohan ke Kode AI Anda , oleh Mick West.

Artikel ini membahas tentang AI permainan biliar. Saat menerapkan AI seperti itu, cukup mudah untuk membuatnya membuat bola di setiap pemotretan. Cara sederhana untuk membuat AI kurang "pintar" adalah, seperti yang disarankan pada jawaban lain, untuk menambahkan faktor acak ke dalam perhitungan, membuat AI kehilangan lebih banyak.

Tetapi ada dua kelemahan utama dengan pendekatan seperti itu. Pertama, itu tidak dapat diprediksi. Untuk pemain yang bermain dalam mode "Mudah", tidak dapat diterima bahwa AI mendapat "keberuntungan". Bagaimana jika faktor acak Anda membuat AI melakukan tembakan yang lebih baik, memukul bola yang lebih berharga, atau melakukan kombo? Anda tidak tahu apa yang akan terjadi, dan menjadi beruntung seharusnya tidak menjadi pilihan untuk AI dalam mode mudah.

Kelemahan lainnya adalah bahwa pemain akan mencoba mengidentifikasi pola dalam perilaku AI. Dan dengan faktor acak sederhana, tidak ada pola. Tapi itu tidak berarti pemain tidak akan melihat pola apa pun, justru sebaliknya, pada kenyataannya. Begitu AI mendapat keberuntungan, pemain akan melihat strategi dalam perilakunya. Dalam artikel tersebut, para pemain mengeluh tentang AI memainkan strategi posisi. Ketika hanya ada faktor acak dalam presisi sudut .

Dari sudut pandang saya, setelah membaca artikel yang membuka mata ini, AI yang tidak sempurna tidak boleh menggunakan pengacakan sebagai faktor penyederhanaan. Justru sebaliknya. AI yang lebih mudah seharusnya lebih pintar, tetapi berusaha membantu pemain.

Dalam contoh artikel game Pool, opsi terbaik untuk menerapkan "mode mudah" AI sebenarnya adalah untuk menghapus semua faktor acak, dan untuk menambahkan strategi penentuan posisi. AI akan mencoba untuk memukul bola untuk mempersiapkan tembakan yang mudah dan luar biasa untuk pemain .

Dengan cara ini, pemain akan berpikir dia beruntung. Dan itulah yang Anda harapkan dari sebuah game saat bermain dengan mudah.


1
Ini juga akan berguna bagi AI untuk mengingat apa yang dapat dimanfaatkan pemain. Para pengembang mungkin berpikir bahwa ia memiliki 'panci mudah' tetapi jika ia tidak dapat membuat pot, taktik kasing seharusnya kurang digunakan oleh AI. Ini juga bermanfaat, karena Anda dapat melatih pemain, mengingat apa yang tidak dapat ia lakukan, dan sengaja memanfaatkan ini sesering mungkin hingga ia bisa, dengan cara ini pemain tidak bosan, tidak frustrasi.
Jonathan Connell

Sementara saya setuju dengan tidak menggunakan pengacakan, saya tidak setuju dengan "membantu pemain": itu akan seperti curang, hanya jauh lebih buruk karena Anda akan berbohong kepada pemain.
o0 '.

@ Lo'oris: Ya, saya tidak melihatnya sebagai kebohongan. Ketika para pemain memberi tahu permainan untuk bersikap mudah padanya, dia mengharapkan permainan menjadi lembut. Saat Anda memainkan permainan yang sangat Anda sukai dengan seorang teman yang baru saja menemukannya, saya merasa cukup oke untuk memberinya kesempatan. Itu membuat permainan lebih menyenangkan untuk semua orang.
Tyn

1
Ada posting blog yang bagus oleh Shawn Hargreaves tentang pengacakan, dan kemampuan bagi manusia untuk menemukan pola dalam keacakan. Ini akan menerjemahkan ton, dalam hal ini, seorang pemain salah menilai taktik pemain AI.
Jonathan Connell

1
Sebenarnya saya pikir pengacakan pada akurasi adalah cara yang baik untuk dilakukan. Dengan pemain sungguhan yang tidak hebat, kadang-kadang ia akan membuat kesalahan dan memukul bola yang lebih baik.
AttackingHobo

10

Konsep kuncinya adalah menghindari memberi NPC "pengetahuan sempurna".

  • Margin kesalahan acak pada setiap keputusan atau tindakan yang melibatkan perhitungan. contoh jelas sedang membidik (mis. penembak jitu stormtrooper). Jika mereka tidak selalu memukul Anda, itu lebih realistis.
  • Line of Sight ... jika mereka tidak dapat melihat Anda, itu dapat membuat permainan kucing dan tikus yang menarik.
  • Taktik tim, tergantung pada jenis gim Anda, musuh yang beradaptasi dengan situasi bisa jauh lebih menarik. Misalnya, jika Anda tertembak, Anda tidak akan dikenakan biaya secara membabi buta, Anda akan berlindung sampai api yang masuk berhenti. Atau mungkin Anda akan merasa lebih nyaman untuk bergegas masuk jika ada rekan satu tim di dekat Anda ... Anda dapat mensimulasikan perilaku tersebut untuk membuat NPC berperilaku seolah-olah mereka masih hidup.

Saya yakin ada banyak lagi contoh yang akan diberikan, mungkin Anda bisa memberi tahu kami tentang permainan Anda dan kami bisa mendapatkan lebih spesifik :-)


4

Salah satu cara cepat untuk membuat AI yang sempurna dapat dilawan adalah dengan membuatnya membuat keputusan yang tidak sempurna dengan menambahkan beberapa 'noise' ke input atau outputnya. Kebisingan yang saya maksudkan adalah beberapa faktor acak.

Berikut ini contoh kecil untuk keluaran:

  • Algoritma sempurna menghasilkan tiga tindakan yang mungkin diurutkan dengan skor.
  • Tambahkan nilai acak ke setiap skor.
  • Pilih skor terbaik.

Berikut adalah beberapa ide untuk masukan:

  • Jika tindakan didasarkan pada kesehatan lawan, tambahkan faktor acak (katakan +/- 10 untuk bilah kesehatan 0-100) ke kondisi yang dirasakan oleh AI.
  • Sama untuk peringkat tindakan, jika AI tahu beberapa serangan lebih kuat dari yang lain, tambahkan / kurangi beberapa nilai secara acak di sana.

Satu hal yang jelas untuk dipertimbangkan adalah kecepatan AI. Dalam sebagian besar game, AI dapat bereaksi JAUH lebih cepat dari manusia (terutama dalam pertempuran) dan melakukan multitasking (sangat terlihat dalam game RTS). Jadi Anda harus menindaklanjutinya, dengan menjaga AI agak lambat (mungkin secara adaptif), dan membatasi jumlah hal yang dapat dilakukan dalam kerangka waktu yang ditentukan (yaitu satu tindakan setiap setengah detik).

Semoga ini bisa membantu, dan semoga berhasil!


3

Sulit untuk memberikan jawaban langsung yang bermanfaat tanpa mengetahui apa yang sebenarnya Anda coba lakukan.

Ada dua hal yang ingin saya katakan tentang masalah ini yang mungkin bisa membantu Anda.

Hal pertama (dan sejauh ini yang paling penting), jika Anda mencoba membuat musuh merasa lebih menarik dan manusiawi maka taktik tempur Anda tidak relevan. Trik untuk membuat pemain "percaya" musuh masih hidup adalah dengan menggunakan animasi, suara, dan detail kecil untuk menyiratkan perilaku manusia. AI yang sempurna mungkin berjalan di sudut, melihat pemain, dan menembak. Seorang manusia AI mungkin berjalan di sudut, melihat pemain, memiliki ekspresi terkejut di wajahnya dan berteriak kaget, dan menembak. Yang pertama sepertinya robot. Yang kedua tampaknya manusia. Keduanya menggunakan AI yang identik dalam segala hal, selain penyisipan animasi sebelum pemotretan (atau, untuk menjaga perilaku taktis tetap sama, selama pemotretan).

Kedua, hindari mengacak. Pemain tidak menghargainya seperti yang diinginkan oleh desainer. Pemain tidak melihat "komputer menghasilkan 1 dari 100, diikuti oleh 5, 3, dan 4, sehingga faktor kesalahan untuk empat tembakan terakhir hanya 1%, 5%, 3%, dan 4%, dan itu mengapa Anda mati dalam setengah detik babak ini. " Para pemain hanya melihat musuh yang kadang kala meleset dan kadang-kadang memakukannya berulang kali tanpa alasan yang jelas, yang membuat frustrasi. Desain permainan yang baik sebagian besar tentang membangun pola yang dapat dilakukan oleh pemain manusiamengamati, belajar, dan mengalahkan, dan membuat kesuksesan pemain berdasarkan penilaiannya sendiri dan keterampilan dan intuisi daripada membuatnya tentang apakah pemain beruntung. Keinginan untuk mengacak berasal dari pengalaman dengan permainan di atas meja dan permainan judi, yang keduanya merupakan media yang sangat berbeda dari video game (dan apa yang bekerja dalam satu media sering tidak masuk akal di media lain).


1

Saya ingat di kursus AI kami di kampus ada sebuah topik tentang membuat AI lebih "manusia" dan kurang sempurna. Itu bertahun-tahun yang lalu jadi saya hanya ingat beberapa poin dari pikiran saya.

  • Gunakan "perpustakaan gerakan". Jika Anda bertarung dengan orc, beri dia katakan 3 rutinitas tempur yang mereka ulangi sesekali. Hal ini membuat pertarungan menjadi lebih mudah dengan menjadi lebih mudah diprediksi, yang tampaknya merupakan kebalikan dari yang Anda inginkan, tetapi masih membuat AI kurang "mesin sempurna" dan lebih "noob mengulangi langkah yang sama berulang-ulang".
  • Suboptize, jika memungkinkan. Jika, seperti yang Anda katakan, AI Anda didasarkan pada penghitungan langkah terbaik, berikan batas tiruan pada perhitungan ini. Buat pencarian lebih dangkal, atau batasi jumlah langkah. Alih-alih langkah terbaik yang pernah ada, AI hanya akan memilih langkah yang baik. Ini dapat menambah banyak variasi pada perilaku musuh Anda, karena ada banyak lebih baik daripada gerakan terbaik.
  • Membuat kesalahan dengan sengaja. Alih-alih langkah terbaik, pilih yang terbaik kedua atau ketiga. Atau bahkan memilih langkah yang memiliki utilitas buruk. Ini mungkin membahas titik "tidak dapat diprediksi" Anda.

Tentu saja ini hanya saran umum yang harus dipelajari dan diuji coba untuk setiap kasus, dan mungkin memang membuat AI Anda terlihat lebih buatan daripada yang dimaksudkan. Namun saya pikir mereka adalah titik awal yang baik.


0

Saya baru saja melihat ini muncul dan ingin berbagi ide yang saya gunakan di masa lalu.

Katakanlah karakter memiliki tiga gerakan dan masing-masing diberi skor, skor yang lebih tinggi adalah langkah yang lebih baik. (Jawaban lain berbicara tentang menambahkan noise untuk membuat skor ini.)

  • Menyerang dengan pedang (30 poin)
  • Mantra api (50 poin)
  • Mantra es (20 poin)

Jumlahkan total poin (100)

Keluarkan stat intelijen karakter dari nilai maksimum yang mungkin untuk stat ini (katakanlah 60 dari 100).

Hasilkan angka acak antara 0 (atau beberapa lantai lainnya) dan rasio kecerdasan (0,6), kalikan dengan total poin (100). Dalam contoh kita, katakanlah hasilnya adalah 45.

Sekarang Anda mulai mengurangi pergerakan buruk dari nilai ini sampai Anda mencapai nol. (Kurangi urutan.)

Pertama, kami mempertimbangkan mantra Ice, yang mendapat skor 20. 45 - 20 = 25. Ini di atas nol, jadi kami membuang mantra Ice.

Kedua, lihat Serangan dengan pedang, bernilai 30 poin. 25 - 30 = -5. Kami mencapai ambang batas kami, jadi kami memilih Serangan dengan aksi pedang.

Dalam sistem ini, karakter dengan kecerdasan rendah tidak akan mengambil langkah terbaik. Dan karakter dengan kecerdasan tinggi akan sering mengambil langkah terbaik. (Dalam contoh ini, karakter dengan kecerdasan sempurna mengambil langkah terbaik 50% dari waktu.)

Menambahkan mekanisme lantai ke nomor acak akan meningkatkan kemungkinan langkah yang lebih baik dipilih.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.