Görsel giriş kullanarak Diablo 2 oynamak için yapay bir sinir ağı nasıl eğitilir?


139

Şu anda bir video oyunu oynamak için YSA almaya çalışıyorum ve buradaki harika topluluktan biraz yardım almayı umuyordum.

Diablo 2'ye yerleştim. Oyun böylece gerçek zamanlı ve izometrik bir bakış açısından, oyuncu kameranın ortalandığı tek bir avatarı kontrol ediyor.

İşleri somut hale getirmek için görev, canını öldürmeden canavar x deneyim puanlarınızı 0'a düşürmektir, burada canavarlar öldürerek deneyim puanı kazanılır. İşte oyunun bir örneği:

buraya

Şimdi, ağın yalnızca ekrandaki piksellerden aldığı bilgilere dayanarak çalışmasını istediğimden, verimli bir şekilde oynamak için çok zengin bir temsili öğrenmelidir, çünkü bu muhtemelen (en azından dolaylı olarak) nasıl olduğunu bilmesini gerektirecektir. oyun dünyasını nesnelere ve onlarla nasıl etkileşime gireceğine böl.

Ve tüm bu bilgiler bir şekilde internete öğretilmelidir. Hayatım boyunca bu şeyi nasıl eğiteceğimizi düşünemiyorum. Benim tek fikrim, ekranda görsel olarak iyi / kötü bir şeyi (örn. Sağlık, altın, deneyim) görsel olarak ayıklamak ve daha sonra bu statüyü takviye öğrenme prosedüründe kullanmaktır. Bunun cevabın bir parçası olacağını düşünüyorum , ama bunun yeterli olacağını düşünmüyorum; yaşamım boyunca bir ağ eğitmek için bu tür sınırlı geri bildirimler için ham görsel girdiden hedefe yönelik davranışa kadar çok fazla soyutlama seviyesi var.

Öyleyse sorum: Bu görevin en azından bir kısmını yapmak için bir ağı eğitmek için başka hangi yolları düşünebilirsiniz? tercihen binlerce etiketli örnek yapmadan.

Sadece biraz daha yönlendirme için: Bu ortamda yararlı bilgiler elde etmek için başka pekiştirici öğrenme kaynakları ve / veya denetimsiz herhangi bir yöntem arıyorum. Veya etiketli verileri manuel olarak etiketlemek zorunda kalmadan oyun dünyasından çıkarmanın bir yolunu düşünebiliyorsanız denetimli bir algoritma.

GÜNCELLEME (04/27/12):

Garip bir şekilde, hala bunun üzerinde çalışıyorum ve ilerleme kaydediyor gibi görünüyor. Bir YSA denetleyicisinin çalışmasını sağlamanın en büyük sırrı, göreve uygun en gelişmiş YSA mimarilerini kullanmaktır. Bu nedenle , geçici fark geri yayılımı (yani standart ile pekiştirme öğrenimi) ile ince ayar yapmadan önce gözetimsiz bir şekilde (oyunu oynattığım videoda) eğittiğim , faktörlü koşullu kısıtlı Boltzmann makinelerinden oluşan derin bir inanç ağı kullanıyorum. ileri beslemeli YSA).

Yine de, özellikle gerçek zamanlı olarak eylem seçimi sorunu ve YSA işleme için renkli görüntülerin nasıl kodlanacağı konusunda daha değerli girdiler arıyor :-)

GÜNCELLEME (10/21/15):

Bu soruyu bir gün önce sorduğumu hatırladım ve bunun artık çılgın bir fikir olmadığını belirtmem gerektiğini düşündüm. Son güncellememden bu yana DeepMind, Atari oyunlarını görsel girdilerden oynamak için sinir ağları elde etme konusundaki doğa makalelerini yayınladı . Gerçekten de, Diablo 2'nin sınırlı bir alt kümesini oynamak için mimarilerini kullanmamı engelleyen tek şey, altta yatan oyun motoruna erişim eksikliğidir. Ekrana oluşturma ve daha sonra ağa yeniden yönlendirme, makul bir sürede eğitmek için çok yavaştır. Bu nedenle, muhtemelen bu tür bir botu Diablo 2'yi yakında oynayamayacağız, ancak yalnızca açık kaynaklı veya oluşturma hedefine API erişimi olan bir şey oynayacağı için. (Belki deprem?)



