Yapay zeka, özel şekilli uzay gemilerini taşımak için (hareket davranışını etkileyen şekil)


15

Ağırlıklı olarak gemi özelleştirmesine dayanan ağ bağlantılı bir sıra tabanlı 3D-6DOF uzay filosu savaş strateji oyunu tasarlıyorum. Soruyu ayarlamak için biraz bilmeniz gerektiğinden oyunu biraz açıklayayım.

Amacım, her gemiye avantajlar ve dezavantajlar sağlayacak olan özel şekiller ve ekli modüller (pervaneler, traktör kirişleri ...) ile kendi gemi filonuzu yaratma yeteneğidir , böylece birçok farklı filo dağıtımınız vardır. Örneğin, yanda iki pervanesi olan uzun gemi, geminin bu düzlem etrafında kolayca dönmesine izin verirdi, arka tarafa çok sayıda pervane yerleştirmedikçe daha büyük gemiler yavaşça hareket ederdi (bu nedenle hareket ederken daha fazla "inşaat" noktası ve enerji harcar ve sadece bu yöne doğru hızlı hareket edin.) Bu özelliği çevreleyen tüm oyunu dengelemeyi planlıyorum.

Oyun iki aşamada dönecekti: emirler ve savaş aşaması. Siparişler aşamasında farklı gemilere komuta edersiniz. Tüm oyuncular sipariş aşamasını bitirdiğinde, savaş aşaması başlar ve gemi emirleri bir süre gerçek zamanlı olarak çözülür, sonra eylem duraklar ve yeni bir emir aşaması vardır.

Sorun, oyuncu girişi hakkında düşündüğümde geliyor. Bir gemiyi hareket ettirmek için, yönlendirmek, ileri gitmek, fren yapmak, yerinde döndürmek istiyorsanız farklı pervaneleri açmanız veya kapatmanız gerekir ... Bu pervanelerin tüm güçlerinde çalışması gerekmez, böylece daha fazla hareket elde edebilirsiniz daha az pervane ile kombinasyonlar.

Bence bu yaklaşım biraz sıkıcı. Oyuncu motorlarla ya da başka bir şeyle uğraşmak istemiyor, sadece hareket ettirmek ve öldürmek istiyorsun. Bunları gemilere emir vermek oyuncu niyetinde yolu gereğidir hedefe ve bir rotasyon ve ardından AI bu hareket ve rotasyon başarmak için doğru pervane gücünü hesaplamak olacaktır. Tahrik, tüm dönüş hesaplaması (siparişler verildikten sonra) ile aynı olmak zorunda değildir, bu nedenle gemiler hareket ettikçe tepki verirse, pervanelerin güçlerini dinamik olarak ihtiyaçlara göre ayarlayabilirler. uygulamak çok zor ve oyunun çalışması gerçekten gerekli değil.

Her iki durumda da, yapay zeka hangi pervanelerin en iyi (veya en azından en kötü değil) yörünge için harekete geçeceğine nasıl karar verecek?

Bazı yaklaşımlar hakkında:

  • AI Öğrenme: Gemi tipleri, hareketlerini deneme yanılma yoluyla öğrenir, davranışlarını daha fazla kullanımla ayarlar ve sonunda "akıllı" olur. AI kodlamasına bu kadar dahil olmak istemiyorum ve oyuncu için sinir bozucu olabileceğini düşünüyorum (oynatmadan öğrenmesine izin verseniz bile).
  • Önceden hesaplanan zaman aşımı hareketi: Geminin oluşturulması üzerine, her pervane konfigürasyonu ve belirli bir delta zamanı için güç için TÜM olası hareketler hesaplanır. Bellek yoğun, çirkin, kötü.
  • Önceden hesaplanmış yörüngeler: Yukarıdaki ile aynıdır, ancak her delta zamanı için değil, daha sonra mümkün olduğunca takılan tüm yörünge. Tüm savaş aşaması için sabit bir pervane yapılandırması gerektirir ve hala bellek yoğun, çirkin ve kötüdür.
  • Sürekli kaba zorlama: AI, tüm savaş aşaması boyunca TÜM olası pervane yapılandırmalarını sürekli olarak kontrol eder, birkaç zaman adımını önceden hesaplar ve buna göre en iyisi olduğuna karar verir. Con: şimdi iyi olan şey daha sonra o kadar iyi olmayabilir ve çok fazla CPU yoğun, çirkin ve kötü.
  • Tek kaba kuvvet: Yukarıdaki ile aynı, ancak simülasyonun başında sadece kaba kuvvet, bu nedenle tüm savaş aşaması boyunca sabit pervane yapılandırmasına ihtiyaç duyar.
  • Sürekli açı kontrolü: Bu tam bir hareket yöntemi değildir, ancak "aptal" pervane konfigürasyonlarını atmanın bir yoludur. Mevcut pervanenin normal vektörü ve sonuncusu göz önüne alındığında, pervane için açıya göre gereken güce yaklaşık olarak ulaşabilirsiniz. Bunu tüm savaş aşaması boyunca sürekli yapmalısınız. Son zamanlarda bunu anladım, bu yüzden çok fazla düşünmedim. A priori, "şimdi iyi olan şey o kadar iyi olmayabilir" dezavantajına sahiptir ve daha iyi bir itiş yapılandırması yapmak için birlikte hareket edebilecek diğer pervaneleri umursamaz.

