下大注,更聪明


16

我一直在尝试编码一种算法,以建议在1X2(加权)游戏中下注。

基本上,每个游戏都有一组比赛(主队与客队):

  • 1:主场胜利
  • X: 画
  • 2:客胜

BWin 1X2博彩游戏

对于每个匹配项和符号(1X2),我将分配一个百分比,该百分比表示该符号正确匹配结果的机会/可能性。这是代表结构的数组:

$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)暴力破解

我在写这个问题时想到了这个主意,但我知道在我所描述的情况下它并不是很合理,但我认为我可以使用一些不同的指标来使其工作。基本上,我可以使程序提出的金钱每一个可能的金额,我可以(从玩的赌注(三人间和双赌注#)14在我的例子),采用伪算法我上面描述和计算全球排名值(某事就像% of symbols * match stdev-我知道,这没有意义。

具有最高排名(不确定性)的赌注将是建议的赌注。这种方法的问题(除了它还没有任何意义之外)是,我的程序要使用的游戏不限于3场比赛,这些比赛的双倍和三倍投注组合的数量为大大提高。


我觉得有一个优雅的解决方案,但是我无法理解...

非常感谢您对解决此问题的任何帮助。


我的问题似乎有些困惑,我已经在这个问题和评论中解决了这个问题,但至少在某些情况下,误解似乎仍然盛行。

我需要知道在一场特定比赛(所有比赛)中我将打几局,三局和单局。我已经通过逐个查看每个比赛来知道我想玩什么符号。


4
math.stackexchange.com上的好伙伴可能能够更好地理解您所描述的问题,这可能反过来又为您提供了实现此问题的好方法:)

1
@Lethargy:我曾经在这里发布过有关Pascal三角形和素数的问题,后者后来被移植到math.SE。我很快获得了大约15次投票(包括SO和math.SE),但问题在不到30分钟的时间内被关闭,甚至不复存在。我认为他们不太喜欢这类“简单”的问题。
Alix Axel

2
如果我们针对“最大获胜次数”进行优化,这似乎真的很容易。平均获胜次数只是将每个单个实例加在一起的获胜机会。也就是说,如果我们对最大机率下注,那么我们平均将赢得0.4 + 1 + 0.9 = 2.3场比赛。因此,如果增加1个赌注总是同样昂贵,那么解决方案就是简单地将获胜机会排序并获得第一个COST机会(此示例给出了“最佳”结果)。如果在某事物上增加第二个与第三个之间的成本不同,它会变得更加复杂(不过,bruteforce递归有效),我想我会结束这一点。

2
作为一个不懂PHP的数学家,如果发现这个问题是数学符号而不是代码,我会发现它容易得多。

2
您听说过凯利准则吗?如果没有的话,那么这里有一些适合您的阅读材料。

Answers:


2

我想我想出了一个可行的蛮力解决方案,它像这样:


  • 1)计算我可以进行的多种下注的每种可能组合

对于我在问题中提供的示例和金额,将为:

  • 3单,0双,0三重=等于1单注
  • 2单,1双,0三联=等于2单注
  • 2单,0双,1三联=等于3单注
  • 1个单注,2个双注,0个三重=等于4个单注

  • 2)计算每次比赛的符号赔率的标准偏差

             |    1    |    X    |    2    |  stdev  |
             |---------|---------|---------|---------|
    Match #1 |   0.3   |   0.4   |   0.3   |  0.047  |
             |---------|---------|---------|---------|
    Match #2 |   0.1   |   0.0   |   0.9   |  0.402  |
             |---------|---------|---------|---------|
    Match #3 |   0.0   |   0.0   |   1.0   |  0.471  |
    

  • 3)对于每个多重下注组合(步骤1),使用公式计算排名:

    排名=(#n(x)[+ #n(y)[+ #n(z)]])/ stdev(#n)

其中,#n是特定匹配项,#n(x|y|z)是符号的有序赔率。

  • 匹配从低到高标准偏差进行处理。
  • 每次比赛中的单个符号从高赔率到低赔率进行处理。

测试1下注,2下注,0下三注:

  • (#1(X) + #1(1)) / stdev(#1) = (0.4 + 0.3) / 0.047 = 14.89
  • (#2(2) + #2(1)) / stdev(#2) = (0.9 + 0.1) / 0.402 = 2.48
  • #3(2) / stdev(#3) = 1.0 / 0.471 = 2.12

此投注使我的全球排名为14.89 + 2.48 + 2.12 = 19.49


测试2下注,0下注,1下三注:

  • (#1(X) + #1(1) + #1(2)) / stdev(#1) = (0.4 + 0.3 + 0.3) / 0.047 = 21.28
  • #2(2) / stdev(#2) = 0.9 / 0.402 = 2.24
  • #3(2) / stdev(#3) = 1.0 / 0.471 = 2.12

这使我的全球排名为21.28 + 2.24 + 2.12 = 25.64:-)


其余所有赌注显然都将低于劣质赌注,因此没有必要进行测试。

这种方法似乎可行,但我通过反复试验得出了结论,并遵循自己的直觉,我缺乏数学上的判断力来判断它是否正确或是否有更好的方法...

有指针吗?

PS:很抱歉格式不正确,但是MD解析器似乎与StackOverflow不同。


您是否考虑过使用线性编程(en.wikipedia.org/wiki/Linear_programming)解决此问题?
Victor Sorokin

1

如何基于单纯形法制定解决方案。由于无法满足使用Simplex方法的前提,因此我们需要对方法进行一些修改。我称修改后的版本为“走线”。

方法:

您可以测量每次比赛的不确定性。做吧!用单注或双注计算每次比赛的不确定性(三注无不确定性)。当添加双倍或三倍投注时,请始终选择最能减少不确定性的投注。

  1. 从三重投注的最大数目开始。计算总不确定度。
  2. 取消三注。加一个或两个双倍赌注,保持最大赌注。计算总不确定度。
  3. 重复步骤2,直到获得最大的双倍下注次数。

选择总不确定性最低的赌注。


0

我从观察这个体育博彩中得出的结论是我的结论。

期望值
假设您有3个下注1.29 5.5 and 10.3EV(表中的最后一个赌注),
EV = 1/(1/1.29+1/5.5+1/10.3) - 1 = -0.05132282687714185 如果投注的结果是一个获胜的概率被分配为
1/1.29 : 1/5.5 : 1/10.3,则由于EV为负,因此从长远来看您正在输钱。
只有找出每个结果的概率并找出不合规定之处,您才能获利。

可以说真正的概率是
0.7 : 0.2 : 0.1

这意味着费率应为 1.43 \ 5.0 \ 10.0

您可以确定,在这种情况下,最好的回报是下注平局,因为它可以让您
EV(0) = 5.5/5 - 1 = 0.1
将损失押在何处,
EV(2) = 10.2/10 - 1 = 0.02
而主场获胜的下注甚至是EV-
EV(1) = 1.29/1.43 - 1 = -0.10


我不认为你有我的问题。我已经知道在每场比赛中以什么符号(以及在多注的情况下以什么顺序)下注。我的问题是,通过全局查看所有比赛(以及它们各自的符号机会)来确定我应该进行的三重和双倍下注的理想数目
Alix Axel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.