Kağıt ve oyundaki sürüş problemi arasındaki büyük fark, sürüş probleminde görsel girişin yeterince eksiksiz bir durum temsilidir: sağda bir engel varsa - sola dönün, sola dönüşte bir engel varsa sağ. Ancak, bir oyunda, genellikle ekranda görüntülenmeyen şeylere dayanarak kararlar vermeniz gerekir. Bir mağazaya her girdiğinizde aynı görünebilir, ancak farklı öğeler satın almanız gerekir.
Don Reba

1
Hatırlamamın en iyisi olmak için Diablo 2, kolayca çıkarılabilen hareketli grafikler kullanıyor. Nesneleri (oyuncu, düşman vb.) İlişkili sprite listesine bağlamak oldukça basit olmalıdır. Birbiri tarafından gizlenen nesneler sorununu çözmez, ancak bu bir başlangıçtır.
Ryan Jenkins

@zergylord a) Diablo 2 ve b'yi oynatmak için tek giriş kaynağınız olarak ekrana çizilen pikselleri kullanarak ölçütlerinize ne kadar sıkı bir şekilde bağlı kalmak istediğinizi söyleyebilirseniz yardımcı olacaktır. Eğer kendiniz için işleri kolaylaştırmak istiyorsanız, bunlardan birini (veya her ikisini) biraz rahatlatmanız gerekeceğini düşünüyorum - bunu yapmaya hazır mısınız?
Stompchicken

1
Oylama çok geniş olarak kapanıyor.
Ciro Santilli 法轮功 17 病 六四 事件 法轮功

Yanıtlar:


55

YSA'nın nasıl eğitileceği konusunda endişelendiğinizi görebiliyorum, ancak bu proje farkında olmadığınız bir karmaşıklığı gizliyor . Görüntü işleme yoluyla bilgisayar oyunlarında nesne / karakter tanıma oldukça zorlu bir görevdir ( FPS ve RPG oyunları için çılgınca söyleme ). Becerilerinizden şüphe duymuyorum ve bunun yapılamayacağını da söylemiyorum, ancak YSA'nın kendisini uygulamaktan daha çok şeyleri tanımak için 10 kat daha fazla zaman harcayabilirsiniz ( dijital görüntü işleme teknikleri konusunda zaten deneyime sahip olduğunuzu varsayarak) ).

Bence fikrin çok ilginç ve aynı zamanda çok iddialı . Bu noktada yeniden düşünmek isteyebilirsiniz. Bu projenin üniversite için planladığınız bir şey olduğunu düşünüyorum, bu yüzden çalışmanın odağı gerçekten YSA ise, muhtemelen başka bir oyun, daha basit bir şey seçmelisiniz.

Bir başkasının çok uzun zaman önce farklı ama bir şekilde benzer bir projeyle ilgili ipuçları aramaya geldiğini hatırlıyorum . Kontrol etmeye değer.

Öte yandan, öneriyi kabul ediyorsanız oyun içindeki nesneleri tanımlamak için daha iyi / daha kolay yaklaşımlar olabilir. Ama önce, bu projeyi olmasını istediğiniz şey için çağıralım: akıllı bot .

Botları uygulamaya yönelik bir yöntem , oyundaki karakterin ekrandaki konumu ve sağlığı gibi ilgili bilgileri bulmak için oyun istemcisinin belleğine erişir . Bilgisayar belleğini okumak önemsizdir, ancak belleğin aranacağı yeri tam olarak bulmak değildir. Cheat Engine gibi bellek tarayıcıları bunun için çok yararlı olabilir.

