J'ai essayé de coder un algorithme pour suggérer des paris dans des jeux 1X2 (pondérés).
Fondamentalement, chaque match a un ensemble de matchs (équipes à domicile vs équipes à l'extérieur):
1
: victoires à domicileX
: dessiner2
: victoires à l'extérieur
Pour chaque correspondance et symbole ( 1
, X
et 2
), j'attribuerai un pourcentage qui représente les chances / probabilités que ce symbole soit le résultat de correspondance correct. Voici un tableau représentant la structure:
$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
),
);
Je calcule également l'écart type pour chaque pari (commenté dans l'extrait ci-dessus); des écarts-types plus élevés représentent une certitude plus élevée, tandis que les correspondances avec les écarts-types les plus faibles se traduisent par un niveau d'incertitude plus élevé et, idéalement, devraient être couverts par un pari double ou triple, si possible.
Le pseudo-algorithme suivant doit décrire le flux de travail global:
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
Jusqu'ici tout va bien, mais je dois dire à l'algorithme combien je veux dépenser. Disons qu'un seul pari coûte 1
dans n'importe quelle devise, la formule pour calculer combien coûte un pari multiple est:
2^double_bets * 3^triple_bets * cost_per_bet (= 1)
De toute évidence, l'algorithme devrait essayer d'allouer autant d'argent disponible que possible dans la suggestion de pari (cela n'aurait pas beaucoup de sens autrement), et c'est maintenant que cela devient plus difficile ...
Disons que je veux payer un maximum de 4
, énumérant tous les multiples possibles en 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);
Donne la sortie suivante:
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
)
)
Le problème
Si je choisis de jouer le maximum d'argent disponible ( 4
), je devrai miser avec deux doubles, si j'utilise le pseudo-algorithme décrit ci-dessus, je me retrouverais avec la suggestion de pari suivante:
match #1
=>X1
match #2
=>2
match #3
=>12
Ce qui semble sous-optimal par rapport à un triple pari qui coûte 3
et couvre plus d'incertitude:
match #1
=>X12
match #2
=>2
match #3
=>2
L'exemple ci-dessus gagne encore en pertinence si vous considérez que les match #3
chances peuvent être:
$game['match #3'] = array // stdev = 0.4714
(
'1' => 0.0, // 0% home wins
'X' => 0.0, // 0% draw
'2' => 1.0, // 100% away wins
);
Dans ce cas, je gaspillerais un double sans raison valable.
Fondamentalement, je ne peux que choisir le plus gros pari (peut-être stupide) et non le plus gros pari .
Cela fait quelques jours que je me tape la tête contre le mur, espérant obtenir une sorte d'épiphanie, mais jusqu'à présent, je n'ai pu trouver que deux demi-[mauvaises-] solutions:
1) Tracez une "ligne"
Fondamentalement, je dirais que les correspondances avec un stdev inférieur à une valeur spécifique seraient triples, les correspondances avec un stdev beaucoup plus élevé seraient des paris doubles et les autres paris simples.
Le problème avec cela, bien sûr, est de trouver les limites spécifiques appropriées - et même si je trouve les valeurs parfaites pour le pari "le plus intelligent", je ne sais toujours pas si j'ai assez d'argent pour jouer le pari suggéré ou si Je pourrais faire un pari encore plus grand (aussi intelligent) ...
2) Bruteforce
J'ai eu cette idée en écrivant cette question et je sais que cela n'a pas de sens dans le contexte que j'ai décrit, mais je pense que je pourrais le faire fonctionner en utilisant des métriques quelque peu différentes. Fondamentalement, je pourrais faire suggérer au programme des paris (nombre de paris triples et doubles) pour chaque montant d'argent possible que je pourrais jouer (de 1
à 4
dans mon exemple), en appliquant le pseudo-algorithme que j'ai décrit ci-dessus et en calculant une valeur de classement global (quelque chose comme % of symbols * match stdev
- je sais, ça n'a pas de sens).
Le pari avec le rang le plus élevé (couvrant l'incertitude) serait le pari suggéré. Le problème avec cette approche (outre le fait que cela n'a pas encore de sens) est que les jeux avec lesquels mon programme va fonctionner ne sont pas limités à 3 matchs et que le nombre de combinaisons de paris double et triple pour ces matchs serait nettement plus élevé.
J'ai l'impression qu'il existe une solution élégante, mais je n'arrive pas à la saisir ...
Toute aide pour résoudre ce problème est grandement appréciée, merci.
Il semble y avoir une certaine confusion concernant mon problème, je l'ai déjà abordé dans cette question et aussi dans les commentaires, mais l'interprétation erronée semble toujours prévaloir, du moins pour certains.
J'ai besoin de savoir combien de paris triples, doubles et simples je jouerai pour un jeu spécifique (tous les matchs). Je sais déjà quels symboles je veux jouer en regardant chaque match individuellement.