AI untuk memindahkan pesawat ruang angkasa berbentuk khusus (bentuk yang memengaruhi perilaku gerakan)

15

Saya merancang game strategi pertempuran armada ruang 3D-6DOF berbasis giliran yang sangat bergantung pada kustomisasi kapal. Izinkan saya menjelaskan permainan ini sedikit, karena Anda perlu tahu sedikit tentang itu untuk mengatur pertanyaan.

Apa yang saya tuju adalah kemampuan untuk membuat armada kapal Anda sendiri dengan bentuk khusus dan modul yang terpasang (baling-baling, balok traktor ...) yang akan memberi keuntungan dan kerugian bagi setiap kapal, sehingga Anda memiliki banyak distribusi armada yang berbeda. Misalnya, kapal panjang dengan dua baling-baling di samping akan membiarkan kapal berputar di sekitar pesawat itu dengan mudah, kapal yang lebih besar akan bergerak lambat kecuali jika Anda menempatkan banyak baling-baling di belakang (karena itu menghabiskan lebih banyak "konstruksi" poin dan energi saat bergerak, dan itu akan hanya bergerak cepat ke arah itu.) Saya berencana untuk menyeimbangkan semua permainan di sekitar fitur ini.

Permainan akan berputar di sekitar dua fase: fase pesanan dan pertempuran. Selama fase pesanan, Anda memerintahkan kapal yang berbeda. Ketika semua pemain menyelesaikan fase pesanan, fase pertempuran dimulai dan pesanan kapal diselesaikan secara real-time untuk beberapa waktu, maka aksinya berhenti dan ada fase pesanan baru.

Masalahnya muncul ketika saya berpikir tentang input pemain. Untuk memindahkan kapal, Anda perlu menghidupkan atau mematikan baling-baling yang berbeda jika Anda ingin menyetir, bergerak maju, mengerem, memutar di tempat ... Baling-baling ini tidak harus bekerja dengan kekuatan penuh, sehingga Anda dapat mencapai lebih banyak gerakan kombinasi dengan baling-baling lebih sedikit.

Saya pikir pendekatan ini agak membosankan. Pemain tidak ingin bermain-main dengan motor atau apa pun, Anda hanya ingin MOVE dan MEMBUNUH. Cara saya bermaksud pemain untuk memberi perintah kepada kapal-kapal ini adalah dengan tujuan dan rotasi , dan kemudian AI akan menghitung kekuatan baling-baling yang benar untuk mencapai gerakan dan rotasi itu. Propulsi tidak harus sama dengan seluruh perhitungan putaran (setelah pesanan diberikan) sehingga akan lebih keren jika kapal bereaksi ketika mereka bergerak, menyesuaikan kekuatan baling-baling untuk kebutuhan mereka secara dinamis, tetapi mungkin terlalu sulit untuk diterapkan dan itu tidak benar-benar diperlukan untuk permainan untuk bekerja.

Dalam kedua kasus, bagaimana AI memutuskan baling-baling mana yang akan diaktifkan untuk lintasan terbaik (atau setidaknya tidak terburuk) yang akan dicapai?

Saya memikirkan beberapa pendekatan:

  • Belajar AI: Jenis kapal akan belajar tentang pergerakan mereka dengan coba-coba, menyesuaikan perilaku mereka dengan lebih banyak kegunaan, dan akhirnya menjadi "pintar". Saya tidak ingin terlibat sejauh itu dalam pengkodean AI, dan saya pikir itu bisa membuat frustrasi pemain (bahkan jika Anda bisa membiarkannya belajar tanpa bermain.)
  • Pergerakan timestep pra-dihitung: Setelah pembuatan kapal, SEMUA gerakan yang mungkin dihitung untuk setiap konfigurasi baling-baling dan daya untuk delta-waktu yang diberikan. Memori intensif, jelek, buruk.
  • Lintasan yang dihitung sebelumnya: Sama seperti di atas tetapi tidak untuk setiap delta-waktu tetapi keseluruhan lintasan, yang kemudian akan dipasang sebanyak mungkin. Membutuhkan konfigurasi baling-baling yang tetap untuk seluruh fase pertempuran dan masih membutuhkan banyak memori, jelek dan buruk.
  • Continuous brute forcing: AI terus-menerus memeriksa SEMUA konfigurasi baling-baling yang mungkin di seluruh fase pertempuran, menghitung ulang beberapa langkah waktu dan memutuskan mana yang terbaik berdasarkan itu. Con: apa yang baik sekarang mungkin tidak sebagus nanti, dan itu terlalu intensif CPU, jelek, dan buruk juga.
  • Single brute forcing: Sama seperti di atas, tetapi hanya brute forcing di awal simulasi, sehingga diperlukan konfigurasi baling-baling yang konstan di seluruh fase pertempuran.
  • Pemeriksaan sudut Coninuous: Ini bukan metode gerakan penuh, tapi mungkin cara untuk membuang konfigurasi baling-baling "bodoh". Mengingat vektor normal baling-baling saat ini dan yang terakhir, Anda dapat memperkirakan daya yang dibutuhkan untuk baling-baling berdasarkan sudut. Anda harus melakukan ini terus menerus selama seluruh fase pertempuran. Saya menemukan yang ini baru-baru ini jadi saya tidak terlalu memikirkannya. A priori, ia memiliki kelemahan "apa yang baik sekarang mungkin tidak sebagus nanti", dan tidak peduli dengan baling-baling lain yang mungkin bertindak bersama untuk membuat konfigurasi penggerak yang lebih baik.

