Membuat taruhan besar, pintar (er)

16

Saya sudah mencoba kode algoritma untuk menyarankan taruhan di 1X2 (game berbobot).

Pada dasarnya, setiap pertandingan memiliki serangkaian pertandingan (tim kandang vs tim tamu):

  • 1: rumah menang
  • X: seri
  • 2: kemenangan tandang

Game Taruhan BWin 1X2

Untuk setiap pertandingan dan simbol ( 1, Xdan 2), saya akan menetapkan persentase yang mewakili peluang / kemungkinan simbol itu menjadi hasil pertandingan yang benar. Berikut ini array yang mewakili struktur:

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

Saya juga menghitung simpangan baku untuk setiap taruhan (dikomentari dalam cuplikan di atas); standar deviasi yang lebih tinggi mewakili kepastian yang lebih tinggi, sementara pertandingan dengan standar deviasi terendah diterjemahkan ke tingkat ketidakpastian yang lebih tinggi, dan, idealnya, harus ditutup dengan taruhan ganda atau tiga kali lipat, jika memungkinkan.

Algoritma pseudo berikut harus menjelaskan alur kerja keseluruhan:

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

Sejauh ini bagus, tapi saya perlu memberi tahu algoritma berapa banyak yang ingin saya belanjakan. Katakanlah biaya taruhan tunggal 1dalam mata uang apa pun, rumus untuk menghitung berapa banyak biaya taruhan ganda:

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

Jelas, algoritma harus mencoba mengalokasikan uang sebanyak mungkin yang tersedia ke dalam saran taruhan (tidak masuk akal jika tidak), dan sekarang adalah saat ini menjadi semakin sulit ...

Katakanlah saya ingin membayar maksimum 4, mendaftar semua kelipatan yang mungkin dalam 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);

Menghasilkan output berikut:

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

Masalah

Jika saya memilih untuk memainkan jumlah uang maksimum yang tersedia ( 4) saya harus bertaruh dengan dua ganda, jika saya menggunakan algoritma semu yang saya jelaskan di atas, saya akan berakhir dengan saran taruhan berikut:

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

Yang tampaknya kurang optimal jika dibandingkan dengan taruhan rangkap tiga yang harganya 3dan mencakup lebih banyak ketidakpastian:

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

Contoh di atas mendapatkan lebih banyak relevansi jika Anda menganggap match #3kemungkinan itu adalah:

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

Dalam hal ini saya akan membuang dua kali lipat tanpa alasan yang jelas.

Pada dasarnya, saya hanya bisa memilih taruhan terbesar (mungkin bodoh) dan bukan yang terbaik , taruhan terbesar .

Saya telah membenturkan kepala saya ke dinding selama beberapa hari sekarang, berharap saya mendapatkan semacam pencerahan tetapi sejauh ini saya hanya dapat menemukan dua solusi [buruk-]:


1) Gambar "Garis"

Pada dasarnya saya akan mengatakan bahwa pertandingan dengan stdev lebih rendah dari nilai spesifik akan menjadi tiga kali lipat, pertandingan dengan stdev yang lebih tinggi akan menjadi taruhan ganda dan sisanya taruhan tunggal.

Masalah dengan ini, tentu saja, adalah menemukan batas-batas spesifik yang sesuai - dan bahkan jika saya menemukan nilai yang sempurna untuk taruhan "paling cerdas", saya masih tidak tahu apakah saya punya cukup uang untuk memainkan taruhan yang disarankan atau jika Saya bisa membuat taruhan yang lebih besar (juga pintar) ...


2) Bruteforce

