Panduan mendalam untuk proyek menarik ini menggunakan sistem multi-agen

Perkenalan

Tentang sistem multi-agen

Sistem multi-agen (atau “sistem yang diatur sendiri”) adalah sistem terkomputerisasi yang terdiri dari beberapa agen cerdas yang saling berinteraksi. Sistem multi-agen dapat memecahkan masalah yang sulit atau tidak mungkin diselesaikan oleh agen individu atau sistem monolitik. Kecerdasan dapat mencakup pendekatan metodologis, fungsional, prosedural, pencarian algoritmik, atau pembelajaran penguatan. Wikipedia.

Seperti yang Anda lihat, membangun sistem multi-agen adalah cara cerdas untuk meniru dan memahami sistem kompleks dengan parameter yang sangat sedikit. Setiap agen harus otonom, sadar akan lingkungannya secara lokal, dan tidak mempunyai otoritas terhadap agen lainnya. Anda dapat menemukan sistem semacam ini dalam perdagangan online, tanggap bencana, pengawasan, pemodelan struktur, dan video game seperti Sim City.

Sasaran

Tujuan utama artikel ini adalah untuk mengenal sistem multi-agen dan bereksperimen dengan Flutter Flame. Untuk melakukannya, saya memutuskan untuk menyimulasikan sekawanan burung. Pertama, sangat memuaskan untuk dilihat, dan kedua, kita dapat mengubah parameter seperti kemampuan terbang atau bidang pandang mereka dan melihat pengaruhnya terhadap perilaku yang mereka rasakan.

Baca lebih lanjut tentang hal ini di makalah ini.

TL;DR

Dapatkan proyek lengkap di GitHub saya. Mainkan dengannya atau lihat langsung di sana.





Ringkasan

Sebelum bermain (sedikit) dengan Flame, kita perlu mendefinisikan model kita. Dibutuhkan koordinat 2D, kecepatan, arah, bidang pandang, jarak pandang, dan batasan untuk membatasi kemampuan manuvernya. Semua itu akan dinyatakan dalam Sistem Satuan Internasional.

Dan dengan menggunakan kemampuan tersebut, ia harus mampu mengikuti tiga aturan:

  • Bergerak menuju pusat kawanan untuk menghindari predator.
  • Menjauhlah dari burung lain untuk menghindari tabrakan.
  • Terbang ke arah yang sama dengan burung terdekat dalam bidang pandangnya.

Terakhir, agar tetap mendekati skala dunia nyata, simulasi akan berjalan dalam layar penuh, dan setiap piksel akan sama dengan satu meter. Selain itu, kita akan menganggap lingkungan sebagai toric, artinya pojok kiri atas akan terhubung ke pojok kanan bawah.

Mari Kita Lakukan

Biasanya, saya suka membuat environment berisi data untuk diberikan ke agents selama simulasi. Dalam hal ini, kita tidak membutuhkan banyak.

Untuk membuatnya lebih menarik, kita akan membuat dua jenis Agent, yang mewakili dua spesies burung berbeda. Setiap burung terbang dengan jenisnya masing-masing.

Selama setiap perhitungan rendering, seekor burung akan mengeksekusi action yang menyimulasikan perilakunya, dan updatePositionInToricSpace akan menangani batasan torik lingkungan kita.

Metode kunci untuk dilihat adalah action . Ketika kita sampai pada implementasi sebenarnya, di sinilah perilaku akan berada. dt adalah waktu delta yang berlalu antara dua tindakan yang dinyatakan dalam detik.

Simulasi kita akan berhubungan dengan pigeon dan sparrow . Mereka memiliki beberapa karakteristik terbang yang sama, tetapi kita berasumsi bahwa burung pipit lebih cepat dan lebih gesit daripada merpati.

Metode Pembantu

Setiap kali seekor burung mencoba melampaui kecepatan maksimumnya, kami menyesuaikan vektor kecepatannya.

Metode perilaku sebaiknya hanya memperhitungkan agen akun di fieldOfView dan distanceView saat ini. Anda tidak dapat melihat apa yang ada di belakang kepala Anda.

Metode Perilaku

Aturan pertama, rata-rata posisi mereka, hitung vektor baru ke arahnya dan terapkan faktor kohesi untuk mengontrol seberapa cepat mereka berkumpul.

Aturan kedua, hitung vektor penghindaran baru untuk masing-masing vektor yang lebih dekat dari jarak tumbukan dan terapkan faktor pemisahan untuk menangani seberapa cepat mereka mengubah lintasan.

Aturan ketiga, rata-rata kecepatan tetangga dan terapkan faktor penyelarasan untuk menangani seberapa cepat kita mengubah kecepatan.

Pada akhirnya

Semua ini mengarah pada perilaku yang diungkapkan dalam metode action di bawah. Bergerak menuju pusat kawanan burung sejenis, hindari tabrakan dengan semua burung dan terbang dengan arah/kecepatan yang sama dengan jenis burung tersebut. Hal yang sama berlaku untuk kelas Sparrow.

Terakhir, kita perlu membuat Component untuk setiap jenis burung. Itu adalah kelas yang akan digunakan Flame untuk membuat burung kita.

action diganti hanya untuk memperbarui vektor position yang disediakan oleh PositionComponent dan dt hanyalah waktu delta antara dua frame, dan kita semua tahu bahwa distance = speed * time.

Lalu kita hanya perlu mengisi dunia kita dengan burung secara acak, dan selesai!

Kesimpulan

Seperti yang Anda lihat, sistem multi-agen adalah alat yang ampuh untuk memahami perilaku kompleks dengan aturan sederhana. Anda dapat memperluas contoh ini dengan menambahkan predator, rintangan, lokasi makanan, dan variasi karakteristik masing-masing agen.

Imajinasi Anda adalah batasnya!