Saya telah menghabiskan lebih dari satu hari mencoba untuk mencapai apa yang tampaknya menjadi hal yang sangat sederhana. Saya harus membuat 300 urutan 'acak' di mana angka 1,2,3 dan 4 semuanya muncul tepat 12 kali, tetapi angka yang sama tidak pernah digunakan dua kali 'berturut-turut' / berturut-turut.
Upaya terbaik saya (saya kira) adalah:
memiliki sampel R 48 item tanpa penggantian, uji apakah ada nilai berturut-turut dengan rle, kemudian gunakan hanya urutan yang tidak mengandung nilai berturut-turut. Masalah: hampir tidak ada urutan acak yang memenuhi kriteria ini, sehingga dibutuhkan selamanya.
minta R membuat urutan tanpa nilai berturut-turut (lihat kode).
pop<-rep(1:4,12)
y=c()
while(length(y)!=48)
{
y= c(y,sample(pop,48-length(y),replace=F))
y=y[!c(FALSE, diff(y) == 0)]
}
Masalah: ini menciptakan urutan dengan angka yang berbeda dari setiap nilai. Saya kemudian mencoba menggunakan hanya sekuens tersebut dengan tepat 12 dari setiap nilai, tetapi itu hanya membawa saya kembali ke masalah 1: membutuhkan selamanya.
Pasti ada cara mudah untuk melakukan ini, kan? Setiap bantuan sangat dihargai!
Pilihan lain adalah dengan menggunakan metode Markov Chain Monte-Carlo untuk bertukar 2 angka secara acak dan pindah ke sampel baru hanya ketika 1) kita tidak bertukar nomor yang sama dan 2) tidak ada 2 angka yang identik berdekatan. Untuk mengatasi sampel yang berkorelasi, kami dapat menghasilkan banyak sampel dan kemudian secara acak memilih 300 di antaranya:
sumber
Anda dapat mengambil nilai berturut-turut dan menempatkannya di tempat yang tidak berurutan.
sumber