Oyun altında çalışan başka bir yöntem , oluşturma bilgilerinin manipüle edilmesini içerir. Oyunun tüm nesneleri ekrana dönüştürülmelidir. Bu, tüm 3D nesnelerin konumlarının en sonunda işlenmek üzere video kartına gönderileceği anlamına gelir. Bazı ciddi hata ayıklamalarına hazır olun.

Bu cevapta kısaca görüntü işleme yoluyla ne istediğinizi başarmak için 2 yöntem tanımladım. Onlarla ilgileniyorsanız , konuyla ilgili mükemmel bir kitap olan Çevrimiçi Oyunların Kullanımı (bölüm 6) hakkında daha fazla bilgi bulabilirsiniz .


43

GÜNCELLEME 2018-07-26: Hepsi bu! Şimdi bu tür oyunların çözülebileceği noktaya yaklaşıyoruz! OpenAI kullanarak ve DotA 2 oyununu temel alan bir takım, 5v5 oyunda yarı profesyonel oyuncuları yenebilecek bir AI yapabilir . DotA 2'yi biliyorsanız, bu oyunun mekanik açısından Diablo benzeri oyunlara oldukça benzediğini biliyorsunuz, ancak takım oyunu nedeniyle daha da karmaşık olduğunu iddia edebiliriz.

Beklendiği gibi, bu, derin öğrenme ile takviye öğrenmedeki en son gelişmeler ve temiz bir API aldığınız için bir AI geliştirmeyi kolaylaştıran ve aynı zamanda oyunu hızlandırabileceğiniz için (AI oynandı) OpenAI gibi açık oyun çerçevelerinin kullanılması sayesinde başarıldı. her gün kendisine karşı 180 yıllık oyun eşdeğeri!).

5 Ağustos 2018'de (10 gün içinde!) , Bu AI'yı en iyi DotA 2 oyuncularına karşı planlamak planlanıyor. Eğer bu işe yararsa, büyük bir devrim bekliyoruz, belki de Go oyununun çözümü kadar aracı değil, ama yine de oyunlar AI için büyük bir kilometre taşı olacak!

GÜNCELLEME 2017-01: Saha, AlphaGo'nun başarısından bu yana çok hızlı ilerliyor ve neredeyse her ay oyunlarda makine öğrenme algoritmalarının geliştirilmesini kolaylaştıran yeni çerçeveler var. İşte en son bulduğum listeler:

  • OpenAI's Universe : makine öğrenimini kullanarak neredeyse tüm oyunları oynamak için bir platform . API Python'dadır ve oyunları bir VNC uzak masaüstü ortamının arkasında çalıştırır, böylece herhangi bir oyunun görüntülerini yakalayabilir! Evren'i Diablo II'yi bir makine öğrenme algoritması ile oynamak için kullanabilirsiniz!
  • OpenAI's Gym : Evren'e benzer, ancak özellikle takviye öğrenme algoritmalarını hedefliyor (bu yüzden AlphaGo tarafından kullanılan çerçevenin genelleştirilmesinden başka bir çok oyuna benziyor). Orada Udemy bir ders OpenAI Gym kullanarak koparma veya Doom gibi oyunlara makine öğrenme uygulamasını kapsayan.
  • TorchCraft : Torch (makine öğrenme çerçevesi) ile StarCraft: Brood War arasında bir köprü .
  • pyGTA5 : GTA5'te yalnızca ekran görüntülerini ( çevrimiçi birçok video içeren) kullanarak kendi kendine giden otomobiller inşa etme projesi .

Çok heyecan verici zamanlar!

ÖNEMLİ GÜNCELLEME (2016-06): OP tarafından belirtildiği gibi, yapay ağları sadece görsel girdileri kullanarak oyun oynamak için eğitme sorunu, DeepMind Derin Öğrenme-Ağ (DQN) gibi oldukça umut verici sonuçlarla birçok ciddi kurum tarafından ele alınmaktadır. ) .

