เครื่องกำเนิดตัวเลขสุ่มสามารถผลิตเอาท์พุตต่างกันได้หรือไม่?


10

ชื่อผลรวมมันขึ้นมา ฉันสนใจที่จะทราบว่ามีอัลกอริธึมที่สามารถสร้างตัวแปรเอาต์พุตที่ให้อินพุตเหมือนกันโดยไม่ต้องอาศัยแหล่งข้อมูลอื่นสำหรับการสุ่มเช่น DateTime ตอนนี้หรือตัวเลขที่สร้างจากเซ็นเซอร์แสงเป็นต้นนอกจากนี้อัลกอริทึมไม่สามารถเรียกใช้ ตามลำดับมีการรันที่ไม่เกี่ยวข้องเพียงสองชุดเท่านั้น


สิ่งที่คุณกำลังพูดถึงคือเครื่องมือสร้างตัวเลขสุ่มโดยเฉพาะ
Marcel

ภาษาส่วนใหญ่อนุญาตให้มีความเป็นไปได้ในการสร้างตัวสร้างตัวเลขสุ่มโดยไม่ต้องระบุเมล็ดเพื่อให้เมล็ดนั้นเป็น "สุ่ม" เช่นกัน มีเหตุผลว่าทำไมจึงใช้เมล็ด
Neil

1
@ Neil: ในกรณีเหล่านั้นยังมีเมล็ดอยู่มันเป็นเพียงนัยโดยปกติเวลาของระบบ
Michael Borgwardt

@MichaelBorgwardt ฉันแค่บอกว่าเมล็ดจะเป็นแบบสุ่มเช่นกัน แน่นอนว่าไม่มีอะไรที่สุ่มอย่างแท้จริง แต่โดยปกติแล้วเวลาของระบบจะให้เมล็ดที่เหมาะสมตราบใดที่คุณไม่ได้สร้างอินสแตนซ์ของตัวสร้างตัวเลขสุ่มโดยไม่ผ่านเมล็ดในกรณีนี้คุณอาจได้รับเมล็ด "สุ่ม" เมล็ดเดียวกันสองครั้ง
Neil

มีพื้นที่การวิจัยที่น่าสนใจเกี่ยวกับฮาร์ดแวร์ที่ไม่แน่นอนซึ่งมีความไม่ถูกต้องทางสถิติที่กำหนดไว้อย่างดี ประโยชน์ที่อาจเกิดขึ้นคือการใช้พลังงานที่ต่ำกว่า เพียงแค่คำนวณ2.0 + 2.0บนระบบดังกล่าวจะไม่ให้ผลลัพธ์ที่เหมือนกัน ไม่ต้องการแหล่งที่มาของการสุ่มอีกแหล่ง
MSalters

คำตอบ:


15

ฉันสนใจที่จะรู้ว่ามีอัลกอริธึมที่สามารถผลิตเอาต์พุตตัวแปรที่ให้อินพุตเหมือนกันโดยไม่ต้องอาศัยแหล่งข้อมูลอื่นสำหรับการสุ่มเช่น DateTime ตอนนี้หรือตัวเลขที่สร้างจากเซ็นเซอร์แสงเป็นต้น

ไม่นั่นเป็นสิ่งที่เป็นไปไม่ได้โดยพื้นฐานเพราะคำจำกัดความของอัลกอริธึมก็คือมันมีการกำหนดและกำหนดอย่างดีนั่นคือการได้รับอินพุตเดียวกันจะให้ผลลัพธ์ที่เหมือนกันเสมอ มีอัลกอริทึมแบบสุ่ม แต่พวกเขาต้องการความเป็นแบบสุ่มเป็นอินพุต

นอกจากนี้การกำหนดเป็นเป้าหมายการออกแบบที่สำคัญที่สุดของคอมพิวเตอร์ฮาร์ดแวร์ ซีพียูที่ไม่สร้างเอาต์พุตเดียวกันเนื่องจากอินพุตเดียวกันจะไร้ประโยชน์อย่างเต็มที่เพื่อวัตถุประสงค์ส่วนใหญ่


14

ไม่ได้อัลกอริธึมการสร้างตัวเลขสุ่มหลอกจะสร้างเอาต์พุตเดียวกันเสมอโดยให้เมล็ดเดียวกัน (ดังนั้นหลอก -random)

