Büyük, akıllı (er) bahisler yapmak


16

1X2 (ağırlıklı) oyunlarda bahis önermek için bir algoritma kodlamaya çalışıyorum.

Temel olarak, her oyunun bir takım maçları vardır (ev sahibi ve deplasman takımları):

  • 1: ev sahibi kazanır
  • X: çizmek
  • 2: deplasman kazanır

BWin 1X2 Bahis Oyunu

Her maç ve sembol ( 1ve Xve 2) için, bu sembolün doğru maç sonucu olma şansını / olasılığını temsil eden bir yüzde atayacağım. İşte yapıyı temsil eden bir dizi:

$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
    ),
);

Ayrıca her bahis için standart sapmayı da hesaplıyorum (yukarıdaki pasajda yorumlanmıştır); daha yüksek standart sapmalar daha yüksek bir kesinliği temsil ederken, en düşük standart sapmalara sahip maçlar daha yüksek bir belirsizlik seviyesine dönüşür ve ideal olarak mümkünse çift veya üçlü bir bahisle kaplanmalıdır.

Aşağıdaki sözde algoritma genel iş akışını tanımlamalıdır:

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

Şimdiye kadar iyi, ama algoritmaya ne kadar harcamak istediğimi söylemeliyim. Tek bir bahisin 1hangi para biriminde olursa olsun, birden fazla bahis maliyetinin ne kadar olduğunu hesaplayan formülün diyelim :

2^double_bets * 3^triple_bets * cost_per_bet (= 1)

Açıkçası, algoritma bahis önerisine mümkün olduğu kadar çok para tahsis etmeye çalışmalıdır (aksi halde çok mantıklı olmaz) ve şimdi bu daha zorlaşıyor ...

Diyelim ki 4PHP'de mümkün olan tüm katları listeleyerek maksimum ödeme yapmak istiyorum ( @ 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);

Aşağıdaki çıktıyı verir:

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
        )
)

Sorun

Kullanılabilir maksimum para miktarını ( 4) oynamayı seçersem , iki kez bahse girerim, eğer yukarıda tarif ettiğim sahte algoritmayı kullanırsam aşağıdaki bahis önerisiyle sonuçlanırım:

  • match #1 => X1
  • match #2 => 2
  • match #3 => 12

Bu, maliyeti 3ve daha fazla belirsizliği kapsayan üçlü bir bahisle karşılaştırıldığında en uygun görünmüyor :

  • match #1 => X12
  • match #2 => 2
  • match #3 => 2

Yukarıdaki örnek, match #3oranların olabileceğini düşünürseniz daha da önem kazanır :

$game['match #3'] = array // stdev = 0.4714
(
    '1' => 0.0,           //   0%    home wins
    'X' => 0.0,           //   0%    draw
    '2' => 1.0,           // 100%    away wins
);

Bu durumda, iyi bir sebep olmadan bir çift harcıyordum.

Temel olarak, sadece seçebilir büyük (muhtemelen aptal) bahis değil zeki, en büyük bahis .

Birkaç gündür başımı duvara vuruyorum, bir tür epifani elde etmeyi umuyorum ama şimdiye kadar sadece iki yarım- [kötü-] çözüm üretebildim:


1) Bir "Çizgi" çizin

Temel olarak, belirli bir değerden daha düşük bir stdev ile eşleşmelerin üçlü, büyük bir daha yüksek bir stdev ile eşleşmelerin çift bahis ve geri kalan tekli bahis olacağını söyleyebilirim.

Bununla ilgili sorun, elbette, uygun belirli sınırları bulmaktır - ve "en akıllı" bahis için mükemmel değerleri bulsam bile, önerilen bahsi oynamak için yeterli param var mı yoksa Daha büyük (aynı zamanda akıllı) bir bahis yapabilirdim ...


2) Bruteforce