Ve şimdi, bir sonraki seviye zorluğa girmek istiyorsanız, sadece görsel girişleri kullanarak Doom'u oynamak için ağları eğitmek için son derece optimize edilmiş bir platform (7000 fps) olan ViZDoom gibi çeşitli AI vizyon oyunu geliştirme platformlarından birini kullanabilirsiniz. :

ViZDoom, yalnızca görsel bilgileri (ekran arabelleği) kullanarak Doom oynayan AI botlarının geliştirilmesine izin verir. Öncelikle makine görsel öğrenimi ve özellikle derin takviye öğrenimi araştırmaları için tasarlanmıştır. ViZDoom, oyun mekaniğini sağlamak için ZDoom'a dayanmaktadır.

Ve sonuçlar oldukça şaşırtıcı, web sayfalarındaki videolara ve Python'daki güzel öğreticiye bakın !

Quake 3 Arena için Quagents adında benzer bir proje de var , bu da temel oyun verilerine kolay API erişimi sağlıyor, ancak bunu kaldırabilir ve sadece ajanınızı kontrol etmek için ekran görüntülerini ve API'yi kullanabilirsiniz.

Sadece ekran görüntülerini kullanırsak neden böyle bir platform yararlıdır? Temeldeki oyun verilerine erişmeseniz bile, böyle bir platform şunları sağlar:

  • oyunların yüksek performanslı uygulanması (öğrenme algoritmalarınızın daha hızlı birleşebilmesi için daha az veriyle daha fazla veri / oyun / öğrenme nesli üretebilirsiniz!).
  • ajanlarınızı kontrol etmek için basit ve duyarlı bir API (örneğin, bir oyunu kontrol etmek için insan girişlerini kullanmaya çalışırsanız, bazı komutlarınız kaybolabilir, bu nedenle çıktılarınızın güvenilmezliği ile de ilgilenirsiniz ...).
  • özel senaryoların kolay kurulumu .
  • özelleştirilebilir oluşturma ( işlemeyi kolaylaştırmak için aldığınız görüntüleri "basitleştirmek" için yararlı olabilir)
  • senkronize ("adım adım") oynatma (böylece ilk başta gerçek zamanlı olarak çalışmak için algoritmanız gerekmez, bu büyük bir karmaşıklık azalmasıdır).
  • platformlar arası uyumluluk, geriye dönük uyumluluk (yeni bir oyun güncellemesi olduğunda botunuzun artık oyunla çalışmamasını riske atmazsınız) gibi ek kolaylık özellikleri vb.

Özetlemek gerekirse, bu platformlarla ilgili en iyi şey , uğraşmak zorunda kaldığınız önceki teknik sorunların çoğunu ( oyun girdilerini nasıl manipüle edeceğiniz, senaryoları nasıl kuracağınız vb.) Azaltmaları ve böylece öğrenme algoritmasıyla uğraşmanız gerektiğidir. kendisi.

Şimdi, işe gidin ve bizi şimdiye kadarki en iyi AI görsel botu yapın;)


Yalnızca görsel girdilere dayanan bir yapay zeka geliştirmenin teknik sorunlarını açıklayan eski yazı :

Yukarıdaki bazı meslektaşlarımın aksine, bu sorunun inatçı olduğunu düşünmüyorum. Ama kesinlikle hella zor biri!

