Я намагався кодувати алгоритм, щоб запропонувати ставки в 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) Намалюйте "Лінію"
В основному я б сказав, що матчі зі стдевом, нижчим за конкретне значення, були б потрійними, матчі зі стдевом більшими - це подвійні ставки, а решта одиночні ставки.
Проблема з цим, звичайно, полягає у знаходженні відповідних конкретних меж - і навіть якщо я дійсно знаходжу ідеальні значення для "найрозумнішої" ставки, я все одно не знаю, чи вистачає грошей, щоб грати запропоновану ставку, або якщо Я міг би зробити ще більшу (теж розумну) ставку ...
2) Брутфорс
Я придумав цю ідею під час написання цього питання, і я знаю, що це не матиме досконалого сенсу в описаному нами контексті, але, думаю, я міг би змусити його працювати, використовуючи дещо інші показники. В основному, я міг би змусити програму запропонувати ставки (# потрійних та подвійних ставок) на кожну можливу суму грошей, яку я міг би зіграти (від 1
до 4
мого прикладу), застосувавши описаний вище псевдо-алгоритм і обчисливши загальне значення рейтингу (щось як % of symbols * match stdev
- я знаю, це не має сенсу).
Ставка з найвищим рейтингом (що покриває невизначеність) була б запропонованою ставкою. Проблема такого підходу (крім того, що він ще не має сенсу) полягає в тому, що ігри, з якими буде працювати моя програма, не обмежуються трьома матчами, а кількість подвійних і потрійних комбінацій ставок для цих матчів буде істотно вище.
Я відчуваю, що є елегантне рішення, але я просто не можу зрозуміти це ...
Будь-яка допомога, яка вирішує цю проблему, дуже вдячна, дякую.
Здається, є певна плутанина щодо моєї проблеми, я вже вирішував це в цьому питанні, а також у коментарях, але неправильне тлумачення все ще переважає, принаймні, в деяких.
Мені потрібно знати, скільки потрійних, подвійних та одиночних ставок буду грати на певну гру (всі матчі). Я вже знаю, в які символи хочу грати, переглядаючи кожен матч окремо.