ฉันจะรับเมล็ดพันธุ์จากการสุ่มที่สร้างไว้แล้วได้อย่างไร

ฉันต้องสามารถทำซ้ำการทดลองที่สร้างด้วยโค้ดของฉันได้ โดยสร้างตัวเลขสุ่มขึ้นมาสองสามตัว และฉันต้องได้ค่าเริ่มต้นของประโยค Random() ใหม่ของฉัน ฉันมีประโยคนี้เพื่อสร้างวัตถุสุ่มที่ฉันใช้

Dim r As Random = New Random()

ตามที่ฉันได้อ่านแล้วมันได้รับค่าเริ่มต้นจากวันที่และเวลาของระบบ หากการทดลองสำเร็จ ฉันจะต้องทำซ้ำได้ ฉันจะรับหมายเลขเริ่มต้นได้อย่างไร:

 Dim r As Random = New Random(OldInitializationValue)

ฉันคิดว่าฉันจะต้องสร้างค่าเริ่มต้นให้กับตัวเองทุกครั้งที่ใช้งานแอป แต่หากมีวิธีในการบันทึก ฉันยินดีที่จะทราบ

ขอขอบคุณล่วงหน้าสำหรับคำตอบของคุณ


person Jose Miguel    schedule 16.03.2016    source แหล่งที่มา
comment
คุณไม่สามารถ. นั่นคือจุดสุ่ม คุณต้องระบุ seed ในการเรียกครั้งแรกอย่างชัดเจนเช่นกัน หากคุณต้องการลำดับที่ทำซ้ำได้   -  person Panagiotis Kanavos    schedule 16.03.2016
comment
เห็นได้ชัดว่าค่าของเมล็ดสามารถกำหนดได้อย่างชัดเจนโดยตัวสร้าง มันจะเป็นตัวเลือกในการจัดเก็บค่าเมล็ดพันธุ์ที่อื่นเพื่ออ้างอิงในภายหลังหรือไม่?   -  person Codor    schedule 16.03.2016
comment
PS: หลักสูตรใดก็ได้ใน R อธิบายว่าคุณต้องเก็บเมล็ดพันธุ์เพื่อให้สามารถทำซ้ำได้ พวกเขายังอธิบายด้วยว่าคุณไม่สามารถใช้การเข้ารหัส RNG ได้เนื่องจากไม่สามารถทำซ้ำได้   -  person Panagiotis Kanavos    schedule 16.03.2016
comment
หากคุณต้องการใช้ค่าสุ่มชุดเดียวกันสำหรับบางสิ่ง คุณสามารถใช้ Mersenne Twister ไม่ว่าจะใช้ได้กับสิ่งที่คุณกำลังทำอยู่หรือไม่ชัดเจน   -  person Ňɏssa Pøngjǣrdenlarp    schedule 16.03.2016


คำตอบ (1)


Random ไม่เปิดเผยเมล็ดเริ่มต้น มันไม่ได้จัดเก็บด้วยซ้ำ ดังนั้นจึงไม่มีทางที่จะเรียกคืนได้ ดังนั้นคุณต้องใช้ ตัวสร้างที่รับเมล็ดและจัดเก็บ มันเอง

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

ตอนนี้คุณสามารถสร้างอินสแตนซ์แบบสุ่มด้วยเมล็ดเดียวกันเพื่อรับลำดับของค่าสุ่มหลอกที่เหมือนกัน

person Tim Schmelter    schedule 16.03.2016
comment
การสุ่มไม่เปิดเผยข้อมูลเริ่มต้น ในทางเทคนิคแล้ว การใช้งาน Random ของ Microsoft ไม่ได้บันทึกข้อมูลเริ่มต้นไว้เลยด้วยซ้ำ มันใช้ทันทีแล้วทิ้งไป - person xanatos; 16.03.2016
comment
@xanatos: เพิ่มแล้ว ขอบคุณ รหัสดูแปลกๆนิดหน่อย เหตุใดค่า seed จึงถูกเขียนทับด้วย 1 ที่ส่วนท้ายของ Constructor ด้วยเหตุผลด้านความปลอดภัย? - person Tim Schmelter; 16.03.2016