Yukarıda belirtildiği gibi ilk sorun , oyunun durumunun temsil edilmesidir : tam durumu tek bir görüntü ile temsil edemezsiniz, bir tür ezberlemeyi sürdürmeniz gerekir(sağlık değil aynı zamanda donanımlı nesneler ve kullanılabilecek eşyalar, görevler ve hedefler vb.). Bu tür bilgileri almak için iki yolunuz vardır: ya en güvenilir ve en kolay olan oyun verilerine doğrudan erişerek; ya da bazı basit prosedürleri uygulayarak bu bilgilerin soyut bir temsilini oluşturabilirsiniz (envanter açın, ekran görüntüsü alın, verileri çıkarın). Tabii ki, bir ekran görüntüsünden veri ayıklamak ya bazı denetimli prosedürler (tamamen tanımladığınız) koymanız ya da denetimsiz olmanız (bir makine öğrenme algoritması aracılığıyla, ancak daha sonra karmaşıklığı büyük ölçüde ölçeklendirecektir ...). Denetimsiz makine öğrenimi için, yapısal öğrenme algoritmaları adı verilen oldukça yeni bir algoritma türü kullanmanız gerekecektir (verilerin sınıflandırılması veya bir değeri tahmin etmek yerine verilerin yapısını öğrenir).http://techtalks.tv/talks/54422/

Daha sonra, başka bir sorun, ihtiyacınız olan tüm verileri getirmiş olsanız bile, oyunun sadece kısmen gözlemlenebilir olmasıdır . Bu nedenle, dünyanın soyut bir modelini enjekte etmeniz ve oyundan işlenmiş bilgilerle, örneğin avatarınızın konumu ile ekranın dışındaki görev öğelerinin, hedeflerin ve düşmanların konumu ile beslemeniz gerekir. Bunun için Vermaak 2003'ün Karışım Parçacık Filtrelerini inceleyebilirsiniz.

Ayrıca, bir olması gerekir özerk ajan ile, hedefleri dinamik olarak oluşturulmuş. Deneyebileceğiniz iyi bilinen bir mimari BDI ajanıdır, ancak muhtemelen bu mimarinin pratik durumunuzda çalışması için ince ayar yapmanız gerekecektir. Alternatif olarak, çok iyi çalışılmış ve esnek bir çerçeve olduğu için, büyük resmileştirme ve kanıt prosedürleri ile istediğinizi elde etmek için muhtemelen petri ağlarının her türlü varyasyonuyla birleştirebileceğiniz Yinelemeli Petri Net de vardır.

Ve nihayet, yukarıdakilerin hepsini yapsanız bile, oyunu hızlandırılmış bir hızda taklit etmenin bir yolunu bulmanız gerekecek (bir video kullanmak güzel olabilir, ancak sorun algoritmanızın sadece kontrolsüz olarak izleyebilmesi ve kendini denemek öğrenme için çok önemlidir). Gerçekten de, mevcut en yeni algoritmanın, bir insanın öğrenebileceği aynı şeyi (takviye öğrenimi ile daha da fazla) öğrenmek için çok daha fazla zaman aldığı bilinmektedir, bu nedenle süreci hızlandıramazsa ( örneğin, oyun süresini hızlandıramazsanız), algoritmanız tek bir yaşamda bile birleşmez ...

Sonuç olarak, burada elde etmek istediğiniz şey, mevcut en yeni algoritmaların sınırında (ve belki de biraz ötesinde) . Bence bu mümkün olabilir, ancak öyle olsa bile, çok fazla zaman harcayacaksınız , çünkü bu teorik bir sorun değil , burada yaklaştığınız pratik bir problem ve bu yüzden çok fazla uygulamanız ve birleştirmeniz gerekiyor çözmek için farklı AI yaklaşımları .

Üzerinde çalışan bir ekiple onlarca yıl araştırma yapmak yeterli olmayabilir, bu yüzden yalnızsanız ve yarı zamanlı olarak (muhtemelen yaşamak için bir işiniz olduğu gibi) üzerinde çalışıyorsanız, yakın bir yere ulaşmadan bir ömür boyu harcayabilirsiniz çalışan bir çözüm.