Saya benar-benar terjebak di sini. Ada ide?

kaoD
sumber
Sudahkah Anda memperhatikan perilaku menyetir?
stonemetal
1
@ Logam yakin. Masalahnya di sini adalah bahwa perilaku kemudi biasanya dimodelkan dengan asumsi kontrol penuh atas posisi dan rotasi objek dan beberapa kendala (atau setidaknya itulah yang saya temukan di web.) AI di sini tidak memiliki kontrol penuh atas entitas , tetapi hanya atas hal-hal (baling-baling) yang membuat entitas bergerak. Saya mengalami kesulitan menghubungkan perilaku kemudi ini dengan penggerak sebenarnya dari pesawat ruang angkasa.
kaoD
itulah alasan yang sama perilaku kemudi tidak bekerja dengan baik pada mobil balap. Perilaku mengarahkan itu bagus, tetapi itu bukan solusi universal untuk segalanya.
tenpn
@ HOD, aku memikirkan sesuatu yang dijawab ghostonline. Biarkan mereka membangun apa pun, lalu menerjemahkannya menjadi kendala untuk perilaku kemudi. Meskipun dari respons Anda, sepertinya perilaku kemudi mungkin tidak cukup fleksibel.
stonemetal
1
Saya tahu ini sangat tua, tetapi apa yang Anda cari disebut perencanaan gerak
kinodinamik

Jawaban:

4

Maaf tidak punya solusi yang sudah teruji, tetapi apakah ini tidak dapat diselesaikan secara matematis?

Mengingat baling-baling apa pun dan offsetnya dari pusat massa, Anda dapat menghitung bidang apa yang dapat Anda putar.

Untuk gerakan apa pun, Anda dapat menggunakan 1 atau lebih baling-baling. Setiap baling-baling dapat ditanyakan untuk melihat apakah pesawatnya dapat berkontribusi pada orientasi target, berapa banyak upaya yang diperlukan dari baling-baling untuk berkontribusi (baling-baling jauh dari CoM dapat menggunakan lebih sedikit energi untuk menghasilkan lebih banyak putaran), dan seberapa dekat yang akan diperoleh Anda ke target oritentation. Kemudian Anda A * melintasi ruang pencarian itu sampai Anda menemukan solusi dengan biaya rendah, yang bisa menjadi energi total yang digunakan atau gerakan tercepat.

Terus mengevaluasi kembali bahwa ketika Anda menyelesaikan putaran dan kekuatan moderat saat Anda mendekati target, mungkin dengan kontroler PID.

Untuk gerakan maju, solusi sederhana akan membuat Anda selalu maju, menjatuhkan kecepatan target saat mendekati target. Karena Anda memiliki ruang 3D untuk dimainkan, Anda dapat menghindari rutinitas belokan 3 poin yang rumit. Anda perlu memfaktorkan output dari baling-baling yang dipilih untuk kecepatan garis lurus ke dalam perhitungan belokan Anda, karena semacam keadaan awal.

Ini sangat terbelakang, tapi saya tidak melihat kekurangan besar. Hanya banyak kerja keras dan penyesuaian nomor. :)

tenpn
sumber
Inilah yang saya cari, solusi matematika ... terima kasih! Saya harap ini semudah kedengarannya.
kaoD
7

