นี่เป็นกรณีง่าย ๆ ของปัญหาโจรติดอาวุธ ดังที่คุณทราบคุณต้องการสร้างความสมดุลให้กับข้อมูลที่คุณรวบรวมโดยการลองใช้เหรียญที่ไม่รู้จักเมื่อคุณคิดว่าไม่ดีในระยะสั้น ๆ จากการใช้ประโยชน์จากความรู้ที่คุณมี
ในปัญหาโจรติดอาวุธคลาสสิกคุณคงไม่แน่ใจว่าจะมีโอกาสเท่ากันสำหรับเหรียญ อย่างไรก็ตามที่นี่คุณจะได้รับทราบว่ามูลค่าของเหรียญ A ดังนั้นเมื่อคุณพลิก A คุณจะไม่ได้รับข้อมูล ในความเป็นจริงคุณอาจเพิกเฉยต่อธรรมชาติสุ่มของ A และสมมติว่าคุณได้รับแบนต่อการเลือกของ A ซึ่งหมายความว่าถ้าถูกต้องที่จะพลิกเหรียญ A คุณควรพลิก A. ดังนั้นคุณ เพียงแค่ต้องการค้นหากฎการหยุดที่ดีที่สุดเมื่อคุณควรยอมแพ้ใน B นี้ขึ้นอยู่กับการแจกแจงก่อนหน้าสำหรับพารามิเตอร์สำหรับ B และจำนวนการทดลอง ด้วยการทดลองจำนวนมากขึ้นการสำรวจมีค่ามากกว่าดังนั้นคุณจะทดสอบ B มากขึ้น1/2
โดยทั่วไปฉันคิดว่าคุณไม่สามารถหลีกเลี่ยงปัญหาการเขียนโปรแกรมแบบไดนามิกแม้ว่าอาจมีกรณีพิเศษที่สามารถพบและตรวจสอบกลยุทธ์ที่เหมาะสมที่สุดได้ง่ายขึ้น
ด้วยชุดก่อนหน้านี่คือที่ที่คุณควรหยุด:
(0 heads,3 tails),(1 head,5 tails),(2 heads,6 tails),(3,7),(4,8),...(31,35),(32,35),(33,36),(34,37),...(41,44),(42,44),...(46,48),(47,48),(48,49),(49,50)(49,50)
ภายใต้กลยุทธ์นี้คุณคาดว่าจะได้สะสมคน61.3299
ฉันใช้รหัส Mathematica ต่อไปนี้เพื่อคำนวณหลักทรัพย์:
Clear[Equity];
Equity[n_, heads_, tails_] := Equity[n, heads, tails] =
If[n == 0, heads,
Max[1/2 + Equity[n - 1, heads, tails],
(heads + 1)/(heads + tails + 2) Equity[n - 1, heads + 1, tails] +
(tails + 1)/(heads + tails + 2) Equity[n - 1, heads, tails + 1]
]
]
สำหรับการเปรียบเทียบการสุ่มตัวอย่างการสุ่มตัวอย่างของ Thompson (ซึ่ง Cam Davidson Pilon อ้างว่าเหมาะสมที่สุด) ให้ค่าเฉลี่ย 60.2907 หัวลดลง 1.03915 การสุ่มตัวอย่าง ธ อมป์สันมีปัญหาที่บางครั้งตัวอย่าง B เมื่อคุณมีข้อมูลเพียงพอที่จะรู้ว่ามันไม่ได้เป็นเดิมพันที่ดีและมันมักจะเป็นการเสียโอกาสที่จะสุ่มตัวอย่าง B เร็วขึ้นเมื่อข้อมูลมีค่ามากที่สุด ในปัญหาประเภทนี้คุณแทบไม่เคยสนใจเลยระหว่างตัวเลือกของคุณและมีกลยุทธ์ที่ดีที่สุดอย่างแท้จริง
tp[heads_, tails_] := tp[heads, tails] =
Integrate[x^heads (1 - x)^tails / Beta[heads + 1, tails + 1], {x, 0, 1/2}]
Clear[Thompson];
Thompson[flipsLeft_, heads_, tails_] := Thompson[flipsLeft, heads, tails] =
If[flipsLeft == 0, heads,
Module[{p = tp[heads, tails]},
p (1/2 + Thompson[flipsLeft-1,heads,tails]) +
(1-p)((heads+1)/(heads+tails+2)Thompson[flipsLeft-1,heads+1,tails] +
((tails+1)/(heads+tails+2)) Thompson[flipsLeft-1,heads,tails+1])]]