“Mükemmel olmayan” bir AI savaşçısı yapmak için hangi davranışlar geçmelidir?


19

Bir NPC muharip yaparken, bu kadar kolay ne yapacağını bariz idiyosenkrazik, Inpredictable düşman olsun savaş taktikleri, zamanlama ve saldırı tiplerini optimize ederek robot deathmachine almak için, ama zor (kavga ve daha ilginç). Daha organik, geleneksel olmayan bir düşman yaratmak için hangi davranışlar (algoritmalar?) Yararlıdır?

Düzenleme: Benim özel kullanım durumum daha az grafik olmasına rağmen MMO benzeri düşmanlar, örneğin World of Warcraft ile. Bunun hem insan hem de insanlık dışı düşmanlar (hayvanlar, canavarlar, vb.) Anlamına geldiğini unutmayın.

Yanıtlar:


14

Gamasutra ile ilgili çok ilginç bir makale var: Akıllı Hatalar: Aptallığı AI Kodunuza Nasıl Dahil Edersiniz , Mick West.

Bu makalede Bilardo oyunu AI'dan bahsedilmektedir. Böyle bir AI uygularken, her çekimde bir topu pota yapmak oldukça kolaydır. AI'yı daha az "akıllı" yapmanın basit bir yolu, diğer cevaplarda önerildiği gibi, hesaplamaya rastgele bir faktör eklemek ve AI'yı daha fazla kaçırmaktır.

Ancak böyle bir yaklaşımla iki büyük kusur var. İlk olarak, tahmin edilemez. "Kolay" modda oynayan bir oyuncu için yapay zekanın "şanslı" olması kabul edilemez. Rastgele faktörünüz AI'yı daha iyi bir atış yapar, daha değerli bir topa vurursa veya bir combo yaparsa ne olur? Ne olacağını bilmiyorsunuz ve şanslı olmanız kolay bir modda yapay zeka için bir seçenek olmamalı.

Diğer kusur, oyuncunun AI davranışlarında bir model belirlemeye çalışmasıdır. Ve basit bir rastgele faktörle, desen yoktur. Ancak bu, oyuncunun aslında herhangi bir desen görmeyeceği anlamına gelmez. AI şanslı olur olmaz, oyuncu davranışında bir strateji görecektir. Makalede, oyuncular bir pozisyon stratejisi oynayan AI'den şikayet ediyorlar. Açısal hassasiyette rastgele bir faktör olduğunda .

Benim bakış açımdan, bu göz açıcı makaleyi okuduktan sonra, mükemmel olmayan bir AI asla basitleştirme faktörü olarak randomizasyonu kullanmamalıdır. Tam tersi. Daha kolay bir AI daha akıllı olmalı, ancak oyuncuya yardım etmeye çalışmalıdır.

Havuz oyunu örneğinde, bir "kolay mod" AI uygulamak için en iyi seçenek aslında tüm rastgele faktörü kaldırmak ve bir konumlandırma stratejisi eklemekti. AI oyuncu için kolay ve harika bir atış hazırlamak için topları vurmaya çalışacaktı .

Bu şekilde, oyuncu düşünecek diye şanslı. Kolayca oynarken bir oyun için beklediğiniz de budur.


1
Yapay zeka için oyuncunun neleri kullanabileceğini hatırlaması da yararlı olacaktır. Geliştiriciler, 'kolay bir pot' olduğunu düşünebilir, ancak potu alamazsa, vaka taktiği AI tarafından daha az kullanılmalıdır. Ayrıca faydalıdır, çünkü oyuncuyu eğitebilir, ne yapamayacağını hatırlayabilir ve mümkün olduğunca sık sık bilerek yararlanabilirsiniz, bu şekilde oyuncu ne sıkılmış ne de sinirli.
Jonathan Connell

Rasgeleleştirmeyi kullanmama konusunda hemfikir olduğum halde, "oyuncuya yardım etme" konusunda anlaşmıyorum: bu hile yapmak gibi bir şey olurdu, çünkü oyuncuya yalan söylüyorsunuz .
o0 '.

@ Lo'oris: Bunu yalan olarak görmüyorum. Oyuncular oyuna ona kolay gitmesini söylediklerinde, oyunun yumuşak olmasını bekler. Bir oyun oynarken, sadece keşfeden bir arkadaşınızla gerçekten çok iyisiniz, ona fırsat vermenin oldukça iyi olduğunu düşünüyorum. Oyunu herkes için daha keyifli hale getirir.
Tyn