Burada gerçekten sıkışıp kaldım. Herhangi bir fikir?


Yönlendirme davranışlarına baktınız mı?
stonemetal

1
@stonemetal emin. Buradaki sorun, yönlendirme davranışlarının genellikle nesnenin konumunun ve dönüşünün tam kontrolü ve bazı kısıtlamalar (veya en azından web'de bulduğum şey olduğunu) varsayarak modellenmesidir. Buradaki AI, varlık üzerinde tam kontrole sahip değildir. , ancak yalnızca varlığı hareket ettiren şeylerin (pervanelerin) üzerinde. Bu yönlendirme davranışlarını uzay gemisinin gerçek hareketiyle ilişkilendirmekte zorlanıyorum.
kaoD

bu aynı zamanda direksiyon davranışlarının yarış arabalarında çok iyi çalışmamasının nedeni de budur. Direksiyon davranışları harika ama her şeye evrensel bir çözüm değiller.
tenpn

@Hantostonline'ın cevapladığı şey boyunca bir şeyler düşünüyordum. Her şeyi inşa etmelerine izin verin, ardından bir direksiyon davranışı için kısıtlamalara çevirin. Yanıtınıza rağmen, direksiyon davranışları muhtemelen yeterince esnek değil gibi görünüyor.
stonemetal

1
Bunun çok eski olduğunu biliyorum, ama aradığınız şey kinodinamik hareket planlaması
mklingen

Yanıtlar:


4

Üzgünüm denenmiş ve test edilmiş bir çözümümüz yok, ancak bu matematiksel olarak çözülemez mi?

Herhangi bir pervane ve kütle merkezinden uzaklığı göz önüne alındığında, hangi düzlemde dönebileceğinizi hesaplayabilirsiniz.

Herhangi bir hareket için 1 veya daha fazla pervane kullanabilirsiniz. Her pervane, düzleminin hedef yönlendirmeye katkıda bulunup bulunamayacağını, pervaneden katkıda bulunmak için ne kadar çaba sarf edeceğini (CoM'den uzak pervanelerin daha fazla dönüş elde etmek için daha az enerji kullanabileceğini) ve bunun ne kadar yaklaşacağını görmek için sorgulanabilir. sizi hedef orittasyona götürür. Ardından, en az toplam enerji veya en hızlı hareket olabilecek düşük maliyetli bir çözüm bulana kadar bu arama alanında A * olursunuz.

Hedefe yaklaştıkça dönüşü ve ılımlı gücü tamamlarken, belki bir PID denetleyicisiyle yeniden değerlendirmeye devam edin.

İleri hareket için, basit bir çözüm sizi her zaman ileriye götürür ve hedefe yaklaşırken hedef hızınızı düşürür. Oynamak için 3B alanınız olduğundan karmaşık 3 noktalı dönüş rutinlerinden kaçınabilirsiniz. Bir tür ilk durum olarak, düz hat hızı için seçilen pervanelerin çıkışını tornalama hesaplamalarınıza katmanız gerekir.

Bu çok zarfın arkasında ama büyük bir kusur görmüyorum. Sadece çok çalışma ve sayı ayarlama. :)


Bu aradığım whay, matematiksel bir çözüm ... teşekkürler! Umarım göründüğü kadar kolay olur.
kaoD

7

Bir AI kullanarak oynatılabilirlik için biraz oyuncu kontrolünden vazgeçmek istediğiniz için, pervaneler üzerinde yapışma etkisini basitleştirmeyi ve gemi boyutlarını bir bilgisayar algoritması için daha az, daha kolay yönetilebilir parametrelere değiştirmeyi de düşünebilirsiniz. Oyuncunun hala geminin belirli bir kısmına pervane eklemesine izin verilir, ancak tamamlandığında bu parametrelere 'sıkıştırılır'.

Her pervane geminin dönüş hızını etkiler veya paralel yerleştirilmiş bir pervane ile birlikte belirli bir boyuttaki hareket hızını etkiler. Bu parametreleri her pervane için birleştirin ve bir gemi için maksimum dönüş hızını ve hızını elde edin. Her iki pervane ve pervane için bu iki parametreyi, mevcut tüm boyutlar (yukarı, aşağı, sol, sağ, ileri, geri) için bir bütün olarak geminin maksimum dönüş ve hız hızına birleştirin.

Her bir boyut için dönüş hızını ve hızını kullanarak, geminin bir varış yerine taşınmasına izin vermek için yeterli bilgiye sahipsiniz. Oyuncu pervane konfigürasyonunun etkisini görecektir, ancak kaputun altında girişi büyük ölçüde basitleştirilmiştir. Uçağın seyahat etmesi gereken mesafeye göre, uçuşun daha doğal görünmesini sağlamak ve oyuncunun gemi hareketi üzerinde kontrol sahibi olduğu hissini artırmak için birden fazla sinek stratejisi oluşturabilirsiniz. Ama sonunda, dediğin gibi, geminin hedefe nasıl ulaştığı ve rotasının optimal olup olmadığı önemli değil, sadece orada olması gerekiyor ve varış zamanı pervane konfigürasyonundan etkileniyor.

Gemi boyutları için, kaba bir etki için sıkıştırılmış hız değerlerine sahip olduktan sonra bunları hesaba katabilir veya daha kesin bir etki hesaplarken bunları kullanabilirsiniz. Muhtemelen kesin yöntemin çabaya değip değmediğini test etmek istersiniz, çünkü fark oyuncunun kontrol duygusunu etkilemeyebilir.


Tam olarak aradığım şey değil, ama gerçekten ihtiyacım olursa hile yapabilir. İdea için oy verin :)
kaoD