Saya datang dengan ide ini saat menulis pertanyaan ini dan saya tahu itu tidak masuk akal dalam konteks yang saya jelaskan tetapi saya pikir saya bisa membuatnya bekerja menggunakan metrik yang agak berbeda. Pada dasarnya, saya bisa membuat program menyarankan taruhan (# taruhan triple dan double) untuk setiap jumlah uang yang mungkin bisa saya mainkan (dari 1hingga 4dalam contoh saya), menerapkan algoritma semu yang saya jelaskan di atas dan menghitung nilai peringkat global (sesuatu seperti % of symbols * match stdev- Saya tahu, itu tidak masuk akal).

Taruhan dengan peringkat tertinggi (mencakup ketidakpastian) akan menjadi taruhan yang disarankan. Masalah dengan pendekatan ini (selain fakta bahwa itu belum masuk akal) adalah bahwa permainan yang akan dikerjakan dengan program saya tidak terbatas pada 3 pertandingan dan jumlah kombinasi taruhan ganda dan tripel untuk pertandingan tersebut adalah jauh lebih tinggi.


Saya merasa ada solusi yang elegan, tapi saya tidak bisa menangkapnya ...

Setiap bantuan memecahkan masalah ini sangat dihargai, terima kasih.


Tampaknya ada beberapa kebingungan mengenai masalah saya, saya sudah membahas ini dalam pertanyaan ini dan juga di komentar tetapi kesalahan penafsiran tampaknya masih berlaku, setidaknya untuk beberapa.

Saya perlu tahu berapa banyak taruhan triple, double dan single yang akan saya mainkan untuk permainan tertentu (semua pertandingan). Saya sudah tahu simbol apa yang ingin saya mainkan dengan melihat setiap pertandingan secara individual.

Alix Axel
sumber
4
Orang-orang baik di math.stackexchange.com mungkin dapat memberikan pemahaman yang lebih baik untuk masalah yang Anda gambarkan, yang mungkin menyarankan cara-cara yang baik untuk mengimplementasikannya :)
1
@Largargy: Saya pernah memposting pertanyaan di sini tentang Segitiga Pascal dan Nomor Perdana yang kemudian dimigrasikan ke math.SE. Saya mendapat sekitar 15 upvotes (baik pada SO dan math.SE) dengan sangat cepat tetapi pertanyaannya ditutup dalam waktu kurang dari 30 menit dan bahkan tidak ada lagi. Saya tidak berpikir mereka sangat menyukai pertanyaan "sederhana" semacam ini.
Alix Axel
2
Jika kita mengoptimalkan untuk Maksimum angka Menang ini tampaknya sebenarnya sangat mudah. Jumlah rata-rata kemenangan hanyalah peluang kemenangan dari setiap instance yang ditambahkan bersamaan. Yaitu jika kita menetapkan satu taruhan pada peluang maksimum kita akan menang 0,4 + 1 + 0,9 = 2,3 game rata-rata. Jadi jika menambahkan 1 taruhan selalu sama mahal, solusinya adalah dengan mengurutkan peluang menang dan mengambil peluang BIAYA pertama (ini memberikan hasil "terbaik" sebagai contoh). Jika biayanya berbeda ketika menambahkan yang kedua vs yang ketiga ke sesuatu itu menjadi lebih rumit (meskipun bruteforce rekursif bekerja) dan saya pikir saya akan tidur selama ini.
2
Sebagai ahli matematika yang tidak tahu php, saya akan menemukan lebih mudah untuk menyerang masalah ini jika itu dalam notasi matematika daripada kode.
2
Pernahkah Anda mendengar tentang kriteria Kelly ? Jika tidak, ada beberapa bacaan di sana untuk Anda.

Jawaban:

2

Saya pikir saya datang dengan solusi bruteforce yang bisa diterapkan, seperti ini:


  • 1) menghitung setiap kemungkinan kombinasi beberapa taruhan yang bisa saya buat

Untuk contoh dan jumlah yang saya berikan dalam pertanyaan saya, ini adalah:

  • 3 tunggal, 0 ganda, 0 tiga kali lipat = setara dengan 1 taruhan tunggal
  • 2 tunggal, 1 ganda, 0 tiga kali lipat = setara dengan 2 taruhan tunggal
  • 2 tunggal, 0 ganda, 1 tiga = sama dengan 3 taruhan tunggal
  • 1 tunggal, 2 ganda, 0 tiga kali lipat = setara dengan 4 taruhan tunggal

  • 2) menghitung standar deviasi peluang simbol untuk setiap pertandingan

             |    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) untuk setiap kombinasi beberapa taruhan ( langkah 1 ) menghitung peringkat menggunakan rumus:

    peringkat = (#n (x) [+ #n (y) [+ #n (z)]]) / stdev (#n)

Di mana #nada kecocokan spesifik dan #n(x|y|z)merupakan peluang simbol yang dipesan.

  • Kecocokan diproses dari penyimpangan standar rendah ke tinggi.
  • Simbol individu dalam setiap pertandingan diproses dari peluang tinggi ke rendah.

Tes untuk taruhan 1 tunggal, 2 ganda, 0 tiga kali lipat:

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

Taruhan ini memberi saya peringkat global 14.89 + 2.48 + 2.12 = 19.49.


Tes untuk taruhan 2 tunggal, 0 ganda, 1 tiga:

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

Yang memberi saya peringkat global 21.28 + 2.24 + 2.12 = 25.64. :-)


