อย่างแรกคือไม่มีการสุ่มอย่างแท้จริงในคอมพิวเตอร์ทุกวันนี้ที่สร้าง "หมายเลขสุ่ม" เครื่องกำเนิดไฟฟ้าเทียมหลอกทั้งหมดใช้วิธีกำหนดขึ้น (อาจเป็นเพราะคอมพิวเตอร์ควอนตัมจะเปลี่ยนสิ่งนั้น)
งานที่ยากคือการคิดค้นอัลกอริธึมที่สร้างเอาต์พุตที่ไม่สามารถแยกความแตกต่างจากข้อมูลที่มาจากแหล่งสุ่มอย่างแท้จริง
คุณอยู่ที่การตั้งค่าเริ่มต้นคุณที่จุดเริ่มต้นที่รู้จักกันเฉพาะในรายการของตัวเลขเทียม สำหรับเครื่องกำเนิดไฟฟ้าที่ใช้ใน R, Python และอื่น ๆ รายการมีความยาวมหาศาล นานพอที่ไม่แม้แต่โครงการจำลองที่ใหญ่ที่สุดที่เป็นไปได้จะเกิน 'ระยะเวลา' ของเครื่องกำเนิดเพื่อให้ค่าเริ่มต้นใหม่อีกครั้ง
ในการใช้งานทั่วไปหลาย ๆ คนผู้ที่ไม่ได้ตั้งค่าเมล็ดพันธุ์ จากนั้นเมล็ดที่ไม่สามารถคาดเดาได้จะถูกเลือกโดยอัตโนมัติ (ตัวอย่างเช่นจากไมโครวินาทีบนนาฬิการะบบปฏิบัติการ) เครื่องกำเนิดไฟฟ้าเทียมหลอกทั่วไปที่ใช้โดยทั่วไปได้รับการทดสอบโดยแบตเตอรี่ส่วนใหญ่ประกอบด้วยปัญหาที่พิสูจน์แล้วว่าเป็นเรื่องยากที่จะจำลองกับเครื่องกำเนิดไฟฟ้าที่น่าพอใจก่อนหน้านี้
โดยปกติแล้วเอาต์พุตของตัวกำเนิดประกอบด้วยค่าที่ไม่ได้สำหรับวัตถุประสงค์ในทางปฏิบัติสามารถแยกความแตกต่างจากตัวเลขที่เลือกอย่างแท้จริงในรูปแบบการแจกแจงเครื่องแบบบนจากนั้นหมายเลขหลอกเหล่านั้นจะถูกจัดการเพื่อให้ตรงกับสิ่งที่เราจะได้รับการสุ่มโดยการสุ่มจากการแจกแจงแบบอื่นเช่นทวินามปัวซอง, ปรกติ, เลขชี้กำลัง ฯลฯ(0,1).
การทดสอบหนึ่งของเครื่องกำเนิดไฟฟ้าคือการดูว่าคู่ที่ต่อเนื่องกันใน 'การสังเกตการณ์' จำลองเป็น
จริง ๆ แล้วดูเหมือนว่าพวกมันเติมหน่วยตารางโดยการสุ่ม (ทำสองครั้งด้านล่าง) ลักษณะที่เป็นหินอ่อนเล็กน้อยเป็นผลมาจากความแปรปรวนโดยธรรมชาติ คงจะเป็นเรื่องที่น่าสงสัยอย่างมากที่จะได้พล็อตที่ดูมีสีเทาเหมือนกัน [ที่ความละเอียดบางอย่างอาจมีรูปแบบคลื่นปกติ โปรดเปลี่ยนกำลังขยายขึ้นหรือลงเพื่อกำจัดเอฟเฟกต์ปลอมถ้ามันเกิดขึ้น]Unif(0,1)
set.seed(1776); m = 50000
par(mfrow=c(1,2))
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
u = runif(m); plot(u[1:(m-1)], u[2:m], pch=".")
par(mfrow=c(1,1))
บางครั้งมันมีประโยชน์ในการตั้งค่าเมล็ด การใช้งานดังกล่าวมีดังนี้:
เมื่อการเขียนโปรแกรมและการดีบักมันสะดวกที่จะมีผลลัพธ์ที่คาดการณ์ได้ โปรแกรมเมอร์จำนวนมากวางset.seed
คำสั่งเมื่อเริ่มต้นโปรแกรมจนกระทั่งการเขียนและการดีบักเสร็จสิ้น
เมื่อสอนเกี่ยวกับการจำลองสถานการณ์ ถ้าฉันต้องการแสดงให้นักเรียนเห็นว่าฉันสามารถจำลองการตายแบบยุติธรรมโดยใช้sample
ฟังก์ชั่นใน R ฉันสามารถโกงรันการจำลองจำนวนมากและเลือกอันที่ใกล้เคียงกับค่าตามทฤษฎีเป้าหมายมากที่สุด แต่นั่นจะให้ความรู้สึกที่ไม่สมจริงว่าการจำลองใช้งานได้จริงอย่างไร
ถ้าฉันตั้งค่าเมล็ดเมื่อเริ่มต้นการจำลองจะได้ผลลัพธ์เหมือนกันทุกครั้ง นักเรียนสามารถพิสูจน์อักษรสำเนาโปรแกรมของฉันเพื่อให้แน่ใจว่ามันให้ผลลัพธ์ที่ต้องการ จากนั้นพวกเขาสามารถจำลองสถานการณ์ของตัวเองไม่ว่าจะด้วยเมล็ดพันธุ์ของตนเองหรือโดยการให้โปรแกรมเลือกสถานที่เริ่มต้นของตัวเอง
ตัวอย่างเช่นความน่าจะเป็นที่จะได้รับ 10 ทั้งหมดเมื่อกลิ้งลูกเต๋าสองลูกที่เป็นธรรมคือด้วยการทดลอง 2 ล้านครั้งฉันควรได้ความแม่นยำสองหรือสามตำแหน่ง ข้อผิดพลาดของการจำลองที่ขอบ 95% นั้นมีค่าประมาณ
3/36=1/12=0.08333333.
2(1/12)(11/12)/106−−−−−−−−−−−−−−−√=0.00055.
set.seed(703); m = 10^6
s = replicate( m, sum(sample(1:6, 2, rep=T)) )
mean(s == 10)
[1] 0.083456 # aprx 1/12 = 0.0833
2*sd(s == 10)/sqrt(m)
[1] 0.0005531408 # aprx 95% marg of sim err.
เมื่อแบ่งปันการวิเคราะห์ทางสถิติที่เกี่ยวข้องกับการจำลอง
ทุกวันนี้การวิเคราะห์ทางสถิติหลายอย่างเกี่ยวข้องกับการจำลองเช่นการทดสอบการเปลี่ยนรูปหรือตัวอย่างกิ๊บส์ ด้วยการแสดงเมล็ดให้คุณเปิดใช้งานคนที่อ่านการวิเคราะห์เพื่อจำลองผลลัพธ์ถ้าพวกเขาต้องการ
เมื่อเขียนบทความทางวิชาการที่เกี่ยวข้องกับการสุ่ม บทความทางวิชาการมักต้องผ่านการตรวจสอบจากเพื่อนหลายรอบ พล็อตอาจใช้เช่นจุดที่มีการสุ่มแบบสุ่มเพื่อลดการโอเวอร์โหลด หากการวิเคราะห์จำเป็นต้องเปลี่ยนแปลงเล็กน้อยเพื่อตอบสนองต่อความคิดเห็นของผู้ตรวจทานจะเป็นการดีถ้าการกระวนกระวายใจที่ไม่เกี่ยวข้องไม่เปลี่ยนแปลงระหว่างรอบการตรวจทาน
2^19937 − 1
ในกรณีของมอนแทนาที่ช่วงเวลาที่มีความยาว เมล็ดนั้นเป็นจุดลำดับที่ยาวมากซึ่งเครื่องกำเนิดไฟฟ้าสตาร์ท ใช่แล้วมันถูกกำหนดไว้แล้ว