Я пытался написать алгоритм для предложения ставок в 1X2 (взвешенных) играх.
По сути, в каждой игре есть набор матчей (домашние и выездные команды):
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
), мне придется делать ставки с двумя двойными ставками, если я использую описанный выше псевдоалгоритм, я получу следующее предложение ставки:
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) Брутфорс
Я придумал эту идею, когда писал этот вопрос, и я знаю, что в описанном мною контексте это не будет иметь смысла, но я думаю, что смогу заставить его работать, используя несколько иные метрики. В принципе, я мог бы сделать программу предложить ставки (# тройных и двойных ставок) для каждой возможной суммы денег , я мог бы играть (от 1
до 4
в моем примере), применяя псевдо-алгоритм , который я описал выше , и вычисление глобального рейтинга значения (что - то как % of symbols * match stdev
- я знаю, это не имеет смысла).
Ставка с самым высоким рейтингом (покрывающая неопределенность) будет предложенной ставкой. Проблема этого подхода (помимо того факта, что он пока не имеет никакого смысла) состоит в том, что игры, с которыми будет работать моя программа, не ограничены 3 матчами, и количество комбинаций двойных и тройных ставок для этих матчей будет существенно выше.
Я чувствую, что есть элегантное решение, но я просто не могу понять это ...
Спасибо за любую помощь в решении этой проблемы, спасибо.
Кажется, в отношении моей проблемы есть некоторая путаница, я уже говорил об этом в этом вопросе, а также в комментариях, но неправильная интерпретация все еще преобладает, по крайней мере, для некоторых.
Мне нужно знать, сколько тройных, двойных и одиночных ставок я сыграю за конкретную игру (все матчи). Я уже знаю, какие символы я хочу сыграть, глядя на каждый матч в отдельности.
источник
Ответы:
Я думаю, что придумал работоспособное решение для грубой силы, оно выглядит так:
Для примера и сумм, которые я указал в своем вопросе, это будет:
2) рассчитать стандартное отклонение шансов символа для каждого матча
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.
источник
Как насчет решения, основанного на симплекс-методе. Поскольку предпосылка для использования метода Simplex не выполняется, нам нужно немного изменить метод. Я называю модифицированную версию «Пройди по линии».
Метод:
Вы можете измерить неопределенность каждого матча. Сделай это! Рассчитайте неопределенность каждого матча с помощью одинарной или двойной ставки (для тройной ставки неопределенности нет). При добавлении двойной или тройной ставки всегда выбирайте ту, которая максимально снижает неопределенность.
Выберите ставку с наименьшей общей неопределенностью.
источник
Что я пришел, наблюдая за этими ставками, я пришел к этим выводам.
Ожидаемое значение
Допустим, у вас есть 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
источник