โดยทั่วไปสิ่งที่คุณต้องการคือตัวสร้างเหตุการณ์แบบ "กึ่งสุ่ม" ที่สร้างเหตุการณ์ด้วยคุณสมบัติต่อไปนี้:
อัตราเฉลี่ยที่แต่ละเหตุการณ์เกิดขึ้นระบุไว้ล่วงหน้า
เหตุการณ์เดียวกันมีโอกาสเกิดขึ้นสองครั้งติดต่อกันน้อยกว่าที่จะสุ่ม
เหตุการณ์ไม่สามารถคาดเดาได้ทั้งหมด
วิธีหนึ่งในการทำเช่นนั้นคือการใช้ตัวสร้างเหตุการณ์แบบไม่สุ่มซึ่งเป็นไปตามเป้าหมายที่ 1 และ 2 จากนั้นเพิ่มการสุ่มเพื่อให้เป็นไปตามเป้าหมาย 3
สำหรับเครื่องกำเนิดไฟฟ้าเหตุการณ์ที่ไม่สุ่มเราสามารถใช้ง่ายditheringอัลกอริทึม โดยเฉพาะให้p 1 , p 2 , ... , p nเป็นความน่าจะเป็นของเหตุการณ์ที่ 1 ถึงnและให้s = p 1 + p 2 + ... + p nเป็นผลรวมของน้ำหนัก จากนั้นเราสามารถสร้างลำดับเหตุการณ์ที่ไม่เท่าเทียมกันสูงสุดแบบสุ่มโดยใช้อัลกอริทึมต่อไปนี้:
เริ่มแรกให้e 1 = e 2 = ... = e n = 0
หากต้องการสร้างเหตุการณ์ให้เพิ่มแต่ละe iด้วยp iและเอาท์พุทเหตุการณ์kที่e kใหญ่ที่สุด (แบ่งความสัมพันธ์ในแบบที่คุณต้องการ)
ลดe k by sและทำซ้ำจากขั้นตอนที่ 2
ตัวอย่างเช่นเมื่อได้รับสามเหตุการณ์ A, B และ C ด้วยp A = 5, p B = 4 และp C = 1 อัลกอริทึมนี้จะสร้างสิ่งที่คล้ายกับลำดับของผลลัพธ์ต่อไปนี้:
A B A B C A B A B A A B A B C A B A B A A B A B C A B A B A
ขอให้สังเกตว่าลำดับเหตุการณ์ 30 เหตุการณ์นี้ประกอบด้วย 15 As, 12 Bs และ 3 Cs อย่างไร มันไม่ได้ค่อนข้างดีที่สุดจำหน่าย - มีเกิดขึ้นเพียงไม่กี่แห่งที่สองในขณะที่แถวซึ่งจะได้รับการหลีกเลี่ยง - แต่จะได้รับใกล้
ตอนนี้ในการเพิ่มการสุ่มให้กับลำดับนี้คุณมีตัวเลือก (ไม่จำเป็นต้องไม่เกิดร่วมกัน):
คุณสามารถทำตามคำแนะนำของ Philippและรักษา "สำรับ" ของเหตุการณ์ที่จะมาถึงNสำหรับหมายเลขN ที่เหมาะสม ทุกครั้งที่คุณต้องการสร้างเหตุการณ์คุณเลือกสุ่มเหตุการณ์จากเด็คแล้วแทนที่ด้วยเอาท์พุตเหตุการณ์ถัดไปโดยอัลกอริธึมการทำ dithering ด้านบน
การใช้สิ่งนี้กับตัวอย่างด้านบนด้วยN = 3 ก่อให้เกิดเช่น:
A B A B C A B B A B A B C A A A A B B A B A C A B A B A B A
ในขณะที่N = 10 ให้ผลที่ดูสุ่มมากกว่า:
A A B A C A A B B B A A A A A A C B A B A A B A C A C B B B
สังเกตว่าเหตุการณ์ทั่วไป A และ B จบลงด้วยการวิ่งมากขึ้นเนื่องจากการสับในขณะที่เหตุการณ์ C ที่หายากยังคงอยู่ในระยะที่ค่อนข้างดี
คุณสามารถฉีดสุ่มลงในอัลกอริทึม dithering โดยตรง ตัวอย่างเช่นแทนที่จะเพิ่มe iโดยp iในขั้นตอนที่ 2 คุณสามารถเพิ่มได้โดยp i × random (0, 2) โดยที่ random ( a , b ) คือการสุ่มตัวเลขที่กระจายอย่างสม่ำเสมอระหว่างaและb ; นี้จะให้ผลผลิตเช่นต่อไปนี้:
A B B C A B A A B A A B A B A A B A A A B C A B A B A C A B
หรือคุณสามารถเพิ่มe iโดยp i + สุ่ม (- c , c ) ซึ่งจะสร้าง (สำหรับc = 0.1 × s ):
B A A B C A B A B A B A B A C A B A B A B A A B C A B A B A
หรือสำหรับc = 0.5 × s :
B A B A B A C A B A B A A C B C A A B C B A B B A B A B C A
ให้สังเกตว่ารูปแบบของสารเติมแต่งนั้นมีผลการสุ่มที่แข็งแกร่งกว่าสำหรับเหตุการณ์ที่หายาก C ได้อย่างไรสำหรับเหตุการณ์ทั่วไป A และ B เมื่อเทียบกับเหตุการณ์ที่เกิดซ้ำ นี้อาจหรืออาจไม่เป็นที่ต้องการ แน่นอนคุณยังสามารถใช้การรวมกันของรูปแบบเหล่านี้หรือปรับอื่น ๆ เพื่อเพิ่มขึ้นบางตราบเท่าที่มันจะเก็บรักษาทรัพย์สินที่ได้เฉลี่ยเพิ่มขึ้นของอีฉันเท่ากับPฉัน
หรือคุณสามารถรบกวนเอาท์พุทของอัลกอริทึมการทำ dithering โดยบางครั้งการแทนที่เหตุการณ์k ที่เลือกด้วยการสุ่ม (เลือกตามน้ำหนักดิบp i ) ตราบใดที่คุณยังใช้kเดียวกันในขั้นตอนที่ 3 ในขณะที่คุณส่งออกในขั้นตอนที่ 2 กระบวนการ dithering จะยังคงมีความผันผวนแบบสุ่ม
ตัวอย่างเช่นนี่คือตัวอย่างผลลัพธ์ที่มีโอกาส 10% ของแต่ละเหตุการณ์ที่ถูกสุ่มเลือก:
B A C A B A B A C B A A B B A B A B A B C B A B A B C A B A
และนี่คือตัวอย่างที่มีโอกาส 50% ของแต่ละเอาต์พุตเป็นแบบสุ่ม:
C B A B A C A B B B A A B A A A A A B B A C C A B B A B B C
นอกจากนี้คุณยังสามารถพิจารณาการให้อาหารผสมของเหตุการณ์ที่เกิดขึ้นอย่างหมดจดสุ่มและเกลี่ยสีให้เป็นดาดฟ้า / สระว่ายผสมตามที่อธิบายไว้ข้างต้นหรือบางทีอาจจะสุ่มอัลกอริทึม dithering โดยเลือกkสุ่มเช่นชั่งน้ำหนักโดยอีฉัน s (การรักษาน้ำหนักเชิงลบเป็นศูนย์)
ps ต่อไปนี้คือลำดับเหตุการณ์ที่สุ่มสมบูรณ์ซึ่งมีอัตราเฉลี่ยเดียวกันสำหรับการเปรียบเทียบ:
A C A A C A B B A A A A B B C B A B B A B A B A A A A A A A
B C B A B C B A A B C A B A B C B A B A A A A B B B B B B B
C A A B A A B B C B B B A B A B A A B A A B A B A C A A B A
แทนเจนต์:เนื่องจากมีการถกเถียงกันในความคิดเห็นเกี่ยวกับว่าจำเป็นหรือไม่สำหรับโซลูชันบนดาดฟ้าเพื่อให้ดาดฟ้าว่างเปล่าก่อนที่จะเติมใหม่ฉันจึงตัดสินใจเปรียบเทียบกราฟิกของกลยุทธ์การเติมดาดฟ้าหลายแบบ:
พล็อตของกลยุทธ์หลายประการในการสร้างการพลิกเหรียญแบบกึ่งสุ่ม (โดยมีอัตราส่วน 50:50 ต่อหัวต่อหางโดยเฉลี่ย) แกนนอนคือจำนวนของการโยนแกนในแนวตั้งคือระยะทางสะสมจากอัตราส่วนที่คาดไว้วัดเป็น (หัว - ก้อย) / 2 = หัว - พลิก / 2
เส้นสีแดงและสีเขียวบนเนื้อเรื่องแสดงอัลกอริธึมที่ไม่ขึ้นกับสำรับสองแบบสำหรับการเปรียบเทียบ:
- เส้นสีแดง, สิ่งที่กำหนดขึ้นอย่างชัดเจน : ผลลัพธ์ที่มีเลขคู่มักเป็นหัวเสมอ, ผลลัพธ์เลขคี่จะเป็นแบบก้อยเสมอ
- สายสีเขียวการสุ่มแบบสุ่มอิสระ : แต่ละผลลัพธ์จะถูกเลือกแบบสุ่มโดยมีโอกาส 50% ที่จะมีหัวและโอกาส 50% ที่จะก้อย
อีกสามบรรทัด (สีฟ้าสีม่วงและสีฟ้า) แสดงผลลัพธ์ของกลยุทธ์ที่ใช้สำรับสามสำรับดำเนินการโดยใช้ไพ่ 40 ใบซึ่งในตอนแรกจะเต็มไปด้วยไพ่ "หัว" 20 ใบและไพ่ "หาง" 20 ใบ:
- เส้นสีน้ำเงินเติมเมื่อไม่มีสิ่งใด : การ์ดจะถูกสุ่มโดยการสุ่มจนกว่าเด็คจะว่างเปล่าจากนั้นเด็คจะถูกเติมด้วยการ์ด "หัว" 20 ใบและการ์ด "ก้อย" 20 ใบ
- เส้นสีม่วงเติมเมื่อครึ่งว่างเปล่า : ไพ่ถูกสุ่มโดยการสุ่มจนกว่าเด็คจะเหลือ 20 ใบ; จากนั้นดาดฟ้าจะมีไพ่ 10 "หัว" และไพ่ 10 "หาง"
- เส้นสีฟ้าเติมอย่างต่อเนื่อง : ไพ่ถูกสุ่ม การจับคู่เลขจะถูกแทนที่ทันทีด้วยการ์ด "หัว" และการจับหมายเลขที่แปลกด้วยบัตร "ก้อย"
แน่นอนพล็อตข้างต้นเป็นเพียงการสำนึกเดียวของกระบวนการสุ่ม แต่มันเป็นตัวแทนที่สมเหตุสมผล โดยเฉพาะอย่างยิ่งคุณจะเห็นว่ากระบวนการที่ขึ้นกับเด็คทั้งหมดมีอคติที่ จำกัด และอยู่ใกล้กับเส้นสีแดง (กำหนดขึ้น) ในขณะที่เส้นสีเขียวแบบสุ่มล้วนๆ
(ในความเป็นจริงการเบี่ยงเบนของเส้นสีน้ำเงินสีม่วงและสีฟ้าห่างจากศูนย์จะถูก จำกัด ด้วยขนาดของเด็คอย่างเคร่งครัด: เส้นสีน้ำเงินไม่สามารถลอยห่างจากศูนย์ได้เกินกว่า 10 ขั้นตอนสายสีม่วงจะได้ 15 ก้าวจากศูนย์ และเส้นสีฟ้าสามารถลอยห่างออกไปไม่เกิน 20 ขั้นตอนแน่นอนในทางปฏิบัติเส้นใด ๆ ที่ถึงขีด จำกัด จริง ๆ แล้วไม่น่าเป็นไปได้อย่างยิ่งเนื่องจากมีแนวโน้มที่แข็งแกร่งสำหรับพวกเขาที่จะกลับเข้าใกล้ศูนย์หากพวกเขาเดินไกลเกินไป ปิด.)
ไม่มีความแตกต่างที่เห็นได้ชัดระหว่างกลยุทธ์บนดาดฟ้าที่แตกต่างกัน (แม้ว่าโดยเฉลี่ยแล้วเส้นสีน้ำเงินจะอยู่ใกล้กับเส้นสีแดงค่อนข้างมากและเส้นสีฟ้ายังคงอยู่ไกลออกไป) แต่การตรวจสอบเส้นสีน้ำเงินอย่างใกล้ชิดยิ่งขึ้น ไม่เปิดเผยรูปแบบการกำหนดที่แตกต่าง: ทุก ๆ 40 การวาด (ทำเครื่องหมายด้วยเส้นแนวตั้งสีเทาประ) เส้นสีน้ำเงินตรงตามเส้นสีแดงที่ศูนย์ทุกประการ เส้นสีม่วงและสีฟ้าไม่ได้ถูก จำกัด อย่างเข้มงวดและสามารถอยู่ห่างจากศูนย์ได้ทุกเวลา
สำหรับกลยุทธ์ที่ขึ้นกับเด็คคุณลักษณะสำคัญที่ทำให้ความผันแปรของพวกเขาถูก จำกัด คือความจริงที่ว่าในขณะที่ไพ่ถูกดึงออกจากเด็คแบบสุ่มเด็คจะถูกเติมใหม่อย่างแน่นอน หากไพ่ที่ใช้ในการเติมดาดฟ้าได้รับการสุ่มเลือกกลยุทธ์จากเด็คทั้งหมดจะแยกไม่ออกจากการเลือกแบบสุ่มบริสุทธิ์ (สายสีเขียว)