Saya sedang mengembangkan game / simulasi di mana agen berjuang untuk tanah. Saya memiliki situasi yang ditunjukkan pada gambar di bawah ini:
Makhluk-makhluk ini berjalan di sekitar dan menempati tanah yang mereka injak jika mereka bebas. Untuk membuat ini lebih menarik, saya ingin memperkenalkan perilaku "patroli", sehingga agen sebenarnya berjalan di sekitar tanah mereka untuk berpatroli dari penyusup yang mungkin ingin mengambilnya.
Di sisi teknis, setiap kotak diwakili sebagai x,y
posisi serta dimensi yang mewakili panjang sisinya. Ini juga berisi informasi tentang siapa yang menempati alun-alun. Semua kotak disimpan dalam ArrayList
.
Bagaimana saya bisa memperkenalkan perilaku patroli? Yang saya inginkan adalah agar setiap agen berpatroli di bagian tertentu dari wilayah tersebut (mereka membagi di antara mereka sendiri wilayah mana yang akan mereka patroli). Masalah utama yang saya temukan adalah sebagai berikut:
- Luas tanah sangat acak, seperti terlihat pada gambar. Agak sulit untuk memahami di mana batas berada di setiap arah.
- Bagaimana mereka seharusnya memecah agen untuk patroli?
- Area tanah mungkin terpisah, karena tim lawan dapat mengambil wilayah dari tengah.
Saya punya ide untuk mengambil alun-alun paling jauh di setiap arah, memperlakukan mereka sebagai batas-batas daerah, dan membagi daerah berdasarkan batas-batas itu, tetapi ini mungkin termasuk banyak tanah yang tidak relevan.
Bagaimana saya harus mendekati masalah ini?
Jawaban:
Pertanyaan yang menarik. Saya pikir salah satu masalah pertama yang harus Anda atasi adalah apakah Anda ingin perilaku patroli menjadi patroli "optimal" atau patroli "seperti manusia". Saya hanya mengarang kata-kata ini, tetapi yang saya maksud adalah:
Optimum : Agen bergerak dengan cara yang secara sempurna mendistribusikan area cakupan mereka untuk sistem secara keseluruhan.
Seperti Manusia Hidup : Para agen bergerak dan berusaha untuk mendistribusikan diri mereka sedapat mungkin, tetapi masing-masing hanya memiliki akses ke data lokal ke perspektif mereka.
Saya akan fokus pada pendekatan kedua, yang saya pikir bisa Anda selesaikan dengan menggunakan campuran berbagai pola kemudi dari Perilaku Pengarah Craig Reynolds untuk Karakter Otonomi . Ide dasar perilaku kemudi adalah menggunakan kekuatan sederhana yang bergabung untuk menghasilkan navigasi improvisasi di sekitar lingkungan. Dalam kasus Anda, saya pikir Anda ingin menggabungkan perilaku kemudi berikut:
Penghindaran (di luar wilayah) - Agen berusaha untuk tetap di dalam wilayah mereka dan menghindari pindah ke luar. Namun untuk beberapa realisme, pengaruh "melangkah keluar" wilayah tidak harus 100% di sini. Sedikit "memotong sudut" untuk pergi ke luar area mungkin akan membuat gerakan lebih realistis.
Berkeliaran - Para agen berusaha untuk terus bergerak dan menjelajah. Yang ini Anda akan ingin menimbang berat jika agen tidak akan mencoba untuk menemukan titik pemisahan yang optimal dari satu sama lain dan kemudian "tetap tinggal".
Pemisahan (agen lain) - Agen berusaha menjaga jarak dari agen lain (sehingga mereka mencakup tanah maksimum dan tidak menggumpal).
Seek (invaders) - Agen berusaha untuk mendekati setiap penyerang yang mereka deteksi.
Saya pikir Anda ingin bermain-main dengan bobot relatif secara dinamis. Misalnya, jika agen mendeteksi penyerang, bobot pemisahan harus turun. (Dengan kata lain, mereka hanya perlu menyebar ketika mereka sedang berburu, bukan ketika mereka menemukan seseorang.) Saya pikir jika Anda bermain-main dengan bobot untuk empat pola di atas, Anda akan memiliki sesuatu yang cukup dekat dengan apa yang Anda ' sedang mencari.
Ada beberapa sumber daya online tentang cara menerapkan "boids" yang mengikuti pola perilaku yang dijelaskan. Saya merekomendasikan implementasi open-source opensteer .
sumber
Satu pendekatan adalah untuk merekam, untuk setiap sel, ketika terakhir dikunjungi oleh "penjaga", dan membuat penjaga terus bergerak ke sel tetangga mana saja yang telah paling lama dikunjungi.
Tentu saja, ini mengasumsikan bahwa wilayah tersebut terhubung.
Ini bukan solusi yang sempurna, tetapi mudah dikodekan, adaptif terhadap keadaan yang berubah, dan efisien. Saya telah berhasil menggunakan algoritme ini untuk pencarian dan pelecehan serangan di rts ai saya menulis beberapa waktu lalu.
sumber