Jika saya mengerti Anda dengan benar, hanya titik dalam beberapa volume kecil ruang n-dimensi yang memenuhi kendala Anda.
Batasan pertama Anda membatasi ke interior sebuah hypersphere, yang mengingatkan saya pada FAQ comp.graphics.algorithms "Seragam titik acak pada bola" dan Bagaimana cara menghasilkan titik yang terdistribusi secara merata dalam bola unit 3-d?
Kendala kedua memotong sedikit keluar dari hypersphere, dan kendala lainnya semakin jauh mengurangi volume yang memenuhi kendala Anda.
Saya pikir hal paling sederhana untuk dilakukan adalah salah satu pendekatan yang disarankan oleh FAQ:
- pilih beberapa kotak pembatas Axis-aligned sewenang - wenang yang kami yakin berisi seluruh volume. Dalam hal ini, -c <a_1 <c, -c <a_2 <c, ... -c <a_n <c berisi seluruh volume yang dibatasi, karena berisi hypersphere yang dijelaskan oleh kendala pertama, dan kendala lainnya terus mengecil pergi pada volume itu.
- Algoritme secara seragam memilih titik di seluruh kotak pembatas itu. Dalam hal ini, algoritme secara independen menetapkan setiap koordinat dari vektor kandidat ke beberapa nomor acak yang terdistribusi seragam secara independen dari -c ke + c. (Saya berasumsi Anda ingin titik didistribusikan dengan kepadatan yang sama di seluruh volume ini. Saya kira Anda dapat membuat algoritma memilih beberapa atau semua koordinat dengan distribusi Poisson atau distribusi non-seragam lainnya, jika Anda memiliki alasan untuk melakukan itu).
- Setelah Anda memiliki vektor kandidat, periksa setiap kendala. Jika gagal salah satu dari mereka, kembali dan pilih titik lain.
- Setelah Anda memiliki vektor kandidat, simpan di suatu tempat untuk digunakan nanti.
- Jika Anda tidak memiliki cukup vektor yang tersimpan, kembali dan coba buat vektor lain.
Dengan generator angka acak berkualitas tinggi yang cukup, ini memberi Anda satu set koordinat tersimpan yang memenuhi kriteria Anda dengan kepadatan seragam (diharapkan).
Sayangnya, jika Anda memiliki dimensi relatif tinggi n (yaitu, jika Anda membuat setiap vektor dari daftar koordinat yang relatif panjang), bidang bertuliskan (apalagi volume yang dipangkas) memiliki bagian yang sangat kecil dari total volume kotak pembatas total, jadi mungkin perlu menjalankan banyak iterasi, kebanyakan dari mereka menghasilkan poin yang ditolak di luar area terbatas Anda, sebelum menemukan titik di dalam area terbatas Anda. Karena komputer sekarang ini cukup cepat, apakah itu cukup cepat?