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.
la source
Réponses:
Je pense que j'ai trouvé une solution bruteforce viable, ça se passe comme ceci:
Pour l'exemple et les montants que j'ai fournis dans ma question, ce serait:
2) calculer l'écart type des cotes des symboles pour chaque match
3) pour chaque combinaison de paris multiples ( étape 1 ), calculez un classement en utilisant la formule:
classement = (#n (x) [+ #n (y) [+ #n (z)]]) / stdev (#n)
Où
#n
est une correspondance spécifique et#n(x|y|z)
est la cote ordonnée des symboles.Testez un pari 1 simple, 2 doubles, 0 triple:
(#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
Ce pari me donne un classement mondial de
14.89 + 2.48 + 2.12 = 19.49
.Testez un pari 2 simples, 0 double, 1 triple:
(#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
Ce qui me donne un classement mondial de
21.28 + 2.24 + 2.12 = 25.64
.:-)Tous les paris restants seront clairement inférieurs, il est donc inutile de les tester.
Cette méthode semble fonctionner mais je l'ai inventée par essais et erreurs et à la suite de mon instinct, je n'ai pas la compréhension mathématique pour juger si elle est correcte ou même s'il existe une meilleure façon ...
Des pointeurs?
PS: Désolé pour le mauvais formatage mais l'analyseur MD semble être différent de StackOverflow.
la source
Que diriez-vous de faire une solution basée sur la méthode Simplex. Étant donné que la prémisse d'utilisation de la méthode Simplex n'est pas remplie, nous devons légèrement modifier la méthode. J'appelle la version modifiée "Walk the line".
Méthode:
Vous pouvez mesurer l'incertitude de chaque correspondance. Fais le! Calculez l'incertitude de chaque match avec un pari simple ou double (pour un pari triple, il n'y a pas d'incertitude). Lorsque vous ajoutez un pari double ou triple, choisissez toujours celui qui réduit le plus l'incertitude.
Choisissez le pari avec l'incertitude totale la plus faible.
la source
Ce que je viens de l'observation de ces paris sportifs, je suis arrivé à ces conclusions.
Valeur attendue
Disons que vous avez 3 paris avec
1.29 5.5 and 10.3
(le dernier pari dans le tableau) EV pour parier estEV = 1/(1/1.29+1/5.5+1/10.3) - 1 = -0.05132282687714185
si détient que les probabilités un gagnant sur un autre sont distribuées comme1/1.29 : 1/5.5 : 1/10.3
, alors vous perdez votre argent à long terme puisque votre EV est négatif.Vous ne pouvez profiter que si vous pouvez déterminer quelles sont les probabilités de chaque résultat et découvrir les irrégularités.
Disons que les vraies probabilités sont
0.7 : 0.2 : 0.1
Cela signifie que les taux devraient être
1.43 \ 5.0 \ 10.0
Vous pouvez voir que dans ce cas, le meilleur gain est pour le tirage au sort, car il vous donne
EV(0) = 5.5/5 - 1 = 0.1
où pour parier sur la perte
EV(2) = 10.2/10 - 1 = 0.02
et le pari pour la victoire à domicile est même EV-
EV(1) = 1.29/1.43 - 1 = -0.10
la source