Saya baru-baru ini mengajukan pertanyaan ini dan kesimpulannya sepertinya menggunakan pemrograman genetik ( GP ) untuk Pembuatan Konten Game Prosedural belum benar-benar dilakukan. Saya ingin mengubah itu.
Saya cukup yakin GP dapat dikerahkan untuk membantu menemukan generator medan baru. Pertanyaan saya adalah bagaimana hal ini dapat dicapai?
Semua dokter memiliki beberapa bagian dasar yang dapat digeneralisasi untuk semua dokter (pemilihan orang tua, rekombinasi, mutasi, bertahan hidup). Saya bisa mencari tahu sendiri. Masalah muncul di bagian khusus masalah. Ini adalah bagaimana Anda merepresentasikan masalah dalam kode (ini biasanya menggunakan pohon), dan bagaimana Anda mengevaluasi seberapa baik generator (ini bisa menjadi satu atau lebih nilai).
Singkatnya pertanyaan:
Bagaimana Anda mewakili generator medan dengan cara yang dapat diurai menjadi pohon?
Medan seperti apa yang harus dihasilkan ini? (heightmap, grafik vertex, ...)
Semakin sedikit ini didasarkan pada hightmap, semakin baik.
Apa yang akan digunakan untuk mengevaluasi kesesuaian suatu solusi?
mis: kita ingin medan yang menarik sehingga kita dapat memiliki salah satu nilai menjadi rata-rata perubahan normals untuk setiap titik pada medan.
sumber
Jawaban:
Anda mungkin beruntung dengan pendekatan yang mirip dengan gambar genetik Karl Sims .
Dia menggunakan seperangkat operator sederhana dalam bahasa seperti LISP sehingga keluaran operator apa pun dapat digunakan untuk memengaruhi gambar, seperti halnya dalam beberapa bahasa shader (mis. Skalar akan menjadi nilai skala abu-abu,
vector3
akanRGB
, dll.) ).Meskipun saya kira itu hal implementasi, jadi yang mungkin Anda inginkan adalah kata kuncinya, yang (iirc) berisi semua dasar-dasarnya:
sin, cos, tan
, dll.)x, y
)sqrt, pow, abs, inverse
)fBm, noise2, noise3
)mandelbrot, julia
)lerp, quad, step, smoothstep
)(Beberapa hal di atas mungkin tidak dalam implementasinya; Saya menemukan pekerjaannya sejak lama dan sebenarnya telah melakukan beberapa upaya pada apa yang Anda gambarkan selama bertahun-tahun - jadi kenangan mungkin bocor :)
Menjaga agar tetap menarik (dan cepat)
Saya memiliki sedikit keberuntungan dengan pendekatan berlapis-lapis yang secara besar-besaran mengurangi jumlah evolusi yang mati.
Namun...
Sekarang saya telah dengan mudah melewati algoritma kebugaran , saya kebanyakan menggunakan pendekatan Karl Sims tentang "seleksi tidak wajar" di mana Anda melihat generasi saat ini di tengah-tengah sekelompok keturunan (dipopulerkan oleh Kai's Power Tools di masa lalu - inilah sebuah gambar apa yang saya maksud ) ..
Namun Anda mungkin dapat memiliki satu set gambar pelatihan, mungkin beberapa dari citra satelit dan beberapa gambar buatan dengan kualitas tertentu dan kemudian mungkin menggunakan wavelet atau analisis FFT 2D pada mereka vs medan yang Anda uji?
Ini adalah topik yang menarik, tetapi saya ragu apa yang Anda butuhkan jawabannya :)
EDIT: ahh. harus menghapus banyak tautan karena saya pengguna baru: - |
sumber
Saya tidak yakin Anda bisa menjawab pertanyaan ini, tetapi saya merasakan penjelasan mengapa mungkin jawaban yang cukup membantu. Jadi, Jawabannya singkatnya:
Algoritma Genetika biasanya digunakan untuk memecahkan masalah yang diketahui di mana Anda dapat mendefinisikan lingkungan melalui aturan. Kemudian Anda bisa membuat kumpulan data yang mewakili properti berbeda yang memengaruhi cara sesuatu bereaksi terhadap aturan. Komputer kemudian memainkan 'putaran' dengan set data awal, memilih nomor X teratas, mencampurkan nilainya setelah memasangkannya bersama-sama dan melakukan putaran lain .. Contoh umum dari ini adalah 'mengembangbiakan troll yang lebih baik' (melakukan pembiakan untuk temukan serangkaian nilai di mana troll umumnya bekerja dengan sangat baik di lingkungannya (Dapat berburu dan makan, membunuh atau menjauh dari penduduk desa, dapat mengumpulkan harta rampasan dan mengumpulkan semua benda mengkilap yang diinginkannya, dll).
Saya tidak yakin apa yang ingin Anda capai dapat diterapkan di bidang pembuatan medan. Satu-satunya hal yang dapat saya buat adalah evaluasi jenis permainan konten di mana Anda tidak ingin merencanakan dunia tetapi ingin membuat dunia yang AI pathing dapat dihitung dengan baik atau sesuatu seperti itu. Namun dengan ini Anda mencari satu atau set dunia yang paling tidak terbatas.
sumber
Jelas grafik vertex (mesh), ini adalah penyimpanan-bijaksana dan dapat dirasterisasi (tesselated) sesuai permintaan.
Automata seluler. Saya dapat memikirkan dua implementasi:
Automata yang diatur aturan, mungkin dengan elemen finite-automata (saat keadaan saat ini, seperti upaya melawan atau waktu idle, diperhitungkan).
Rule-set itu sendiri dapat direpresentasikan sebagai pohon keputusan percabangan atau kumpulan perintah sederhana (tidak yakin apakah itu akan berfungsi)
Hanya satu aturan yang ditetapkan untuk setiap node
Pembangun dunia. Alih-alih menerapkan solver untuk setiap node tunggal Anda dapat membuat hanya beberapa dari mereka dan memungkinkan mereka untuk menavigasi jala.
Namun, saya takut bahwa pendekatan kedua perlu didukung oleh yang pertama: keacakan awal perlu diperhalus dan saya tidak yakin apakah pembangun dapat melakukan trik. Setiap sel hidup memang memiliki mitokondria.
Integritas medan yang dihasilkan - seharusnya tidak terlihat seperti mish-mash. Dan keragaman - umumnya kita ingin sebanyak mungkin variasi yang tersedia diwakili (tanah kosong datar dari satu sisi ke sisi yang lain tidak menyenangkan). Mungkin sesuatu yang lebih kompleks seperti bagaimana simpul tetangga saling cocok (tundra di tengah padang pasir, apa?)
Harus mencobanya sendiri dengan generator mesh saya ketika / jika punya waktu luang =)
sumber