我一直在尝试编写一种算法来建议 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)画一条“线”
基本上我会说,标准偏差低于特定值的比赛将是三倍,标准偏差高得多的比赛将是双重投注,其余的单一投注。
当然,这样做的问题是找出适当的具体界限——即使我确实找到了“最聪明”赌注的完美价值,我仍然不知道我是否有足够的钱来玩建议的赌注,或者是否我可以做一个更大(也很聪明)的赌注……
2)蛮力
我在写这个问题时想出了这个想法,我知道在我描述的上下文中它不会完全有意义,但我认为我可以使用稍微不同的指标让它工作。基本上,我可以让程序为我可以玩的每一个可能的金额(在我的例子中从1
到)建议下注(三倍和双倍赌注的数量4
),应用我上面描述的伪算法并计算全球排名值(一些像% of symbols * match stdev
- 我知道,这没有意义)。
排名最高的赌注(涵盖不确定性)将是建议的赌注。这种方法的问题(除了它还没有任何意义的事实之外)是我的程序要使用的游戏不限于 3 场比赛,并且这些比赛的双重和三重投注组合的数量将是显着更高。
我觉得有一个优雅的解决方案,但我无法掌握它......
非常感谢任何解决此问题的帮助,谢谢。
我的问题似乎有些混乱,我已经在这个问题和评论中解决了这个问题,但至少对某些人来说,误解似乎仍然盛行。
我需要知道我将为特定比赛(所有比赛)玩多少三倍、双倍和单倍投注。通过单独查看每场比赛,我已经知道我想玩什么符号。