ฉันคิดว่ามันน่าสนใจที่คุณใช้คำว่า "อัลกอริทึม" มากกว่า "โปรแกรม" สิ่งนี้ไม่รวมคลาสตอบรับที่แน่นอน (ข้อผิดพลาดเบา ๆ ใน RAM, การแทรกเธรดที่แตกต่างกันใน RNG แบบมัลติเธรด ฯลฯ ) หากคุณรับตามที่กำหนดว่าการรันอัลกอริธึมของคุณทุกครั้งจะรับอินพุตเหมือนกันในการวนซ้ำแต่ละครั้งจะถูกระบุไว้อย่างดีโดยไม่มีการสุ่ม

ที่ถูกกล่าวว่าแม้สิ่งพื้นฐานเช่นอุณหภูมิของ CPU จะไม่สามารถคาดเดาได้เพียงพอที่จะทำหน้าที่เป็นแหล่งข้อมูลเอนโทรปีหากพวกเขาเป็นปกติอย่างเหมาะสม ดังนั้นอย่าคิดว่านี่หมายถึงว่าเครื่องสร้างตัวเลขสุ่มแบบ "ปลอดภัยเข้ารหัส" สามารถทำนายได้ถ้าคุณรู้ว่ามันทำงานเวลาเท่าไร หลายคนใช้ประโยชน์จากฟีดเอนโทรปีที่ระบบสร้างขึ้น


อัลกอริทึมเป็นคำที่ถูกต้อง :) ฉันพยายามกำจัดแหล่งภายนอกของเอนโทรปีความผิดปกติของหน่วยความจำคำสั่งเธรดอินพุตที่ไม่แน่นอนเช่นแหล่งกำเนิดแสง ฯลฯ ฉันคิดว่าคำถามของฉันเกิดจากการขาดความเข้าใจอัลกอริธึมแบบสุ่ม ฉันสามารถทำให้คำถามทั่วไปมากขึ้น ฉันสงสัยจริงๆว่ามันเป็นไปได้หรือไม่ที่จะสร้างฟังก์ชั่นใด ๆ ที่ให้ผลลัพธ์ที่แตกต่างจากการป้อนข้อมูลที่เหมือนกัน (รวมถึงแหล่งข้อมูลทั้งหมดของเอนโทรปี) ดูเหมือนว่าคำตอบคือไม่มี
ConditionRacer

7

คุณรู้หรือไม่ว่าผู้คนทำงานอย่างหนักเพื่อให้มั่นใจว่ามีการสุ่มหมายเลขเดียวกันทุกครั้งหรือไม่ นี่คือคุณสมบัติที่พึงประสงค์สำหรับสิ่งต่าง ๆ เช่นการจำลอง Monte Carlo เนื่องจากมันหมายความว่าผลลัพธ์นั้นสามารถทำซ้ำได้อย่างสมบูรณ์ หากคุณไม่ได้ระบุเมล็ดพันธุ์จะมีการใช้เวลาเช่นนี้ แต่ต้องการการทำซ้ำที่แน่นอน

RNGs เดียวที่ไม่พึงประสงค์อย่างแท้จริงคือที่ใช้สำหรับการเข้ารหัสและโดยทั่วไปแล้วจะได้รับสิ่งนี้โดยการใช้แหล่งสุ่มหมายเลขของระบบปฏิบัติการ (ซึ่งไม่สามารถย้อนกลับได้ภายใต้สถานการณ์ปกติและอาจใช้ฮาร์ดแวร์แฟนซี) เพื่อจัดหาเมล็ดพันธุ์


ใช่ฉันเข้าใจสิ่งที่คุณพูด ฉันไม่ได้พยายามที่จะนำสิ่งใหม่มาใช้นี่เป็นความอยากรู้อยากเห็นยามดึก
ConditionRacer

1

ฉันคิดว่าถ้าคุณใช้อัลกอริทึมบนแพลตฟอร์มฮาร์ดแวร์ที่แตกต่างกันและใช้เทคนิคเช่นการเอาบิต N กลางจากจำนวนเต็มคุณอาจได้รับคำตอบที่แตกต่างกันถ้าการเข้ารหัสจำนวนเต็มแตกต่างกัน นอกจากนี้คุณยังอาจพบปัญหาที่ทำงานบนเครื่องที่มี FPU กับที่ไม่ได้ถ้าคุณกำลังจัดการกับจำนวนจุดลอยตัว อาจไม่ใช่ปัญหาในเครื่องเดสก์ท็อปคลาส แต่อาจมีปัญหาในโทรศัพท์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.