1
Shawn Hargreaves tarafından randomizasyon ve bir insanın rastgele desenleri tespit etme yeteneği hakkında iyi bir blog yazısı var . Bu ton, bu durumda, bir AI oyuncunun taktiklerini yanlış değerlendiren bir oyuncuyu çevirir.
Jonathan Connell

1
Aslında doğruluk üzerine rastgele seçmenin iyi bir yol olduğunu düşünüyorum. O kadar iyi olmayan gerçek bir oyuncu ile, bazen bir hata yapar ve daha iyi bir topa vurur.
AttackingHobo

10

Anahtar kavram NPC'ye "mükemmel bilgi" vermekten kaçınmaktır.

  • Hesaplama içeren herhangi bir karar veya eylemde rastgele hata payı. bariz örnek amaçlayan (yani fırtına avcısı keskin nişancılar). Sana her zaman vurmazlarsa, daha gerçekçi.
  • Görüş Alanı ... sizi göremezlerse, ilginç bir kedi ve fare oyunu yapabilir.
  • Takım taktikleri, oyun türünüze bağlı olarak, duruma uyum sağlayan düşmanlar çok daha ilginç olabilir. Örneğin, şut çekilirseniz, körü körüne şarj olmazsınız, gelen ateş sönene kadar siper alırsınız. Ya da belki de yakınlarda takım arkadaşlarınız varsa acele etmekten daha rahat hissedersiniz ... NPC'lerin sanki canlıymış gibi davranmaları için bu davranışları simüle edebilirsiniz.

Eminim verilecek bir ton daha örnek var, belki bize oyununuz hakkında bilgi verebilir ve daha spesifik olabiliriz :-)


4

Mükemmel bir yapay zekayı kavrayabilmenin hızlı bir yolu, girdilerine veya çıktılarına bir miktar 'gürültü' ekleyerek kusursuz kararlar vermesidir. Gürültü ile bazı rastgele faktörleri kastediyorum.

İşte çıktı için küçük bir örnek:

  • Mükemmel algoritma, skorla sıralanmış üç olası eylemi verir.
  • Her puana rastgele bir değer ekleyin.
  • En iyi puanı seçin.

Girdi için bazı fikirler:

  • Eylemler rakibin sağlığına dayanıyorsa, AI tarafından algılanan duruma rastgele bir faktör ekleyin (0-100 sağlık çubuğu için +/- 10 deyin).
  • Eylemlerin değerlendirmesi için de aynıdır, eğer AI bazı saldırıların diğerlerinden daha güçlü olduğunu bilirse, rastgele bazı değerleri toplayın / çıkarın.

Dikkate alınması gereken açık bir şey, AI'nın hızıdır. Çoğu oyunda, AI'lar ÇOK tepki verebilir daha hızlı (özellikle dövüşte) insanlardan daha hızlı ve belirgin çoklu görevler yapabilir (RTS oyunlarında çok görünür). Bu yüzden, AI'yı biraz yavaş tutarak (belki de adaptif olarak) ve belirli bir zaman diliminde yapabileceği şeylerin miktarını sınırlayarak (yani her yarım saniyede bir eylem) hareket etmelisiniz.

Umarım bu yardımcı olur ve iyi şanslar!


3

Tam olarak ne yapmaya çalıştığınızı bilmeden doğrudan yararlı bir cevap vermek zordur.

Bu konuda size yardımcı olabilecek iki şeyim var.

İlk şey (ve bu en önemlisi), eğer düşmanı daha ilginç ve insani hissettirmeye çalışıyorsanız, o zaman savaş taktikleriniz önemsizdir. Oyuncuları bir düşmanın canlı olduğuna "inandırmak" için hile yapmak, insan davranışlarını ima etmek için animasyon, sesler ve küçük detaylar kullanmaktır. Mükemmel AI bir köşede yürüyebilir, bir oyuncu görebilir ve ateş edebilir. Bir insan yapay zekası bir köşede dolaşabilir, bir oyuncu görebilir, yüzüne sürpriz bir şekilde bakabilir ve alarmda bağırıp ateş edebilir. Birincisi robotik görünüyor. İkincisi insan gibi görünüyor. Her ikisi de aynı AI'yı, çekimden hemen önce animasyonun eklenmesi (veya çekim sırasında taktik davranışı aynı tutmak için) dışında her şekilde kullanıyor .

