Perencanaan patroli wilayah

14

Saya sedang mengembangkan game / simulasi di mana agen berjuang untuk tanah. Saya memiliki situasi yang ditunjukkan pada gambar di bawah ini:

Area ubin hijau dan merah, dengan "makhluk" berwarna sama

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,yposisi 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?

Tohmas
sumber
1
Mungkin Anda bisa melihat beberapa teknik pemrosesan gambar untuk ide? Berbagai algoritma pertumbuhan wilayah yang berjalan secara bersamaan dapat berasal dari masing-masing agen sampai semua ubin yang dimiliki tim mereka ditugaskan sebagai agen patroli.
Quetzalcoatl
@Quetzalcoatl: Ide bagus, mudah diterapkan, tetapi ini akan menyebabkan daerah patroli yang sangat tidak setara. Pertimbangkan agen hijau pada gambar di atas. Agen kanan atas akan memiliki ~ 15 kotak untuk menutupi, yang ada di tengah hanya 2.
Junuxx
Um apakah ini kurang lebih seperti memilih blok terdekat berikutnya yang menjadi milik tim mereka dari blok saat ini.
Tohmas
1
Memang, itu tidak sempurna. Mungkin daripada menggunakan agen sebagai benih untuk wilayah tumbuh, benih dapat ditanam secara acak pada awalnya (satu per agen). Setelah daerah tumbuh selesai, mungkin langkah penyeimbangan dapat dilakukan, memperlakukan setiap daerah seperti cluster kelas dengan ubin sebagai node. KNearestNeighbour atau KMean atau yang serupa dapat beralih sampai beberapa bentuk konvergensi, di mana daerah dapat dianggap seimbang, dengan masing-masing agen kemudian ditugaskan ke benih terdekat (jarak euclidean?). (Saya pikir saya mungkin terlalu rumit ini, harus ada cara yang lebih sederhana ...)
Quetzalcoatl
1
Mungkin setiap agen bisa mulai dengan memukul mundur semua agen lain seperti magnet. Itu akan memaksa agen ke berbagai sudut wilayah. Ketika agen-agen itu beristirahat, maka bagi tanah itu seperti yang disarankan Quetzalcoatl. Wilayah harus kira-kira genap.
tyjkenn

Jawaban:

9

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 .

Cameron Fredman
sumber
2

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.

meriton
sumber