Bagaimana saya bisa mendapatkan benih dari Random yang sudah dibuat

Saya harus dapat mengulangi percobaan yang dibuat dengan kode saya, itu menghasilkan beberapa angka acak dan saya perlu mendapatkan nilai inisialisasi dari kalimat random() saya yang baru. Saya memiliki kalimat ini untuk membuat objek acak yang saya gunakan

Dim r As Random = New Random()

Seperti yang telah saya baca, ia mendapat nilai inisialisasi dari waktu sistem. Jika eksperimennya berhasil, saya harus bisa mengulanginya. Bagaimana saya bisa mendapatkan nomor inisialisasi untuk dapat melakukan:

 Dim r As Random = New Random(OldInitializationValue)

Saya rasa saya harus membuat nilai Inisialisasi sendiri setiap kali saya menjalankan aplikasi saya, tetapi jika ada metode untuk menyimpannya, saya akan senang mengetahuinya.

Terima kasih sebelumnya untuk jawaban Anda.


person Jose Miguel    schedule 16.03.2016    source sumber
comment
Anda tidak bisa. Itulah gunanya acak. Anda juga perlu menentukan seed secara eksplisit pada panggilan pertama, jika Anda ingin urutan yang berulang   -  person Panagiotis Kanavos    schedule 16.03.2016
comment
Rupanya nilai benih dapat ditetapkan secara eksplisit oleh konstruktor; apakah ini merupakan pilihan untuk menyimpan nilai benih di tempat lain untuk dirujuk nanti?   -  person Codor    schedule 16.03.2016
comment
PS: kursus apa pun di R menjelaskan bahwa Anda perlu menyimpan benih agar dapat diulang. Mereka juga menjelaskan bahwa Anda tidak dapat menggunakan RNG kriptografi karena tidak dapat diulang   -  person Panagiotis Kanavos    schedule 16.03.2016
comment
Jika Anda ingin menggunakan kumpulan nilai acak yang sama untuk sesuatu, Anda bisa menggunakan Mersenne Twister. Apakah ini berlaku untuk apa yang Anda lakukan masih belum jelas.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 16.03.2016


Jawaban (1)


Random tidak mengekspos benih awal, bahkan tidak menyimpannya sehingga tidak ada cara untuk mengambilnya kembali. Jadi, Anda harus menggunakan konstruktor yang mengambil seed dan menyimpannya itu sendiri.

Dim mySeed As Int32 = Environment.TickCount ' store it somewhere '

Dim myRandom = New Random(mySeed)
For i As Int32 = 1 To 10
    Console.WriteLine(myRandom.Next(1, 100))
Next

' somehwere else
myRandom = New Random(mySeed)
For i As Int32 = 1 To 10
    Console.WriteLine(myRandom.Next(1, 100))
Next

Sekarang Anda selalu dapat membuat instance acak dengan seed yang sama untuk mendapatkan urutan nilai acak semu yang sama.

person Tim Schmelter    schedule 16.03.2016
comment
Acak tidak mengekspos benih awal Secara teknis Penerapan Random Microsoft bahkan tidak menyimpan benih di mana pun. Ia segera menggunakannya dan kemudian membuangnya. - person xanatos; 16.03.2016
comment
@xanatos: menambahkannya, terima kasih. Kodenya terlihat agak aneh. Mengapa nilai seed ditimpa dengan 1 di akhir konstruktor? Untuk alasan keamanan? - person Tim Schmelter; 16.03.2016