1X2(加重)ゲームでの賭けを提案するアルゴリズムをコーディングしようとしています。
基本的に、各ゲームには試合のセットがあります(ホームvsアウェイチーム):
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
)でプレイすることを選択した場合、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)ブルートフォース
この質問を書いているときにこのアイデアを思いつき、説明したコンテキストでは完全に意味をなさないことを知っていますが、多少異なるメトリックを使用して機能させることができると思います。基本的に、私はプログラムはお金のあらゆる可能な量のための賭け(トリプル、ダブルベット#)を提案し、私は(から遊ぶことができる作ることができる1
と4
(私は、上記の擬似アルゴリズムを適用し、グローバルランキング値を計算し、私の例では)何かをのような% of symbols * match stdev
-私は知っている、それは意味をなさない)。
最高のランキング(不確実性をカバー)でのベットが推奨ベットになります。このアプローチの問題(まだ意味をなさないという事実に加えて)は、私のプログラムが動作するゲームが3試合に制限されておらず、それらの試合のダブルベットとトリプルベットの組み合わせの数がかなり高い。
エレガントな解決策があるように感じますが、それを把握することはできません...
この問題を解決するための支援は大歓迎です、ありがとう。
私の問題に関して多少の混乱があるようです。すでにこの質問とコメントでこれに取り組んでいますが、少なくとも一部には誤解がまだあるようです。
特定のゲームでプレイするトリプル、ダブル、シングルベットの数(すべての試合)を知る必要があります。各試合を個別に見ることで、どのシンボルをプレイしたいか既にわかっています。