我一直在尝试编码一种算法,以建议在1X2(加权)游戏中下注。
基本上,每个游戏都有一组比赛(主队与客队):
1
:主场胜利X
: 画2
:客胜
对于每个匹配项和符号(1
,X
和2
),我将分配一个百分比,该百分比表示该符号正确匹配结果的机会/可能性。这是代表结构的数组:
$game = array
(
'match #1' => array // stdev = 0.0471
(
'1' => 0.3, // 30% home wins
'X' => 0.4, // 40% draw
'2' => 0.3, // 30% away wins
),
'match #2' => array // stdev = 0.4714
(
'1' => 0.0, // 0% home wins
'X' => 0.0, // 0% draw
'2' => 1.0, // 100% away wins
),
'match #3' => array // stdev = 0.4027
(
'1' => 0.1, // 10% home wins
'X' => 0.0, // 0% draw
'2' => 0.9, // 90% away wins
),
);
我还计算了每个投注的标准差(在以上代码段中进行了注释);较高的标准偏差表示较高的确定性,而具有最低标准偏差的比赛表示较高的不确定性,并且,如果可能的话,最好用双倍或三倍下注进行覆盖。
以下伪算法应描述总体工作流程:
for each match, sorted by std. dev // "uncertain" matches first
if still can make triple bets
mark top 3 symbols of match // mark 3 (all) symbols
else if still can make double bets
mark top 2 symbols of match // mark 2 (highest) symbols
else if can only make single bets // always does
mark top symbol of match // mark 1 (highest) symbol
到目前为止,一切都很好,但是我需要告诉算法我要花多少钱。假设单笔赌注1
以任何货币表示,计算多笔赌注的成本的公式为:
2^double_bets * 3^triple_bets * cost_per_bet (= 1)
显然,该算法应尝试在投注建议中分配尽可能多的可用资金(否则就没有多大意义了),现在这变得更加棘手了……
可以说我想最多支付4
,列出PHP(@ IDEOne)中所有可能的倍数:
$cost = 1; // cost per single bet
$result = array();
$max_cost = 4; // maximum amount to bet
foreach (range(0, 3) as $double)
{
foreach (range(0, 3) as $triple)
{
if (($double + $triple) <= 3) // game only has 3 matches
{
$bets = pow(2, $double) * pow(3, $triple); // # of bets
$result[$bets] = array
(
'cost' => $bets * $cost, // total cost of this bet
'double' => $double,
'triple' => $triple,
);
if ($result[$bets]['cost'] > $max_cost)
{
unset($result[$bets]);
}
}
}
}
ksort($result);
产生以下输出:
Array
(
[1] => Array
(
[cost] => 1
[double] => 0
[triple] => 0
)
[2] => Array
(
[cost] => 2
[double] => 1
[triple] => 0
)
[3] => Array
(
[cost] => 3
[double] => 0
[triple] => 1
)
[4] => Array
(
[cost] => 4
[double] => 2
[triple] => 0
)
)
问题
如果我选择发挥最大的可用金额(4
),则必须下两注,如果使用上面描述的伪算法,我将得到以下赌注建议:
match #1
=>X1
match #2
=>2
match #3
=>12
与三重赌注相比,这似乎不太理想,因为三重赌注会花费3
更多的不确定性:
match #1
=>X12
match #2
=>2
match #3
=>2
如果您认为match #3
赔率可能是:
$game['match #3'] = array // stdev = 0.4714
(
'1' => 0.0, // 0% home wins
'X' => 0.0, // 0% draw
'2' => 1.0, // 100% away wins
);
在这种情况下,我将无缘无故浪费一倍。
基本上,我只能选择最大的(可能是愚蠢的)下注,而不能选择最聪明,最大的下注。
我已经将头撞墙好几天了,希望能得到某种顿悟,但到目前为止,我只能提出两种半[坏]的解决方案:
1)画一条“线”
基本上,我会说stdev值低于特定值的比赛将是三倍,stdev值较大的比赛将是两次下注,而其余为一次下注。
当然,这样做的问题是找出适当的特定界限-即使我确实找到了“最聪明”赌注的理想价值,我仍然不知道我是否有足够的钱去进行建议的赌注,或者是否我可以打更大(也很聪明)的赌注...
2)暴力破解
我在写这个问题时想到了这个主意,但我知道在我所描述的情况下它并不是很合理,但我认为我可以使用一些不同的指标来使其工作。基本上,我可以使程序提出的金钱每一个可能的金额,我可以(从玩的赌注(三人间和双赌注#)1
来4
在我的例子),采用伪算法我上面描述和计算全球排名值(某事就像% of symbols * match stdev
-我知道,这没有意义。
具有最高排名(不确定性)的赌注将是建议的赌注。这种方法的问题(除了它还没有任何意义之外)是,我的程序要使用的游戏不限于3场比赛,这些比赛的双倍和三倍投注组合的数量为大大提高。
我觉得有一个优雅的解决方案,但是我无法理解...
非常感谢您对解决此问题的任何帮助。
我的问题似乎有些困惑,我已经在这个问题和评论中解决了这个问题,但至少在某些情况下,误解似乎仍然盛行。
我需要知道在一场特定比赛(所有比赛)中我将打几局,三局和单局。我已经通过逐个查看每个比赛来知道我想玩什么符号。