Bu çok kollu bir haydut sorununun basit bir örneğidir . Belirttiğiniz gibi, kısa vadede sahip olduğunuz bilgiyi sömürmeye karşı yetersiz olduğunu düşündüğünüzde bilinmeyen parayı deneyerek topladığınız bilgileri dengelemek istersiniz.
1/2
Genel olarak, dinamik bir programlama probleminden kurtulamayacağınızı düşünüyorum, ancak en uygun stratejinin daha basit bir şekilde bulunabileceği ve kontrol edilebileceği özel durumlar olabilir.
Önceden üniforma ile, burada durmanız gereken yer:
(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)
61.3299
Varlıkları hesaplamak için aşağıdaki Mathematica kodunu kullandım:
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]
]
]
Karşılaştırma için, Thompson örnekleme buluşsal yöntemi (Cam Davidson Pilon'un en uygun olduğunu iddia ettiği gibi) ortalama 60.2907 kafa, daha düşük 1.03915 verir. Thompson örneklemesi, iyi bir bahis olmadığını bilmek için yeterli bilgiye sahip olduğunuzda bazen B'yi örnekleme sorununa sahiptir ve çoğu zaman bilginin en değerli olduğu durumlarda B örneğini alma şansını sıklıkla boşa harcar. Bu tür bir problemde, seçenekleriniz arasında neredeyse hiç kayıtsız kalmazsınız ve saf bir optimal strateji vardır.
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])]]