Buradaki en önemli tavsiyem , beklentilerinizi düşürmeniz ve karmaşıklığı azaltmaya çalışmanız olacaksorununuzu, mümkün olan tüm bilgileri kullanarak ve ekran görüntülerine güvenerek mümkün olduğunca kaçının (yani, doğrudan oyuna bağlanmaya çalışın, DLL enjeksiyonunu arayın) ve denetlenen prosedürleri uygulayarak bazı sorunları basitleştirin. algoritma her şeyi öğrenir (yani, şimdilik görüntü işlemeyi olabildiğince düşürün ve dahili oyun bilgilerine güvenin, daha sonra algoritmanız iyi çalışıyorsa, AI programınızın bazı bölümlerini görüntü işleme ile değiştirebilirsiniz, böylece tam amacınıza ulaşırsınız, Örneğin, iyi çalışacak bir şey elde edebiliyorsanız, sorununuzu karmaşıklaştırmayı deneyebilir ve ekran görüntülerinde denetimsiz makine öğrenme algoritmalarıyla denetimli prosedürleri ve hafıza oyunu verilerini değiştirebilirsiniz).

İyi şanslar ve işe yararsa, bir makale yayınladığınızdan emin olun, böyle zor bir pratik sorunu çözmek için kesinlikle ün kazanabilirsiniz!


27

İzlediğiniz sorun, onu tanımladığınız şekilde çözülemez. Bir sinir ağının bir sorunun zengin bir şekilde yeniden canlandırılmasını "sihirli bir şekilde" öğreneceğini düşünmek genellikle bir hatadır. YSA'nın bir görev için doğru araç olup olmadığına karar verirken akılda tutulması gereken iyi bir gerçek, bunun bir enterpolasyon yöntemi olmasıdır. Sorununuzu, bir fonksiyonun yaklaşık bir noktasını bulmak, bu fonksiyondan çok sayıda noktaya ve ağı tasarlamak ve onu eğitmek için çok zamanınızın olduğu bir çerçeve olarak düşünüp düşünemeyeceğinizi düşünün.

Önerdiğiniz sorun bu testi geçmiyor. Oyun kontrolü ekrandaki görüntünün bir işlevi değildir. Oyuncunun hafızada tutması gereken çok fazla bilgi var. Basit bir örnek olarak, bir oyunda her mağazaya girdiğinizde ekranın aynı göründüğü çoğu zaman doğrudur. Ancak, satın aldığınız ürün koşullara bağlıdır. Ağ ne kadar karmaşık olursa olsun, ekran pikselleri girdiyse, mağazaya girdikten sonra her zaman aynı eylemi gerçekleştirir.

Ayrıca ölçek sorunu var. Önerdiğiniz görev, makul bir sürede öğrenmek için çok karmaşıktır. Görmeliydin aigamedev.com oyunu AI nasıl çalıştığını için. Yapay Yapay Sinir Ağları bazı oyunlarda başarılı bir şekilde kullanılmıştır, ancak çok sınırlı bir şekilde kullanılmaktadır. Oyun AI geliştirmek zordur ve genellikle pahalıdır. İşlevsel sinir ağları inşa etmek için genel bir yaklaşım olsaydı, endüstri büyük olasılıkla bu ağa el koyardı. Tic-tac-toe gibi çok, çok daha basit örneklerle başlamanızı tavsiye ederim.


Yeterince adil. Bir ağa benzeyen çoğu şeyi YSA olarak adlandırabilirsiniz, ancak bu önemli bir tartışmaya yol açmayabilir. :)
Don Reba

Heh evet ... Motivasyonumu daha derinlemesine anlatmalıydım. Oyun AI'ları yapmanın daha iyi yolları olduğunu biliyorum, ancak bunu yükselttiğim YSA simülatörünün sınırlarını zorlamak için yapıyorum. Bkz: stanford.edu/group/pdplab/pdphandbook
zergylord

