大きくてスマートな賭けをする


16

1X2(加重)ゲームでの賭けを提案するアルゴリズムをコーディングしようとしています。

基本的に、各ゲームには試合のセットがあります(ホームvsアウェイチーム):

  • 1:ホームウィン
  • X:描く
  • 2:アウェイが勝つ

BWin 1X2ベッティングゲーム

各マッチとシンボル(1Xおよび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)

明らかに、アルゴリズムは可能な限り多くのお金を賭けの提案に割り当てようとする必要があり(そうでなければあまり意味がありません)、今ではこれがより複雑になります...

4PHP(@ 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)でプレイすることを選択した場合、2つのダブルでベットする必要があります。上記の擬似アルゴリズムを使用すると、次のベットの提案になります。

  • 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)ブルートフォース

この質問を書いているときにこのアイデアを思いつき、説明したコンテキストでは完全に意味をなさないことを知っていますが、多少異なるメトリックを使用して機能させることができると思います。基本的に、私はプログラムはお金のあらゆる可能な量のための賭け(トリプル、ダブルベット#)を提案し、私は(から遊ぶことができる作ることができる14(私は、上記の擬似アルゴリズムを適用し、グローバルランキング値を計算し、私の例では)何かをのような% of symbols * match stdev-私は知っている、それは意味をなさない)。

最高のランキング(不確実性をカバー)でのベットが推奨ベットになります。このアプローチの問題(まだ意味をなさないという事実に加えて)は、私のプログラムが動作するゲームが3試合に制限されておらず、それらの試合のダブルベットとトリプルベットの組み合わせの数がかなり高い。


エレガントな解決策があるように感じますが、それを把握することはできません...

この問題を解決するための支援は大歓迎です、ありがとう。


私の問題に関して多少の混乱があるようです。すでにこの質問とコメントでこれに取り組んでいますが、少なくとも一部には誤解がまだあるようです。

特定のゲームでプレイするトリプル、ダブル、シングルベットの数(すべての試合)を知る必要があります。各試合を個別に見ることで、どのシンボルをプレイしたいか既にわかっています。


4
math.stackexchange.comの良き人々は、あなたが説明している問題をよりよく理解できるかもしれません。それは、それを実装する良い方法を示唆するかもしれません:)

1
@Lethargy:Pascal Triangleと、後者がmath.SEに移行した素数に関する質問をここに投稿しました。SOとmath.SEの両方で約15個のアップボットを非常に迅速に受け取りましたが、質問は30分以内に終了し、もはや存在しません。この種の「単純な」質問はあまり好きではないと思います。
アリックスアクセル

2
最大数の勝ちのために最適化する場合、これは実際に簡単に思えます。勝ちの平均数は、単純に各インスタンスを合計した勝率です。つまり、最大チャンスに単一の賭けを設定すると、平均で0.4 + 1 + 0.9 = 2.3のゲームに勝ちます。したがって、1ベットを追加するのに常に同じ費用がかかる場合、解決策は単に勝率をソートし、最初のCOSTチャンスを取ることです(これにより、例で「最良の」結果が得られます)。何かに2番目と3番目を追加するときにコストが異なる場合、それはより複雑になりますが(bruteforce再帰は動作します)、私はこれで寝ると思います。

2
phpを知らない数学者として、この問題がコードではなく数学表記である場合、この問題を攻撃する方がはるかに簡単だと思います。

2
ケリー基準について聞いたことがありますか?そうでなければ、あなたのためにそこにいくつかの読書があります。

回答:


2

私は実行可能なブルートフォースソリューションを思いついたと思う、それは次のようになります:


  • 1)複数の賭けの可能な組み合わせをすべて計算します

私の質問で提供した例と金額の場合、これは次のようになります。

  • 3シングル、0ダブル、0トリプル= 1シングルベットに相当
  • シングル2、ダブル1、トリプル3 =シングルベット2に相当
  • シングル2、ダブル0、トリプル1 =シングルベット3に相当
  • シングル1、ダブル2、トリプル3 =シングルベット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)を検討しましたか?
ビクターソロキン

1

シンプレックス法に基づいたソリューションを作成してみてください。Simplexメソッドを使用する前提が満たされていないため、メソッドを少し変更する必要があります。変更したバージョンを「行を歩く」と呼びます。

方法:

各マッチの不確実性を測定できます。やれ!シングルベットまたはダブルベットで各試合の不確実性を計算します(トリプルベットの場合、不確実性はありません)。ダブルまたはトリプルベットを追加するときは、常に最も不確実性を減らすものを選択してください。

  1. トリプルベットの最大数から始めます。合計不確実性を計算します。
  2. 1つのトリプルベットを削除します。1つまたは2つのダブルベットを追加し、最大コストを抑えます。合計不確実性を計算します。
  3. ダブルベットの最大数になるまで手順2を繰り返します。

合計不確実性が最も低いベットを選択します。


0

このスポーツベットを観察した結果、この結論に至りました。

期待値賭けのEV
が3ベット1.29 5.5 and 10.3(表の最後のベット)であるとしましょう。EVが負であるため、
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


あなたは私の質問を得たとは思わない。私はすでに、個々の試合にどのシンボルで(そして複数ベットの場合はどの順番で)ベットするかを知っています。私の問題は、すべての試合(およびそれぞれのシンボルチャンス)をグローバルに見て、理想的なトリプルベットとダブルベットの数を把握することです。
アリックスアクセル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.