Próbowałem kodować algorytm sugerujący zakłady w grach 1x2 (ważonych).
Zasadniczo każda gra ma zestaw meczów (drużyny gospodarzy vs gości):
1
: wygrywa domX
: remis2
: wyjazd wygrywa
Dla każdego dopasowania i symbolu ( 1
, X
i 2
) przypiszę procent reprezentujący szanse / prawdopodobieństwo, że ten symbol będzie prawidłowym wynikiem dopasowania. Oto tablica reprezentująca strukturę:
$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
),
);
Obliczam również odchylenie standardowe dla każdego zakładu (skomentowane w powyższym fragmencie); wyższe odchylenia standardowe oznaczają większą pewność, a mecze z najniższymi odchyleniami standardowymi przekładają się na wyższy poziom niepewności, a najlepiej, jeśli to możliwe, powinny być obstawione podwójnym lub potrójnym zakładem.
Poniższy pseudo-algorytm powinien opisywać ogólny przepływ pracy:
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
Jak dotąd tak dobrze, ale muszę powiedzieć algorytmowi, ile chcę wydać. Powiedzmy, że pojedynczy zakład kosztuje 1
w dowolnej walucie, wzór na obliczenie kosztu wielokrotnego zakładu:
2^double_bets * 3^triple_bets * cost_per_bet (= 1)
Oczywiście algorytm powinien spróbować przeznaczyć jak najwięcej pieniędzy dostępnych na sugestię zakładu (inaczej nie miałoby to większego sensu), a teraz jest to trudniejsze ...
Powiedzmy, że chcę zapłacić maksymalnie 4
, wymieniając wszystkie możliwe wielokrotności w 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);
Daje następujące dane wyjściowe:
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
)
)
Problem
Jeśli zdecyduję się zagrać maksymalną dostępną kwotą pieniędzy ( 4
), będę musiał postawić zakład z dwoma podwójnymi liczbami, jeśli użyję opisanego powyżej pseudo-algorytmu, otrzymam następującą propozycję zakładu:
match #1
=>X1
match #2
=>2
match #3
=>12
Co wydaje się nieoptymalne w porównaniu z potrójnym zakładem, który kosztuje 3
i obejmuje większą niepewność:
match #1
=>X12
match #2
=>2
match #3
=>2
Powyższy przykład nabiera jeszcze większego znaczenia, jeśli weźmie się pod uwagę, że match #3
szanse mogą być następujące:
$game['match #3'] = array // stdev = 0.4714
(
'1' => 0.0, // 0% home wins
'X' => 0.0, // 0% draw
'2' => 1.0, // 100% away wins
);
W tym przypadku marnowałbym podwójnego bez powodu.
Zasadniczo mogę wybrać tylko największy (być może głupi) zakład, a nie najmądrzejszy, największy zakład .
Uderzam głową o ścianę od kilku dni, mając nadzieję, że dostanę objawienia, ale do tej pory udało mi się wymyślić tylko dwa pół- [złe] rozwiązania:
1) Narysuj „linię”
Zasadniczo powiedziałbym, że mecze o stdev niższym niż określona wartość byłyby potrójne, mecze o stdev o wiele wyższe byłyby podwójnymi zakładami, a pozostałe pojedynczymi zakładami.
Problem w tym, oczywiście, polega na znalezieniu odpowiednich konkretnych granic - i nawet jeśli znajdę idealne wartości dla „najmądrzejszego” zakładu, nadal nie wiem, czy mam wystarczająco dużo pieniędzy, aby zagrać w sugerowany zakład, czy też Mógłbym postawić jeszcze większy (również inteligentny) zakład ...
2) Bruteforce
Wpadłem na ten pomysł pisząc to pytanie i wiem, że nie będzie on miał sensu w kontekście, który opisałem, ale myślę, że mógłbym sprawić, by działał przy użyciu nieco innych wskaźników. Zasadniczo, mógłbym zmusić program do sugerowania zakładów (liczba potrójnych i podwójnych zakładów) na każdą możliwą kwotę pieniędzy, którą mogłem zagrać (od 1
do 4
w moim przykładzie), stosując pseudo-algorytm, który opisałem powyżej i obliczając wartość globalnego rankingu (coś jak % of symbols * match stdev
- wiem, to nie ma sensu).
Zakład z najwyższym rankingiem (obejmującym niepewność) byłby sugerowanym zakładem. Problem z tym podejściem (poza tym, że nie ma to jeszcze sensu) polega na tym, że gry, w których będzie pracował mój program, nie są ograniczone do 3 meczów, a liczba podwójnych i potrójnych kombinacji zakładów dla tych meczów byłaby znacznie wyższy.
Wydaje mi się, że istnieje eleganckie rozwiązanie, ale nie mogę go pojąć ...
Dziękujemy za pomoc w rozwiązaniu tego problemu.
Wydaje się, że istnieje pewne zamieszanie dotyczące mojego problemu, już to rozwiązałem w tym pytaniu, a także w komentarzach, ale błędna interpretacja nadal wydaje się przeważać, przynajmniej dla niektórych.
Muszę wiedzieć, ile potrójnych, podwójnych i pojedynczych zakładów zagram dla określonej gry (wszystkich meczów). Wiem już, w jakie symbole chcę grać, patrząc na każdy mecz indywidualnie.