İkincisi, randomize etmekten kaçının. Oyuncular tasarımcıların istedikleri kadar düşünmek istemezler. Oyuncular "bilgisayarın 100 üzerinden 1, ardından 5, 3 ve 4 ürettiğini görmezler, bu nedenle son dört atış için hata faktörleri sadece% 1,% 5,% 3 ve% 4'tür ve bu neden bu turda yarım saniye içinde öldün. " Oyuncular, bazen çılgınca özleyen düşmanları görürler ve diğer zamanlarda onları fark edilir bir sebep olmadan tekrar tekrar çivilerler, bu da inanılmaz derecede sinir bozucudur. İyi oyun tasarımı büyük ölçüde insan oyuncuların yapabileceğigözlemlemek, öğrenmek ve dövmek ve oyuncunun şansını oyuncunun şanslı olup olmadığı yerine kendi yargısına, becerilerine ve sezgisine göre yapmak. Rastgeleleştirme dürtüsü, her ikisi de video oyunlarından inanılmaz derecede farklı ortamlar olan masa üstü oyunlar ve kumar oyunlarındaki deneyimlerden gelir (ve bir ortamda çalışanlar genellikle bir diğerinde mantıklı değildir).


1

Üniversitedeki AI kursumuzda AI'yı daha "insan" ve daha az mükemmel hale getirme konusunda bir konu olduğunu hatırlıyorum. Yıllar önceydi bu yüzden aklımın tepesinden birkaç mermi hatırlıyorum.

  • "Hareket kütüphaneleri" kullanın. Bir orkla savaşıyorsanız, her seferinde tekrar ettikleri 3 muharebe rutini söyleyin. Bu, daha öngörülebilir olarak dövüşleri kolaylaştırır, bu da istediğiniz şeyin tam tersi gibi görünür, ancak yine de AI'yı daha az "mükemmel makine" ve daha fazla "aynı hareketi tekrar tekrar tekrarlayan" yapar.
  • Mümkünse, optimize edin. Dediğiniz gibi, AI'nız en iyi hareketi hesaplamaya dayanıyorsa, bu hesaplamaya yapay bir sınır koyun. Aramayı daha sığ yapın veya adım sayısını sınırlayın. AI, şimdiye kadarki en iyi hamle yerine, bunun yerine sadece iyi bir hamle seçecek. Bu, en iyi hamlelerden çok daha iyi olduğu için düşman davranışınıza çok fazla çeşitlilik katabilir.
  • Bilerek hatalar yapın. En iyi hamle yerine ikinci veya üçüncü en iyiyi seçin. Ya da kötü faydası olan bir hamle seçin. Bu, "öngörülemezlik" noktanızı ele alabilir.

Tabii ki bunlar sadece her vaka için incelenmesi ve çalınması gereken genel tavsiyelerdir ve gerçekten de AI'nızın amaçlandığından daha yapay görünmesini sağlayabilir. Ancak bence iyi bir başlangıç ​​noktası.


0

Bu açılır pencereyi gördüm ve geçmişte kullandığım bir fikri paylaşmak istedim.

Diyelim ki karakterin üç hamlesi var ve her biri puanlanıyor, daha yüksek puan daha iyi bir hamle. (Diğer cevaplar bu puanı oluşturmak için gürültü eklemekten bahsediyor.)

  • Kılıçla saldırı (30 puan)
  • Ateş büyüsü (50 puan)
  • Buz büyüsü (20 puan)

Toplam puanları toplayın (100)

Karakterin zeka statüsünü bu stat için mümkün olan maksimum değerden çıkarın (diyelim ki 100 üzerinden 60 diyelim).

0 (veya başka bir kat) ile istihbarat oranı (0.6) arasında rastgele bir sayı oluşturun, toplam puanlarla (100) çarpın. Örneğimizde, sonucun 45 olduğunu varsayalım.

Şimdi sıfıra ulaşıncaya kadar kötü hareketleri bu değerden çıkarmaya başlıyorsunuz. (Sırayla çıkarın.)

İlk olarak, 20 puan alan Buz büyüsünü düşünüyoruz. 45 - 20 = 25 Bu sıfırın üzerinde, bu yüzden Buz büyüsünü dışarı atıyoruz.

İkincisi, Saldırıya 30 puan değerinde bir kılıçla bakın. 25-30 = -5. Eşik seviyemize ulaştık, bu yüzden bir kılıç eylemiyle Saldırı'yı ​​seçiyoruz.

Bu sistemde, zekası düşük bir karakter en iyi hamleyi seçmez. Ve yüksek zekaya sahip bir karakter genellikle en iyi hareketi seçer. (Bu örnekte, mükemmel zekaya sahip bir karakter, zamanın% 50'sinde en iyi hamleyi seçer.)

Rastgele sayıya bir zemin mekanizması eklemek, daha iyi hareketlerin seçilme şansını artıracaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.