Saya sedikit macet:
Saya mengimplementasikan AI dengan GOAP (Perencanaan Tindakan Berorientasi Tujuan, http://alumni.media.mit.edu/~jorkin/gdc2006_orkin_jeff_fear.pdf ) untuk permainan simulasi. Itu bekerja dengan baik.
Sekarang saya ingin agar agen dapat bekerja sama (mis. Melakukan tindakan bersama). Apa dalam hal ini AI-Design terbaik yang GoapActions menjaga sambungan longgar?
Haruskah mereka merencanakan bersama? (dalam hal ini apa "keadaan dunia"?) Atau haruskah mereka berbagi rencana mereka? semacam sistem pesan?
Contoh
Agent1: Worldstate Agent 1: isLonely = true
Goal Agent1: isLonely = false
Plan Agent1: AskAgent2ToTalk -> TalkToAgent2
Agent2 Worldstate Agent 2: hasWood = false
Goal hasWood = true
Plan Agent2: GetAxe -> ChopWood -> BringWoodToSupply
Bagaimana saya mendapatkan rasi bintang ini?
Paket Agent1: TalkToAgent2 Paket
Agent2: TalkToAgent1 -> GetAxe -> ChopWood -> BringWoodToSupply
Atau jika mereka berbicara dan salah satu agen diinterupsi (misalnya oleh musuh yang menyerang), agen lain harus tahu bahwa Tindakan TalktoAgent2-nya telah berakhir.
sumber
Saya pikir goap adalah versi baru dari mesin negara yang mencoba mengatur status untuk mencapai tujuan. Anda hanya perlu menentukan skenario mana yang terjadi di setiap negara.
misalnya Anda memiliki beberapa musuh AI yang memiliki status patroli, kejar, kejar, dan serang. Anda cukup menulis kode bahwa ketika salah satu musuh menemukan pemain, semuanya akan berubah status untuk menyerang atau mengejar status. contoh lain Anda memiliki skenario bahwa dalam keadaan serangan, satu atau 2 musuh harus mengapit pemain dan yang lainnya harus mendukung mereka. jadi setiap musuh memeriksa apakah ada musuh yang mengapit atau kondisi lain (Anda bisa mendefinisikan variabel bool untuk itu). jika tidak ada, pergi sisi lain pergi dukungan. semua tergantung pada skenario dan aturan yang Anda tetapkan.
sumber
Saya tidak tahu apakah Anda mencoba untuk mencapai hubungan longgar antara agen, karena itulah yang saya tafsirkan, bagaimanapun, itu akan menjadi pendekatan terbaik, Anda harus memeriksa Pola Pengamat , yang merupakan sistem berlangganan acara yang menghindari ketergantungan. Anda dapat menggunakannya seperti ini (saya akan mencoba menjadi agnostik bahasa):
Jadi terserah kepada Anda untuk membuat logika untuk berlangganan / berhenti berlangganan ketika agen sedang sibuk dan tidak dapat membuat perusahaan.
Jika Anda menggunakan C #, Anda harus memeriksa Delegasi Peristiwa , yang sudah menerapkan pola yang disebutkan di atas.
Semoga ini memberi Anda ide setidaknya.
sumber
Anda harus A: menggunakan langkah dan menilai dan B: Anda harus memiliki banyak tujuan dengan prioritas.
Jika Agent1 menginginkan X dan Agent2 tidak pernah menginginkan X, mereka tidak dapat bekerja bersama . Itu tidak dapat terjadi dalam sistem apa pun . Untuk memperbaiki ini, Anda harus memiliki beberapa tujuan dilacak. Anda bahkan dapat memprioritaskan tujuan berdasarkan seberapa jauh seseorang telah maju ke arah mereka dan seberapa mudah tujuan lain dapat dicapai . Dalam skenario Anda tanpa prioritas, ini menjadi:
Agent1 kemudian akan terus meminta Agent2 untuk berbicara sampai mendapat persetujuan, yang akan terjadi setelah menyelesaikan tugas pertamanya.
Mengambil langkah-langkah menuju setiap tujuan harus dievaluasi, dan sementara dengan hanya satu tujuan ini bukan masalah besar, lebih banyak tujuan berpotensi memperlambat permainan Anda.
Untuk mengatasi masalah ini, Anda memerlukan pohon yang dihasilkan dari menyelesaikan tugas yang mungkin menyembunyikan memeriksa beberapa tujuan sekaligus, mempercepat pemrosesan keputusan.
sumber