Bu soruyu yazarken bu fikri buldum ve tanımladığım bağlamda bunun tam anlamıyla anlam ifade etmeyeceğini biliyorum ama bence biraz farklı metrikler kullanarak işe yarayabilir. Temelde, programım (dan oynayabilir para olası her miktar için bahisler (üçlü ve çift bahis #) önermek yapabilir 1için 4(bir şey yukarıda açıklanan sözde algoritma uygulanarak ve küresel Sıra değerini hesaplayarak bizim örneğimizde), gibi % of symbols * match stdev- biliyorum, mantıklı değil).

En yüksek dereceye sahip bahis (belirsizliği kapsayan) önerilen bahis olacaktır. Bu yaklaşımla ilgili sorun (henüz bir anlam ifade etmemesinin yanı sıra), programımın çalışacağı oyunların 3 maçla sınırlı olmaması ve bu maçlar için çift ve üçlü bahis kombinasyonlarının sayısı önemli ölçüde daha yüksek.


Zarif bir çözüm varmış gibi hissediyorum, ama anlayamıyorum ...

Bu sorunu çözen herhangi bir yardım çok takdir ediliyor, teşekkürler.


Sorunumla ilgili bazı karışıklıklar var gibi görünüyor, bu soruya ve yorumlara zaten değindim, ancak yanlış yorum hala en azından bazıları için geçerli görünüyor.

Belirli bir oyun için kaç tane üçlü, çift ve tek bahis oynayacağımı bilmeliyim (tüm maçlar). Her maça ayrı ayrı bakarak hangi sembolleri oynamak istediğimi zaten biliyorum.


4
Math.stackexchange.com'daki iyi insanlar, tanımladığınız soruna daha iyi bir anlayış sağlayabilir, bu da bunu uygulamak için iyi yollar önerebilir :)

1
@Lethargy: Bir keresinde burada Pascal Üçgeni ve Başbakan Sayılar hakkında bir soru yayınladım. Çok hızlı bir şekilde yaklaşık 15 upvotes aldım (hem SO'da hem de matematikte.SE) ama soru 30 dakikadan daha kısa bir sürede kapatıldı ve artık mevcut değil. Bu tür "basit" soruları çok sevdiklerini sanmıyorum.
Alix Axel

2
Maksimum Sayı Kazancı için optimizasyon yaparsak, bu gerçekten çok kolay görünüyor. Ortalama galibiyet sayısı, her eklenen tek bir örneğin kazanma şansıdır. Yani maksimum şansa tek bir bahis koyarsak ortalama 0.4 + 1 + 0.9 = 2.3 oyun kazanırız. Yani 1 bahis eklemek her zaman eşit derecede pahalı olsaydı, çözüm sadece kazanma şansını sıralamak ve ilk COST şansını almak olacaktır (bu örnek için "en iyi" sonucu verir). Bir şeye ikinci ve üçüncü bir şey eklerken maliyet farklıysa, daha karmaşık hale gelir (bruteforce özyinelemeli işler olsa da) ve sanırım bunu uyuyacağım.

2
Php bilmeyen bir matematikçi olarak, kod yerine matematiksel gösterimde olsaydı bu soruna saldırmak çok daha kolay olurdu.

2
Kelly kriterini duydun mu? Değilse, orada sizin için bir miktar okuma var.

Yanıtlar:


2

Bence uygulanabilir bir bruteforce çözümü buldum, şöyle devam ediyor:


  • 1) yapabileceğim çoklu bahislerin olası her kombinasyonunu hesapla

Soruma verdiğim örnek ve tutarlar için bu:

  • 3 tek, 0 çift, 0 üçlü = 1 tek bahse denk
  • 2 tek, 1 çift, 0 üçlü = 2 tek bahisle eşdeğer
  • 2 tek, 0 çift, 1 üçlü = 3 tek bahisle eşdeğer
  • 1 tek, 2 çift, 0 üçlü = 4 tek bahisle eşdeğer

  • 2) Her maç için sembol oranlarının standart sapmasını hesaplayın

             |    1    |    X    |    2    |  stdev  |
             |---------|---------|---------|---------|
    Match #1 |   0.3   |   0.4   |   0.3   |  0.047  |
             |---------|---------|---------|---------|
    Match #2 |   0.1   |   0.0   |   0.9   |  0.402  |
             |---------|---------|---------|---------|
    Match #3 |   0.0   |   0.0   |   1.0   |  0.471  |
    

  • 3) her çoklu bahis kombinasyonu için ( adım 1 ) aşağıdaki formülü kullanarak bir sıralama hesaplayın:

    sıralama = (#n (x) [+ #n (y) [+ #n (z)]]) / stdev (#n)

#nBelirli bir eşleşme nerede #n(x|y|z)ve sembollerin sıralı oranları.

  • Kibritler düşükten yüksek standart sapmalara kadar işlenir.
  • Her maçtaki münferit semboller yüksek ila düşük oranlar arasında işlenir.

1 tek, 2 çift, 0 üçlü bahis için test yapın:

  • (#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

Bu bahis bana küresel sıralamada 14.89 + 2.48 + 2.12 = 19.49 .


2 tek, 0 çift, 1 üçlü bahis için test edin:

  • (#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

Bu da bana küresel bir sıralama sunuyor 21.28 + 2.24 + 2.12 = 25.64. :-)


Geriye kalan tüm bahisler açıkça daha düşük olacaktır, bu yüzden onları test etmenin bir anlamı yoktur.

Bu yöntem görünüyor işe yarıyor ama deneme yanılma yoluyla geldim ve bağırsaklarımı takip ederek, doğru olup olmadığını ya da daha iyi bir yol olsa bile matematiksel anlayıştan yoksundur ...

İşaretçi var mı?

Not: Kötü biçimlendirme için özür dilerim, ancak MD ayrıştırıcısı StackOverflow'dan farklı görünüyor.


Bu sorunu çözmek için Doğrusal programlamayı ( en.wikipedia.org/wiki/Linear_programming ) düşündünüz mü ?
Victor Sorokin

1

Simplex Yöntemi'ne dayalı bir çözüm yapmaya ne dersiniz? Simplex yöntemini kullanma önceliği yerine getirilmediğinden, yöntemi biraz değiştirmemiz gerekir. Değiştirilmiş sürümü "Satır yürü" diyorum.

Yöntem:

Her maçın belirsizliğini ölçebilirsiniz. Yap! Her maçın belirsizliğini tek veya çift bahisle hesaplayın (üçlü bahis için belirsizlik yoktur). Çift veya üçlü bahis eklerken, belirsizliği daima en aza indiren bahsi seçin.

  1. Maksimum üçlü bahis sayısından başlayın. Toplam belirsizliği hesaplayın.
  2. Üçlü bahsi kaldırın. Maksimum maliyetin altında tutarak bir veya iki çift bahis ekleyin. Toplam belirsizliği hesaplayın.
  3. Maksimum çift bahis sayısına ulaşana kadar 2. adımı tekrarlayın.

En düşük toplam belirsizliğe sahip bahsi seçin.


0

Bu spor bahislerini gözlemlemekten elde ettiğim şey, bu sonuçlara geldim.

Beklenen değer
Bahis için 3 bahislik beyaz 1.29 5.5 and 10.3(tablodaki son bahis) EV'niz
EV = 1/(1/1.29+1/5.5+1/10.3) - 1 = -0.05132282687714185 olduğunu
1/1.29 : 1/5.5 : 1/10.3varsayalım.
Sadece her bir sonucun olasılıklarının ne olduğunu anlayabilir ve düzensizlikleri bulabilirseniz kâr edebilirsiniz.

Diyelim ki gerçek olasılıklar
0.7 : 0.2 : 0.1

Bu, oranların 1.43 \ 5.0 \ 10.0

Bu durumda, en iyi getirinin bahis çekilişi için olduğunu görebilirsiniz, çünkü size
EV(0) = 5.5/5 - 1 = 0.1
zarar üzerine
EV(2) = 10.2/10 - 1 = 0.02
bahis için nerede olduğunu ve ev galibiyeti için bahis bile EV-
EV(1) = 1.29/1.43 - 1 = -0.10


Sorumu aldığını sanmıyorum. Her bir maçta hangi sembollerin (ve çoklu bahis durumunda hangi sırayla) bahis yapılacağını zaten biliyorum. Benim sorunum, küresel olarak tüm maçlara (ve ilgili sembol şanslarına) bakarak oynamam gereken ideal üçlü ve çift bahis sayısını bulmaktır .
Alix Axel
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.