Я пытался написать алгоритм для предложения ставок в 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 матчами, и количество комбинаций двойных и тройных ставок для этих матчей будет существенно выше.
Я чувствую, что есть элегантное решение, но я просто не могу понять это ...
Спасибо за любую помощь в решении этой проблемы, спасибо.
Кажется, в отношении моей проблемы есть некоторая путаница, я уже говорил об этом в этом вопросе, а также в комментариях, но неправильная интерпретация все еще преобладает, по крайней мере, для некоторых.
Мне нужно знать, сколько тройных, двойных и одиночных ставок я сыграю за конкретную игру (все матчи). Я уже знаю, какие символы я хочу сыграть, глядя на каждый матч в отдельности.