Semua taruhan yang tersisa jelas akan lebih rendah sehingga tidak ada gunanya mengujinya.

Metode ini tampaknya bekerja tetapi saya datang dengan cara coba-coba dan mengikuti isi perut saya, saya tidak memiliki pemahaman matematis untuk menilai apakah itu benar atau bahkan jika ada cara yang lebih baik ...

Ada petunjuk?

PS: Maaf untuk pemformatan yang buruk tetapi parser MD tampaknya berbeda dari StackOverflow.

Alix Axel
sumber
Sudahkah Anda mempertimbangkan pemrograman Linear ( en.wikipedia.org/wiki/Linear_programming ) untuk mengatasi masalah ini?
Victor Sorokin
1

Bagaimana dengan membuat solusi berdasarkan Metode Simplex. Karena premis untuk menggunakan metode Simplex tidak terpenuhi kita perlu memodifikasi metode sedikit. Saya menyebut versi yang dimodifikasi "Walk the line".

Metode:

Anda dapat mengukur ketidakpastian setiap pertandingan. Lakukan! Hitung ketidakpastian dari setiap pertandingan dengan taruhan tunggal atau ganda (untuk taruhan triple tidak ada ketidakpastian). Saat menambahkan taruhan ganda atau tripel, selalu pilih yang mengurangi ketidakpastian paling banyak.

  1. Mulai dari jumlah maksimum tiga taruhan. Hitung ketidakpastian total.
  2. Hapus satu taruhan triple. Tambahkan satu atau dua taruhan ganda, jaga di bawah biaya maksimum. Hitung ketidakpastian total.
  3. Ulangi langkah 2 sampai Anda memiliki jumlah taruhan ganda maksimum.

Pilih taruhan dengan ketidakpastian total terendah.

Klas Lindbäck
sumber
0

Apa yang saya dapatkan dari mengamati sportsbets ini saya sampai pada kesimpulan ini.

Nilai yang diharapkan
Mari kita katakan bahwa Anda memiliki 3 taruhan 1.29 5.5 and 10.3(taruhan terakhir dalam tabel) EV untuk taruhan adalah
EV = 1/(1/1.29+1/5.5+1/10.3) - 1 = -0.05132282687714185 jika memegang bahwa probabilitas satu kemenangan atas yang lain didistribusikan sebagai
1/1.29 : 1/5.5 : 1/10.3, maka Anda kehilangan uang Anda dalam jangka panjang karena EV Anda negatif.
Anda hanya dapat untung jika mengetahui probabilitas dari setiap hasil dan mengetahui penyimpangan.

Katakanlah probabilitas yang sebenarnya
0.7 : 0.2 : 0.1

Itu berarti bahwa tarif seharusnya 1.43 \ 5.0 \ 10.0

Anda dapat melihat bahwa dalam kasus ini hadiah terbaik adalah untuk taruhan taruhan karena memberi Anda di
EV(0) = 5.5/5 - 1 = 0.1
mana bertaruh untuk kerugian
EV(2) = 10.2/10 - 1 = 0.02
dan bertaruh untuk kemenangan kandang bahkan EV-
EV(1) = 1.29/1.43 - 1 = -0.10

ralu
sumber
Saya tidak berpikir Anda punya pertanyaan saya. Saya sudah tahu di simbol apa (dan dalam urutan apa dalam kasus taruhan berganda) untuk bertaruh pada setiap pertandingan individu. Masalah saya adalah mencari tahu jumlah ideal taruhan triple dan double yang harus saya mainkan dengan melihat semua pertandingan (dan peluang simbol masing-masing) secara global .
Alix Axel