0

Uzayda, şekil hareketi etkilemez. Sürükleyecek hava yok.

Önemli olan gemi artı eklenti toplam kütlesi. Bu daha basit bir kütle itme yerçekimi problemidir. Böylece bu hesaplamayı yapabilir veya sıra tabanlı bir oyun olduğu için Traveler gibi RPG'ler gibi bir hareket sistemi geliştirebilirsiniz.


GD.SE'ye Hoşgeldiniz! Bu sorunun zaten kabul edilmiş bir cevabı var ve 2 yıl önce soruldu - belki de sitedeki daha yeni soruların bazılarını cevaplayabilirsiniz.
Polar

Evet, hepsi doğru, ama her zaman daha sonra (yaptığım gibi) diğer tökezleyecek ve bazı kullanım buluyorum. hehe, buraya soruları cevaplamak için gelmedim… çoğu gibi kendi sorunlarımın çözümlerini araştırıyorum.
gnoll110

@Polar soru posteri burada. Cevabını çok ilginç buldum! Yanıt vermeye geri döndüğüne sevindim ve sanırım yıllar sonra değer katmak SO'nun en değerli parçalarından biri.
kaoD

@ gnoll110 Burada yanlış olabilirim. Sürükleme yok, tamam, ancak itme vektörünün kütle merkezi ile oluşturduğu açı, geminin çevrilmesini veya dönmesini etkiler ... değil mi? Örneğin: kütle merkezi olan bir motor çevirir, kütle merkezinden hareket ettirirken gemiye dönen bir bileşen ekleyecektir.
kaoD

@kaoD Biraz sert görünüyorsa özür dilerim - belli ki SO daha sonra değer katıyor. Daha yeni sorulara da cevap verebileceğini öneriyordum - ne kadar çok soru olursa o kadar iyi!
Polar
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.