1
Her durumda, Don Reba haklı, çok fazla ön bilgi eklemeden ve pekiştirici öğrenme yaklaşımının dayandırılabileceği yararlı özellikler çıkarmadan Diablo gibi bir şey için bir strateji öğrenmenin mümkün olacağını düşünmüyorum. Bugünün bilgisayarlarını kullanmak imkansız olmasa bile video girişinden öğrenmek son derece zor olacaktır.
ahans

18

Bu projenin kalbi bir YSA ile neyin mümkün olduğunu araştırıyor gibi görünüyor, bu yüzden görüntü işleme ile uğraşmak zorunda olmadığınız bir oyun seçmenizi öneririm (burada diğerlerinin cevaplarından, gerçekten zor bir görev gibi görünüyor) gerçek zamanlı oyun). Botunuzu oluşturmak için Starcraft API'sını kullanabilirsiniz, size ilgili tüm oyun durumlarına erişim sağlarlar.

http://code.google.com/p/bwapi/


2

İlk adım olarak ardışık karelerin farkına bakabilirsiniz. Arka plan ve gerçek canavar spritelarını ayırmanız gerekir. Sanırım dünya animasyon da içerebilir. Bunları bulmak için karakterin hareket etmesini ve dünyayla birlikte hareket eden her şeyi büyük bir arka plan görüntüsüne / animasyonuna toplamasını isterdim.

Korelasyon (FFT kullanarak) ile düşmanları tespit edebilir ve tanımlayabilirsiniz. Ancak, animasyonlar piksel kesinliğini tekrarlarsa, yalnızca birkaç piksel değerine bakmak daha hızlı olacaktır. Ana göreviniz, ekranda yeni bir nesnenin ne zaman görüneceğini belirleyecek ve hareketli grafik çerçevesinin tüm karelerini kademeli olarak bir veritabanına yazacak sağlam bir sistem yazmak olacaktır. Muhtemelen silah efektleri için de modeller yapmalısınız. Bunlar, rakip veritabanınızı karıştırmamak için çıkarılabilir.


2
Diablo II oyununa aşina olarak, 256 renk kullandığını söyleyebilirim (bazı modlar yüksek veya gerçek renk kullanmadığı sürece). Ayrıca farklı nesneleri görüntülemek için spriteları yoğun şekilde kullanır. Bazı spriteları (ekran görüntüsünden bile) çıkarabiliyorsanız, aracınızı hareketli grafiğe dayalı nesneleri tanıyacak şekilde eğitebilirsiniz (örneğin, bırakılan bir 'Minör İyileştirme İksiri' her zaman aynı görünür). Bununla birlikte, Diablo II'ye özgü şeylere derinlemesine girersem, daha fazla soru ortaya çıkacaktır. İyi şanslar
Ivaylo Slavov

1

Herhangi bir zamanda, olası tüm 'hareketlerden' bir dizi 'sonuç' oluşturabileceğinizi (olasılıkları içerebilir) ve oyunda bir miktar tutarlılık fikrinin olduğunu varsayalım (örneğin X seviyesini tekrar tekrar oynayabilirsiniz) tekrar), rastgele ağırlığa sahip N sinir ağları ile başlayabilir ve her birinin oyunu şu şekilde oynatmasını sağlayabilirsiniz:

1) Her olası 'hareket' için, olası 'sonuçların' bir listesini oluşturun (ilişkili olasılıklarla) 2) Her sonuç için, sinir ağınızı kullanarak 'sonucun' ilişkili bir 'değerini' (puanını) belirleyin (örn. -1 ile 1 arasındaki sayı, 1 en iyi sonuç, -1 en kötü sonuçtur) 3) En yüksek prob * skoruna giden 'hamleyi' seçin 4) Eğer hamle 'kazan' veya 'kaybet' olarak sonuçlanırsa, durdurun, aksi takdirde 1. adıma geri dönün.

