Optimization

下大賭注

  • September 26, 2011

我一直在嘗試編寫一種算法來建議 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)畫一條“線”

基本上我會說,標準偏差低於特定值的比賽將是三倍,標準偏差高得多的比賽將是雙重投注,其餘的單一投注。

當然,這樣做的問題是找出適當的具體界限——即使我確實找到了“最聰明”賭注的完美價值,我仍然不知道我是否有足夠的錢來玩建議的賭注,或者是否我可以做一個更大(也很聰明)的賭注……


2)蠻力

我在寫這個問題時想出了這個想法,我知道在我描述的上下文中它不會完全有意義,但我認為我可以使用稍微不同的指標讓它工作。基本上,我可以讓程序為我可以玩的每一個可能的金額(在我的例子中從1到)建議下注(三倍和雙倍賭注的數量4),應用我上面描述的偽算法併計算全球排名值(一些像% of symbols * match stdev- 我知道,這沒有意義)。

排名最高的賭注(涵蓋不確定性)將是建議的賭注。這種方法的問題(除了它還沒有任何意義的事實之外)是我的程序要使用的遊戲不限於 3 場比賽,並且這些比賽的雙重和三重投注組合的數量將是顯著更高。


我覺得有一個優雅的解決方案,但我無法掌握它……

非常感謝任何解決此問題的幫助,謝謝。


我的問題似乎有些混亂,我已經在這個問題和評論中解決了這個問題,但至少對某些人來說,誤解似乎仍然盛行。

我需要知道我將為特定比賽(所有比賽)玩多少三倍、雙倍和單倍投注。通過單獨查看每場比賽,我已經知道我想玩什麼符號。

我想我想出了一個可行的蠻力解決方案,它是這樣的:


  • **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 不同。

引用自:https://stats.stackexchange.com/questions/16174

comments powered by Disqus

相關問答