Karena Anda ingin melepaskan sedikit kontrol pemain untuk bermain menggunakan AI, Anda mungkin ingin mempertimbangkan juga menyederhanakan efek pemasangan pada baling-baling dan mengubah dimensi kapal menjadi parameter yang lebih mudah dikelola untuk algoritma komputer. Pemain masih diperbolehkan untuk menambahkan baling-baling pada bagian kapal yang diberikan, tetapi setelah selesai ini 'dikompresi' menjadi parameter.

Setiap baling-baling memengaruhi laju belokan kapal, atau, dikombinasikan dengan baling-baling yang ditempatkan paralel, memengaruhi laju perjalanan dalam dimensi tertentu. Gabungkan parameter ini untuk setiap baling-baling, dan Anda mendapatkan kecepatan belokan dan kecepatan maksimum untuk sebuah kapal. Gabungkan kedua parameter ini untuk setiap baling-baling dan baling-baling yang disetel ke putaran maksimum dan laju kecepatan untuk kapal secara keseluruhan, untuk semua dimensi yang tersedia (atas, bawah, kiri, kanan, maju, mundur).

Dengan menggunakan kecepatan belokan dan kecepatan untuk setiap dimensi, Anda memiliki informasi yang cukup untuk benar-benar memungkinkan kapal bergerak ke tujuan. Pemain akan melihat efek dari konfigurasi baling-balingnya, tetapi di bawah kap inputnya sangat disederhanakan. Anda bisa membuat lebih dari satu strategi terbang berdasarkan jarak yang harus ditempuh kapal, untuk membuat penerbangan terlihat lebih alami dan meningkatkan rasa pemain dia telah melakukan kontrol atas pergerakan kapal. Tetapi pada akhirnya, seperti yang Anda katakan, tidak masalah bagaimana kapal mencapai tujuan dan apakah rutenya optimal, hanya perlu ada di sana dan waktu kedatangannya dipengaruhi oleh konfigurasi baling-baling.

Untuk dimensi kapal, Anda bisa memfaktorkannya begitu Anda memiliki nilai kecepatan terkompresi untuk efek kasar, atau menggunakannya saat menghitung untuk efek yang lebih tepat. Anda mungkin ingin menguji apakah metode yang tepat sepadan dengan usaha, karena perbedaannya mungkin tidak mempengaruhi rasa kontrol pemain.

hantu
sumber
Tidak persis apa yang saya cari, tetapi mungkin melakukan trik jika saya benar-benar perlu.
Suara positif
0

Di ruang, bentuk tidak memengaruhi gerakan. Tidak ada udara untuk diseret.

Itu kapal ditambah total pengaya massa yang penting. Ini masalah gravitasi dorong massa yang lebih sederhana. Jadi Anda dapat melakukan perhitungan ini atau karena ini adalah game berbasis giliran, kembangkan sistem pergerakan seperti yang dimiliki RPG seperti Wisatawan.

gnoll110
sumber
Selamat datang di GD.SE! Pertanyaan ini sudah memiliki jawaban yang diterima dan ditanyakan 2 tahun lalu - mungkin Anda bisa menjawab beberapa pertanyaan baru di situs.
Polar
Ya, semua benar, tapi saya selalu menganggap orang lain akan tersandung nanti (seperti yang saya lakukan) dan menemukannya berguna. hehe, saya tidak datang ke sini untuk menjawab pertanyaan ... seperti kebanyakan, mencari solusi untuk masalah saya sendiri.
gnoll110
@Polar pertanyaan poster di sini. Saya menemukan jawabannya sangat menarik! Saya senang dia kembali untuk menjawab, dan saya pikir menambah nilai bertahun-tahun kemudian adalah salah satu bagian paling berharga dari SO.
kaoD
@ gnoll110 Saya mungkin salah di sini. Tidak ada hambatan, oke, tetapi sudut bentuk vektor dorong dengan pusat massa mempengaruhi bagaimana kapal menerjemahkan atau berputar ... kan? Misalnya: mesin yang sejajar dengan pusat massa diterjemahkan, sementara memindahkannya dari pusat massa akan menambah komponen yang berputar ke kapal.
kaoD
@ kaoD Maaf jika muncul agak keras - jelas banyak SO yang menambah nilai nanti. Saya hanya menyarankan agar dia juga bisa menjawab pertanyaan baru - semakin banyak pertanyaan dijawab, semakin baik!
Polar