Saya agak bingung tentang apa yang random.seed()
dilakukan dengan Python. Misalnya, mengapa uji coba di bawah ini melakukan apa yang mereka lakukan (secara konsisten)?
>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7
Saya tidak dapat menemukan dokumentasi yang bagus tentang ini.
python
random
random-seed
Ahaan S. Rungta
sumber
sumber
random.seed
. Biasanya Anda baru saja memohonrandom.seed()
, dan ia menggunakan waktu saat ini sebagai nilai awal, yang berarti setiap kali Anda menjalankan skrip Anda akan mendapatkan urutan nilai yang berbeda.Jawaban:
Generator angka pseudo-acak bekerja dengan melakukan beberapa operasi pada suatu nilai. Secara umum nilai ini adalah angka sebelumnya yang dihasilkan oleh generator. Namun, saat pertama kali Anda menggunakan generator, tidak ada nilai sebelumnya.
Menyemai generator angka pseudo-acak memberinya nilai "sebelumnya" yang pertama. Setiap nilai benih akan sesuai dengan urutan nilai yang dihasilkan untuk generator angka acak tertentu. Artinya, jika Anda memberikan benih yang sama dua kali, Anda mendapatkan urutan angka yang sama dua kali.
Secara umum, Anda ingin menyemai generator nomor acak Anda dengan beberapa nilai yang akan mengubah setiap eksekusi program. Misalnya, waktu saat ini adalah benih yang sering digunakan. Alasan mengapa hal ini tidak terjadi secara otomatis adalah agar jika Anda mau, Anda dapat memberikan seed tertentu untuk mendapatkan urutan angka yang diketahui.
sumber
Semua jawaban lain tampaknya tidak menjelaskan penggunaan random.seed (). Berikut ini adalah contoh sederhana ( sumber ):
sumber
Kamu coba ini.
Katakanlah 'random.seed' memberikan nilai ke penghasil nilai acak ('random.randint ()') yang menghasilkan nilai-nilai ini berdasarkan benih ini. Salah satu sifat must dari angka acak adalah mereka harus dapat direproduksi. Saat Anda meletakkan seed yang sama, Anda mendapatkan pola angka acak yang sama. Dengan cara ini Anda menghasilkan mereka sejak awal. Anda memberikan seed yang berbeda-itu dimulai dengan inisial yang berbeda (di atas 3).
Diberikan seed, itu akan menghasilkan angka acak antara 1 dan 10 satu demi satu. Jadi Anda mengasumsikan satu set angka untuk satu nilai seed.
sumber
Angka acak dihasilkan oleh beberapa operasi pada nilai sebelumnya.
Jika tidak ada nilai sebelumnya maka waktu saat ini sebagai nilai sebelumnya secara otomatis. Kami dapat memberikan nilai sebelumnya ini dengan menggunakan sendiri di
random.seed(x)
manax
bisa berupa angka atau string dll.Karenanya
random.random()
sebenarnya bukan angka acak yang sempurna, bisa diprediksi viarandom.seed(x)
.Oleh karena itu, menghasilkan angka acak sebenarnya tidak acak, karena ini berjalan pada algoritma. Algoritma selalu memberikan output yang sama berdasarkan input yang sama. Ini berarti, itu tergantung pada nilai benih. Jadi, agar lebih acak, waktu secara otomatis ditetapkan
seed()
.sumber
sumber
Jalankan program di atas beberapa kali ...
Upaya pertama: mencetak 5 bilangan bulat acak dalam kisaran 1 - 100
Upaya 2: mencetak 5 angka acak yang sama muncul dalam eksekusi di atas.
Upaya ke-3: sama
..... Terus
Penjelasan: Setiap kali kita menjalankan program di atas kita mengatur seed ke 10, maka generator acak mengambil ini sebagai variabel referensi. Dan kemudian dengan melakukan beberapa formula yang telah ditentukan, itu menghasilkan angka acak.
Karenanya pengaturan seed ke 10 dalam eksekusi berikutnya lagi menetapkan nomor referensi ke 10 dan lagi perilaku yang sama dimulai ...
Segera setelah kami mereset nilai benih, hasilnya memberikan tanaman yang sama.
Catatan: Ubah nilai seed dan jalankan program, Anda akan melihat urutan acak yang berbeda dari yang sebelumnya.
sumber
Dalam hal ini, acak sebenarnya adalah pseudo-acak. Diberikan seed, itu akan menghasilkan angka dengan distribusi yang sama. Tetapi dengan seed yang sama, itu akan menghasilkan urutan nomor yang sama setiap kali. Jika Anda ingin itu berubah, Anda harus mengubah benih Anda. Banyak orang suka menghasilkan benih berdasarkan waktu saat ini atau sesuatu.
sumber
Imho, ini digunakan untuk menghasilkan hasil kursus acak yang sama ketika Anda menggunakannya
random.seed(samedigit)
lagi.sumber
Setel
seed(x)
sebelum membuat set angka acak dan gunakan seed yang sama untuk menghasilkan set angka acak yang sama. Berguna dalam hal mereproduksi masalah.sumber
Inilah pengertian saya. Setiap kali kita menetapkan nilai seed, "label" atau "referensi" dihasilkan. Panggilan fungsi random.fungsi berikutnya dilampirkan pada "label" ini, jadi lain kali Anda memanggil nilai seed yang sama dan fungsi random.fungsi, ia akan memberi Anda hasil yang sama.
sumber
Berikut ini adalah tes kecil yang menunjukkan bahwa memberi makan
seed()
metode dengan argumen yang sama akan menyebabkan hasil pseudo-acak yang sama:sumber
len(set(l))<=1
random.seed(a, version)
di python digunakan untuk menginisialisasi pseudo-random number generator (PRNG) .PRNG adalah algoritma yang menghasilkan urutan angka yang mendekati sifat-sifat angka acak. Angka acak ini dapat direproduksi menggunakan nilai seed . Jadi, jika Anda memberikan nilai seed, PRNG mulai dari status awal yang arbitrer menggunakan seed.
Argumen
a
adalah nilai benih. Jika nilainya aNone
, maka secara default, waktu sistem saat ini digunakan.dan
version
bilangan bulat yang menentukan cara mengubah parameter menjadi bilangan bulat. Nilai default adalah 2.Jika Anda ingin nomor acak yang sama direproduksi kemudian berikan benih yang sama lagi
Jika Anda tidak menyediakan seed, maka menghasilkan angka yang berbeda dan bukan 1 seperti sebelumnya
Jika Anda memberikan benih berbeda dari sebelumnya , maka itu akan memberi Anda nomor acak yang berbeda
Jadi, secara ringkas, jika Anda ingin nomor acak yang sama direproduksi, berikan benih. Secara khusus, benih yang sama .
sumber