Saya sedang melakukan generator peta acak untuk game ruang 4X.
Setiap node dalam game ditempatkan pada koordinat acak (x, y) pada kisi 2d. Sebuah node dapat memiliki satu atau lebih tepi dua arah ke node lain (mewakili lubang cacing). Semua node harus memiliki setidaknya satu wormhole, dan semua node harus memiliki grafik yang sama.
Idealnya, lubang cacing tidak boleh melebihi panjang maksimum dan jika memungkinkan, lubang cacing tidak boleh saling bersilangan.
Implementasi naif saya adalah untuk beralih melalui semua node dan memiliki link node ke 3 node terdekat. Namun, saya berakhir dengan banyak sub grafik. Apa metode yang baik untuk menghasilkan tepi untuk node?
random
graph-theory
Extrakun
sumber
sumber
Jawaban:
Ini jawaban yang bagus untuk pertanyaan serupa.
Pertama buat grafik terhubung, mungkin menggunakan pohon spanning minimum seperti pada tautan di atas. Dia menyarankan menggunakan bobot tepi acak untuk membuat pohon "minimum" acak. Kemudian Anda dapat secara acak menambahkan lebih banyak tepi sehingga bukan hanya pohon minimum. Bagaimana tepatnya Anda menambahkan tepi acak tergantung pada jenis grafik yang Anda inginkan.
Faktanya, jika masalahnya hanya memastikan bahwa semua node termasuk dalam grafik yang sama, Anda dapat menggunakan metode generasi acak saat ini (atau yang lainnya), dan menerapkan algoritma Prim di atasnya. Jika Anda ingin membuat perubahan minimal pada grafik hanya untuk memastikan semua subgraf tersambung, Anda dapat mengatur biaya edge ke 0 untuk edge yang sudah ada.
sumber
Kendala utama masalah Anda ada dua: membuat grafik 1-terhubung; dan membuatnya dengan koneksi proksimal. Jawaban Philip, meski agak berharga, tidak mengatasi semua kendala masalah Anda
Ketika Anda secara naif menghubungkan titik-titik dalam cloud, Anda menghadapi risiko (dan yang tinggi, pada saat itu) dari kondisi-kondisi ini yang tidak terpenuhi.
Jadi, Anda lihat, masalahnya bukan konektivitas yang terlalu dekat dengan koneksi itu. Itu sepele untuk menghubungkan setiap node dalam grafik ke setiap node lain, tetapi menghubungkan hanya untuk mereka yang terdekat sambil mempertahankan 1-keterhubungan dari keseluruhan grafik sedikit lebih rumit.
Inilah yang menciptakan triangulasi Delaunay , dalam n dimensi. Alasan pertama untuk menggunakan triangulasi Delaunay adalah karena memenuhi kedua hal ini secara implisit. Alasan kedua adalah bahwa jauh lebih mudah untuk bekerja mundur dari grafik seperti itu (mengurangi tepi dan simpul yang tidak Anda inginkan), daripada mencoba membuatnya dengan cara lain.
Sangat penting untuk melihat bahwa ini adalah proses hierarkis. Penawaran tingkat pertama dengan konektivitas wormhole; penawaran kedua dengan jarak mungkin dapat dilalui menggunakan pengandar kapal standar. Anda dapat menerapkan Delaunay di satu atau kedua level untuk memenuhi kendala Anda.
Melakukan hal ini secara topologis murni akan meninggalkan Anda dengan lubang cacing yang tidak masuk akal, karena mereka mungkin menghubungkan satu sisi galaksi ke yang lain, terlepas dari kepadatan bintang yang tinggi di antara beween (dan mungkin bahkan jatuh pada rute langsung lubang cacing). Topologi bukan topografi; yang terakhir adalah pertimbangan atas dan di atas yang pertama. Anda prihatin dengan kedekatan dan dengan demikian topografi.
sumber