Saya mencari algoritma untuk menghasilkan array angka acak N, sehingga jumlah angka-angka N adalah 1, dan semua angka berada dalam 0 dan 1. Misalnya, N = 3, titik acak (x, y, z) harus terletak di dalam segitiga:
x + y + z = 1
0 < x < 1
0 < y < 1
0 < z < 1
Idealnya saya ingin setiap titik dalam area memiliki probabilitas yang sama. Jika terlalu sulit, saya bisa membatalkan persyaratan. Terima kasih.
Jawaban:
Mari kita asumsikan bahwa Anda ingin mengambil sampel di dalamnya
Ini tidak membuat perbedaan, karena titik sampel akan tetap berada di area yang Anda minta dengan probabilitas tinggi.
Sekarang Anda tinggal mengambil sampel titik dari simpleks . Dalam contoh 3d Anda mendapatkan simpleks (segitiga) 2d direalisasikan dalam 3d.
Cara memilih titik secara seragam secara acak dibahas dalam posting blog ini (lihat komentar).
Untuk masalah Anda, itu berarti Anda mengambil angka acak dari interval ( 0 , 1 ) , lalu Anda menambahkan 0 dan 1 untuk mendapatkan daftar n + 1 angka. Anda mengurutkan daftar dan kemudian Anda merekam perbedaan antara dua elemen berturut-turut. Ini memberi Anda daftar nomor n yang akan berjumlah hingga 1 . Apalagi pengambilan sampel ini seragam. Gagasan ini dapat ditemukan di Donald B. Rubin, The Bayesian bootstrap Ann. Statist. 9, 1981, 130-134.n−1 (0,1) 0 1 n+1 n 1
Sebagai contoh ( ) Anda memiliki tiga angka acak maka Anda mendapatkan urutan yang diurutkan dan ini memberikan perbedaan , dan dengan membangun keempat angka ini berjumlah hingga 1.n=4
0.4 0.2 0.1
0 0.1 0.2 0.4 1
0.1 0.1 0.2 0.6
Pendekatan lain adalah sebagai berikut: sampel pertama dari hypercube (yaitu Anda lupa tentangd d−1 . Oleh karena itu, jika Anda mengambil sampel secara seragam dari hypercube, ini tidak akan memberi Anda sampel seragam dalam simpleks. Namun, jika Anda mengambil sampel dari hypercube dengan Distribusi Eksponensial yang sesuai, maka efek ini akan dibatalkan. Gambar ini memberi Anda gambaran bagaimana kedua metode akan sampel. Namun, saya lebih suka metode "pengurutan" karena bentuknya yang sederhana. Ini juga lebih mudah diimplementasikan.
x+y+z=1
) dan kemudian menormalkan titik sampel. Normalisasi adalah proyeksi dari silinderperangkat ke d - 1 -simpleks. Harus jelas secara intuitif bahwa titik-titik di pusat simpleks memiliki lebih banyak "titik-gambar-awal" daripada di luarsumber
Ini untuk menambah jawaban yang ada.
Devroye adalah referensi yang sangat baik untuk pertanyaan semacam ini. Bab.7 memberikan algoritma yang diperlukan untuk menghasilkan statistik urutan seragam, yang mana OP inginkan.
sumber
Di sini,
uniform(0,1)
mengembalikan bilangan real secara independen dan seragam antara 0 dan 1.sumber
Lihat makalah ini : Smith, N. dan Tromble, R., Pengambilan sampel secara seragam dari unit simplex .
sumber