Perbedaan antara Pohon Keputusan & Pohon Perilaku untuk Game AI

64

Apa perbedaan antara Pohon Keputusan dan Pohon Perilaku untuk Pengembangan Game AI? Untuk aplikasi apa yang akan Anda gunakan satu di atas yang lain?

Lancer gratis
sumber

Jawaban:

80

Keduanya sangat berbeda. Indikator sebenarnya ada di namanya. Pohon keputusan hanya untuk membuat keputusan. Pohon perilaku adalah untuk mengendalikan perilaku. Izinkan saya menjelaskan. Perbedaan utama dalam keduanya adalah cara mereka dilalui, juga cara mereka diletakkan dan 'tipe' node berbeda.

Pohon keputusan dievaluasi dari akar ke daun, setiap saat. Agar pohon keputusan berfungsi dengan baik, simpul anak dari setiap orangtua harus mewakili semua keputusan yang mungkin untuk simpul itu. Jika sebuah simpul dapat dijawab "Ya, Tidak, Mungkin", harus ada tiga anak, Ya simpul, Tidak ada simpul dan Mungkin simpul. Ini berarti selalu ada beberapa simpul yang lebih rendah untuk dilalui, hingga mencapai simpul akhir. Traversal selalu turun. Bentuk grafis:

masukkan deskripsi gambar di sini

Cukup mudah. Kita mulai dari root, dan berdasarkan beberapa evaluasi, pilih 1, 2 atau 3. Kita pilih 3. Lalu kita lakukan evaluasi lain dan pilih B atau B ... Yah saya menggunakan kembali grafik dari bawah, maaf. Berpura-pura B di sebelah kiri adalah sihir B.

Pohon perilaku memiliki evaluasi yang berbeda. Pertama kali mereka dievaluasi (atau mereka reset) mereka mulai dari root (node ​​induk bertindak seperti penyeleksi) dan setiap anak dievaluasi dari kiri ke kanan. Node anak dipesan berdasarkan prioritasnya. Jika semua kondisi simpul anak terpenuhi, perilakunya dimulai. Ketika sebuah node memulai sebuah perilaku, simpul itu diatur ke 'running', dan ia mengembalikan perilaku tersebut. Kali berikutnya pohon dievaluasi, ia kembali memeriksa node prioritas tertinggi, kemudian ketika datang ke node 'berjalan', ia tahu untuk mengambil di mana ia tinggalkan. Node dapat memiliki urutan tindakan dan kondisi sebelum mencapai kondisi akhir. Jika ada kondisi gagal, traversal kembali ke induk. Selektor induk kemudian beralih ke anak prioritas berikutnya. Saya akan mencoba bentuk grafis di sini:

masukkan deskripsi gambar di sini

Traversal dimulai pada root, pergi ke anak 1, memeriksa kondisi anak (seperti "ada musuh di dekat?"). Kondisi gagal, dan traversal bergerak kembali ke atas pohon untuk pindah ke simpul dua. Node 2 memiliki tindakan yang dilakukan (mungkin sesuatu seperti menemukan jalan). Kemudian perilaku (sesuatu seperti mengikuti jalan). Jalur berikut ini diatur untuk berjalan dan pohon mengembalikan statusnya sebagai berjalan. Node yang gagal atau selesai dikembalikan ke 'Siap'. Kemudian saat berikutnya kami memeriksa, kami mulai lagi dengan simpul prioritas tertinggi. Gagal lagi, jadi kami melanjutkan ke simpul dua. Di sana kami menemukan kami memiliki perilaku berjalan. Kami juga menemukan perilaku telah selesai, jadi kami menandainya selesai dan mengembalikannya. Pohon kemudian diatur ulang dan siap untuk pergi lagi.

Seperti yang Anda lihat pohon perilaku lebih kompleks. Pohon perilaku lebih kuat dan memungkinkan perilaku yang lebih kompleks. Pohon keputusan mudah dipahami dan mudah diterapkan. Jadi, Anda akan menggunakan pohon perilaku ketika Anda ingin perilaku yang lebih kompleks, atau lebih banyak kontrol atas perilaku. Pohon keputusan dapat digunakan sebagai bagian dari pohon perilaku, atau digunakan sendiri untuk AI sederhana.

Beberapa pemahaman yang baik tentang bagaimana pohon perilaku diurai dapat ditemukan di sini .

MichaelHouse
sumber
Penjelasan dan ilustrasi yang bagus. Jadi ketika Anda mengatakan "Jika semua kondisi simpul anak terpenuhi ..." apakah Selectors dan Sequences berisi kondisi atau hanya node daun, yaitu Actions?
Lancer Gratis
1
Node anak adalah perilaku, tindakan, kondisi atau penyeleksi dengan lebih banyak anak. Mereka dievaluasi dari kiri ke kanan.
MichaelHouse
Pos yang bagus, meskipun saya pikir saya masih memiliki pertanyaan yang luar biasa (akan dikirim secara terpisah). Apa yang Anda gunakan untuk membuat animasi GIF?
saya--
0-2-A seharusnya tidak bisa dimainkan lagi jika 0-2-B berjalan ??? github.com/pirobot/pi_trees/issues/1
devside
@ nopnop77 Tidak jika kondisi 0-2 masih dievaluasi menjadi 0-2-B. Anda dapat melihat bahwa 0-2 dievaluasi kembali, tetapi sekali lagi tidak menghasilkan A yang dipilih.
MichaelHouse