Ich habe versucht, einen Algorithmus zu programmieren, der Wetten in 1X2-Spielen (gewichtet) vorschlägt.
Grundsätzlich hat jedes Spiel eine Reihe von Spielen (Heim- gegen Auswärtsteams):
1
: HeimsiegeX
: zeichnen2
: auswärts gewinnt
Für jede Übereinstimmung und jedes Symbol ( 1
, X
und 2
) werde ich einen Prozentsatz zuweisen, der die Wahrscheinlichkeit angibt, dass dieses Symbol das richtige Übereinstimmungsergebnis ist. Hier ist ein Array, das die Struktur darstellt:
$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
),
);
Ich berechne auch die Standardabweichung für jede Wette (im obigen Snippet kommentiert); Höhere Standardabweichungen bedeuten eine höhere Sicherheit, während die Übereinstimmungen mit den niedrigsten Standardabweichungen zu einer höheren Unsicherheit führen und idealerweise mit einem Doppel- oder Dreifacheinsatz abgedeckt werden sollten, wenn dies möglich ist.
Der folgende Pseudo-Algorithmus sollte den gesamten Workflow beschreiben:
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
Soweit so gut, aber ich muss dem Algorithmus mitteilen, wie viel ich ausgeben möchte. Nehmen wir an, eine einzelne Wette kostet 1
in einer beliebigen Währung. Die Formel zur Berechnung der Kosten einer Mehrfachwette lautet:
2^double_bets * 3^triple_bets * cost_per_bet (= 1)
Offensichtlich sollte der Algorithmus versuchen, so viel Geld wie möglich in den Wettvorschlag einzubeziehen (sonst würde es nicht viel Sinn machen), und jetzt wird dies schwieriger ...
Nehmen wir an, ich möchte maximal bezahlen 4
und alle möglichen Vielfachen in PHP ( @ IDEOne ) auflisten :
$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);
Ergibt die folgende Ausgabe:
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
)
)
Das Problem
Wenn ich den maximal verfügbaren Geldbetrag spielen möchte ( 4
), müsste ich mit zwei Doppelwetten wetten. Wenn ich den oben beschriebenen Pseudo-Algorithmus verwende, erhalte ich den folgenden Wettvorschlag:
match #1
=>X1
match #2
=>2
match #3
=>12
Was im Vergleich zu einer dreifachen Wette, 3
die mehr Unsicherheit kostet und deckt, suboptimal erscheint :
match #1
=>X12
match #2
=>2
match #3
=>2
Das obige Beispiel gewinnt noch mehr an Relevanz, wenn Sie bedenken, dass die match #3
Gewinnchancen Folgendes sein könnten:
$game['match #3'] = array // stdev = 0.4714
(
'1' => 0.0, // 0% home wins
'X' => 0.0, // 0% draw
'2' => 1.0, // 100% away wins
);
In diesem Fall würde ich ohne guten Grund ein Doppel verschwenden.
Grundsätzlich kann ich nur die größte (möglicherweise dumme) Wette wählen und nicht die klügste, größte Wette .
Ich habe meinen Kopf seit einigen Tagen gegen die Wand geschlagen und gehofft, dass ich eine Art Offenbarung bekomme, aber bisher konnte ich nur zwei halbe [schlechte] Lösungen finden:
1) Zeichne eine "Linie"
Grundsätzlich würde ich sagen, dass Spiele mit einem stdev, der niedriger als ein bestimmter Wert ist, dreifach sind, Spiele mit einem stdev, der höher ist, wären Doppelwetten und die restlichen Einzelwetten.
Das Problem dabei ist natürlich, die entsprechenden spezifischen Grenzen herauszufinden - und selbst wenn ich die perfekten Werte für die "intelligenteste" Wette finde, weiß ich immer noch nicht, ob ich genug Geld habe, um die vorgeschlagene Wette zu spielen, oder ob Ich könnte eine noch größere (auch kluge) Wette abschließen ...
2) Bruteforce
Ich bin beim Schreiben dieser Frage auf diese Idee gekommen und weiß, dass sie in dem von mir beschriebenen Kontext keinen Sinn ergibt, aber ich denke, ich könnte sie mit etwas anderen Metriken zum Laufen bringen. Grundsätzlich könnte ich das Programm dazu bringen, Wetten (Anzahl der Triple- und Double-Wetten) für jeden möglichen Geldbetrag vorzuschlagen, den ich spielen könnte (von 1
bis 4
in meinem Beispiel), indem ich den oben beschriebenen Pseudo-Algorithmus anwende und einen globalen Rangwert (etwas) berechne wie % of symbols * match stdev
- ich weiß, es macht keinen Sinn).
Die Wette mit dem höchsten Rang (Deckungsunsicherheit) wäre die vorgeschlagene Wette. Das Problem bei diesem Ansatz (abgesehen von der Tatsache, dass es noch keinen Sinn ergibt) ist, dass die Spiele, mit denen mein Programm arbeiten wird, nicht auf 3 Spiele beschränkt sind und die Anzahl der Doppel- und Dreifachwettkombinationen für diese Spiele wäre wesentlich höher.
Ich habe das Gefühl, dass es eine elegante Lösung gibt, aber ich kann es einfach nicht begreifen ...
Vielen Dank für jede Hilfe, die dieses Problem löst.
Es scheint einige Verwirrung in Bezug auf mein Problem zu geben, ich habe dies bereits in dieser Frage und auch in den Kommentaren angesprochen, aber die Fehlinterpretation scheint immer noch zu überwiegen, zumindest für einige.
Ich muss wissen, wie viele Triple-, Double- und Single-Wetten ich für ein bestimmtes Spiel (alle Matches) spielen werde. Ich weiß bereits, welche Symbole ich spielen möchte, indem ich mir jedes Match einzeln ansehe.
quelle
Antworten:
Ich denke, ich habe eine brauchbare Bruteforce-Lösung gefunden, die so aussieht:
Für das Beispiel und die Beträge, die ich in meiner Frage angegeben habe, wäre dies:
2) Berechnen Sie die Standardabweichung der Symbolquoten für jedes Spiel
3) Berechnen Sie für jede Mehrfachwette ( Schritt 1 ) eine Rangfolge mit der Formel:
Ranking = (#n (x) [+ #n (y) [+ #n (z)]]) / stdev (#n)
Wo
#n
ist eine bestimmte Übereinstimmung und#n(x|y|z)
ist die geordnete Quote der Symbole.Test für 1 Einzel-, 2 Doppel-, 0 Dreifachwette:
(#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
Diese Wette gibt mir die Weltrangliste von
14.89 + 2.48 + 2.12 = 19.49
.Test für 2 Einzel-, 0 Doppel-, 1 Dreifachwette:
(#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
Welches gibt mir ein globales Ranking von
21.28 + 2.24 + 2.12 = 25.64
. :-)Alle verbleibenden Wetten sind eindeutig minderwertig, so dass es keinen Sinn macht, sie zu testen.
Diese Methode scheint zu funktionieren, aber ich bin durch Ausprobieren darauf gekommen, und nach meinem Bauch fehlt mir das mathematische Verständnis, um zu beurteilen, ob es richtig ist oder ob es einen besseren Weg gibt ...
Irgendwelche Hinweise?
PS: Entschuldigen Sie die schlechte Formatierung, aber der MD-Parser scheint sich von StackOverflow zu unterscheiden.
quelle
Wie wäre es mit einer Lösung basierend auf der Simplex-Methode? Da die Voraussetzung für die Verwendung der Simplex-Methode nicht erfüllt ist, müssen wir die Methode geringfügig ändern. Ich nenne die modifizierte Version "Walk the line".
Methode:
Sie können die Unsicherheit jedes Matches messen. Tu es! Berechnen Sie die Unsicherheit jedes Spiels mit einer Einzel- oder Doppelwette (bei einer Dreifachwette gibt es keine Unsicherheit). Wählen Sie beim Hinzufügen eines Doppel- oder Dreifacheinsatzes immer den Einsatz, der die Unsicherheit am meisten verringert.
Wählen Sie die Wette mit der geringsten Gesamtunsicherheit.
quelle
Was ich aus der Beobachtung dieser Sportwetten habe, habe ich zu diesem Schluss gezogen.
Erwarteter Wert
Nehmen wir an, Sie haben 3 Wetten mit
1.29 5.5 and 10.3
(letzte Wette in der Tabelle) EV für Wetten.EV = 1/(1/1.29+1/5.5+1/10.3) - 1 = -0.05132282687714185
Wenn die Wahrscheinlichkeit, dass eine über eine andere gewinnt, so verteilt ist1/1.29 : 1/5.5 : 1/10.3
, verlieren Sie Ihr Geld auf lange Sicht, da Ihr EV negativ ist.Sie können nur profitieren, wenn Sie die Wahrscheinlichkeiten der einzelnen Ergebnisse herausfinden und Unregelmäßigkeiten feststellen können.
Nehmen wir an, dass es sich um echte Wahrscheinlichkeiten handelt
0.7 : 0.2 : 0.1
Das heißt, die Preise sollten sein
1.43 \ 5.0 \ 10.0
Sie können sich vorstellen, dass in diesem Fall die beste Auszahlung für ein Unentschieden erzielt wird, da Sie wissen,
EV(0) = 5.5/5 - 1 = 0.1
wo das Wetten auf eine Niederlage liegt
EV(2) = 10.2/10 - 1 = 0.02
und das Wetten auf einen Heimsieg sogar bei einem EV liegt.
EV(1) = 1.29/1.43 - 1 = -0.10
quelle