การทดสอบอัลกอริธึมการสร้างตัวแปรแบบสุ่ม


คำตอบ:


9

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

แก้ไข

ฉันต้องอัปเดตสิ่งนี้เนื่องจากฉันไม่ถูกต้อง: Diehard อาจยังคงใช้งานได้จำนวนมาก แต่ก็ไม่ได้รับการดูแลรักษาอีกต่อไปและไม่ทันสมัยอีกต่อไป NIST มาพร้อมกับชุดการทดสอบที่ปรับปรุงใหม่ตั้งแต่นั้นมา


9

เพื่อเพิ่มคำตอบเล็กน้อยของชุดทดสอบ Diehard (พัฒนาโดย George Marsaglia) เป็นการทดสอบมาตรฐานสำหรับ PRNG

มีห้องสมุด Diehard Cที่ดีที่ให้คุณเข้าถึงการทดสอบเหล่านี้ได้ เช่นเดียวกับการทดสอบ Diehard มาตรฐานมันยังมีฟังก์ชั่นสำหรับการทดสอบ PRNG อื่น ๆ ที่เกี่ยวข้องกับการตรวจสอบลำดับบิต นอกจากนี้ยังมีสิ่งอำนวยความสะดวกสำหรับการทดสอบความเร็วของ RNG และการเขียนการทดสอบของคุณเอง

มีอินเตอร์เฟส R ไปยังไลบรารีDieharderเรียกว่าRDieHarder :

library(RDieHarder)
dhtest = dieharder(rng="randu", test=10, psamples=100, seed=12345)
print(dhtest)

Diehard Count the 1s Test (byte)

       data:  Created by RNG `randu' with seed=12345, 
              sample of size 100 p-value < 2.2e-16

นี่แสดงให้เห็นว่าเครื่องกำเนิดRANDU RNG ล้มเหลวในการทดสอบระยะทางขั้นต่ำ / 2dsphere


8

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

ผู้สมัครที่ดีที่สุดสำหรับความหมายของลำดับสุ่มน่าจะเป็นแบบแผนมาร์ตินLöf แนวคิดหลักสำหรับการสุ่มแบบนี้ได้รับการพัฒนาอย่างสวยงามในKnuth, ส่วนที่ 3.5เพื่อทดสอบความสม่ำเสมอของลำดับย่อยทุกประเภทของลำดับตัวเลขสุ่ม การได้นิยามนิยามของทุกประเภทกลายเป็นเรื่องยากจริงๆแม้ว่าจะใช้ความคิดในการคำนวณ

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


4

คุณไม่สามารถพิสูจน์ได้เพราะเป็นไปไม่ได้ คุณสามารถตรวจสอบได้ว่าไม่มีความสัมพันธ์ที่น่าอับอายหรือการรบกวนการแจกจ่ายหรือไม่และแน่นอนว่าDiehardเป็นมาตรฐานสำหรับมัน นี่คือสถิติ / ฟิสิกส์ผู้เข้ารหัสลับจะตรวจสอบส่วนใหญ่ (เหนือสิ่งอื่นใด) ว่ามันยากขนาดไหนที่จะทำให้เครื่องกำเนิดไฟฟ้าเข้ากับข้อมูลเพื่อรับค่าในอนาคต


4

การแก้ไขเล็กน้อยเพื่อโพสต์ของ Colin: แพคเกจ CRAN RDieHarderเป็นอินเทอร์เฟซสำหรับ DieHarder , Diehard rewrite / extension / overhaul ทำโดยRobert G. Brown (ที่กรุณาแสดงให้ฉันเป็น coauthor ที่อยู่บน wraps RDieHarder ของฉัน) โดย David Bauer

เหนือสิ่งอื่นใด DieHarder รวมแบตเตอรี่ NIST ของการทดสอบที่กล่าวถึงในการโพสต์ของ Mark รวมถึงการทดสอบใหม่ นี่คือการวิจัยอย่างต่อเนื่องและได้รับในขณะที่ ฉันได้พูดคุยที่ useR! 2007 เกี่ยวกับ RDieHarder ที่คุณจะได้รับจากที่นี่


3

มันไม่ค่อยมีประโยชน์ที่จะสรุปว่ามีบางสิ่งที่ "สุ่ม" ในนามธรรม บ่อยครั้งที่คุณต้องการทดสอบว่ามีโครงสร้างแบบสุ่มหรือไม่ ตัวอย่างเช่นคุณอาจต้องการทดสอบว่ามีบางอย่างที่มีการแจกแจงแบบเดียวกันโดยมีค่าทั้งหมดในช่วงที่แน่นอนเท่ากันหรือไม่ หรือคุณอาจต้องการทดสอบว่ามีบางอย่างที่มีการแจกแจงแบบปกติหรือไม่หากต้องการทดสอบว่าข้อมูลมีการกระจายเฉพาะคุณสามารถใช้การทดสอบแบบพอดีเช่นการทดสอบไคสแควร์หรือการทดสอบ Kolmogorov-Smirnov


3

มีสองส่วนในการทดสอบเครื่องกำเนิดตัวเลขสุ่ม หากคุณกังวลเกี่ยวกับการทดสอบเครื่องกำเนิดไฟฟ้าแบบสม่ำเสมอเท่านั้นใช่แล้วชุดทดสอบ DIEHARD เป็นความคิดที่ดี

แต่บ่อยครั้งที่คุณต้องทดสอบการเปลี่ยนแปลงของชุดเครื่องกำเนิดไฟฟ้า ตัวอย่างเช่นคุณอาจใช้เครื่องกำเนิดไฟฟ้าที่เหมือนกันในการสร้างค่าที่ชี้แจงหรือกระจายตามปกติ คุณอาจมีตัวกำเนิดชุดคุณภาพสูง - สมมติว่าคุณมีการใช้อัลกอริทึมที่รู้จักกันดีเช่น Mersenne Twister ที่เชื่อถือได้ แต่คุณต้องทดสอบว่าเอาต์พุตที่แปลงแล้วมีการกระจายที่ถูกต้องหรือไม่ ในกรณีนี้คุณต้องทำการทดสอบความพอดีเช่น Kolmogorov-Smirnov แต่สำหรับผู้เริ่มคุณสามารถตรวจสอบว่าค่าเฉลี่ยและความแปรปรวนตัวอย่างมีค่าที่คุณคาดหวัง

คนส่วนใหญ่ไม่ได้ - และไม่ควร - เขียนเครื่องกำเนิดตัวเลขสุ่มของตัวเองตั้งแต่เริ่มต้น มันยากที่จะเขียนตัวกำเนิดที่ดีและง่ายต่อการหลอกตัวเองให้คิดว่าคุณได้เขียนตัวที่ดีเมื่อคุณไม่ได้ ตัวอย่างเช่น Donald Knuth บอกเล่าเรื่องราวในTAOCP เล่มที่ 2ของตัวสร้างตัวเลขสุ่มที่เขาเขียนซึ่งกลายเป็นแย่มาก แต่มันเป็นเรื่องธรรมดาสำหรับคนที่จะต้องเขียนโค้ดของตัวเองเพื่อสร้างค่าสุ่มจากการแจกแจงใหม่


2

NIST เผยแพร่รายการของการทดสอบทางสถิติกับการดำเนินการอ้างอิงใน C.

นอกจากนี้ยังมีTestU01โดยสมาร์ทโฟนบางคนซึ่งรวมถึงนักวิจัย PRNG ที่มีชื่อเสียง Pierre L'Ecuyer มีการนำการอ้างอิงไปใช้ใน C อีกครั้ง

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

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