Belirli bir süre sonra (veya bir 'kazan' / 'kaybet'), sinir ağının 'hedefe' ne kadar yakın olduğunu değerlendirin (bu muhtemelen bazı alan bilgisini içerecektir). Ardından, hedeften en uzak olan NN'lerin% 50'sini (veya başka bir yüzdesini) atın, ilk% 50'nin geçişini / mutasyonunu yapın ve yeni NN setini tekrar çalıştırın. Tatmin edici bir NN ortaya çıkana kadar koşmaya devam edin.


Ah, karışıma bir GA eklemek ilginç. Ne yazık ki, ağın aslında eylemler olarak tuş basmaları / fare hareketleri göndermesini sağladığım için, ağ başına bir fiziksel bilgisayara ihtiyacım var>. <Başka bir sorun, ortamın durum alanının ayrık olmaması (teknik olarak, ama çok ince bir tane). Örneğin, bir fare tıklamasıyla ilişkili olası sonucu hayal edin: Ağın kontrolü altındaki bir karakter hareket edebilir veya saldırabilir, ancak düşmanlar da hareket edebilir ve çevrede gölgeler ve hava efektleri gibi şeylerden piksel olarak farklılıklar olabilir. .
zergylord

Benim açımdan, sinir ağı ile yapabileceğiniz çok şey var. En iyi ihtimalle, ayrı bir devlet alanı kavramının öğrenilebilir bir sezgisel işlevi olarak kullanılabilir. Düşmanın değişkenliğini dahil etmek için muhtemelen başka bir sezgisel yöntem kullanmanız gerekir, o zaman bunu ilişkili olasılıklarla hareket başına bir dizi olası sonuç durumu oluşturmak için kullanabilirsiniz. Ayrıca, statik bir başlangıç ​​ve son konfigürasyon kavramı olduğu sürece, her bir sinir ağını birer birer çalıştırabilirsiniz.
tstramer

1

En iyi bahsinizin birkaç / mayıs ağını içeren karmaşık bir mimari olacağını düşünüyorum: yani biri eşyaları tanıyan ve bunlara cevap veren, biri dükkan için, biri savaş için (belki burada düşman tanıma için bir tane, saldırılar için bir tane gerekir), vb. .

O zaman mümkün olan en basit Diablo II oyununu, muhtemelen bir Barbar'ı düşünmeye çalışın. O zaman ilk önce, Yasa I gibi, sadece ilk alan gibi basit olsun.

Sonra değerli 'hedefler' düşman nesnelerinin kaybolması ve sağlık barının azalması (ters puanlı) olurdu sanırım.

Bu ayrı, 'daha basit' görevleri hallettikten sonra, hangi alt YSA'nın etkinleştirileceğini belirlemek için bir 'ana' YSA kullanabilirsiniz.

Eğitime gelince, sadece üç seçenek görüyorum: yukarıda açıklanan evrim yöntemini kullanabilirsiniz, ancak bunun için ayrı bir programı kodlamadığınız sürece 'kazananları' manuel olarak seçmeniz gerekir. Ağların birini izlemesini sağlayabilirsiniz. Burada bir oyuncuyu veya oyuncu grubunu taklit etmeyi öğrenecekler. Ağ, oyuncunun bir sonraki eylemini tahmin etmeye çalışır, doğru bir tahmin için güçlendirilir, vb. Eğer gerçekten YSA alırsanız, bu video oyunu ile yapılabilir, gerçek canlı oyuna gerek yoktur. Son olarak, ağın oyunu oynamasına izin verebilirsiniz, düşman ölümleri, seviye yükselmeleri, yeniden kazanılmış sağlık vb.Gibi olumlu takviye ve oyuncu ölümleri, kayıp sağlık vb. Ancak basit bir ağın bile basit görevleri bile öğrenmek için binlerce somut eğitim adımına ihtiyaç duyduğunu görmek,

Sonuçta projeniz çok iddialı. Ama bir kere için 'teoride yapılabilir' diye düşünüyorum, yeterli zaman verildi.

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

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.