Đặt cược lớn, thông minh (er)


16

Tôi đã cố gắng viết mã thuật toán để đề xuất đặt cược trong các trò chơi 1X2 (có trọng số).

Về cơ bản, mỗi trận đấu có một bộ trận đấu (đội nhà vs đội khách):

  • 1: thắng nhà
  • X: vẽ tranh
  • 2: chiến thắng trên sân khách

Trò chơi cá cược BWin 1X2

Đối với mỗi trận đấu và biểu tượng ( 1, X2), tôi sẽ chỉ định một tỷ lệ đại diện cho cơ hội / khả năng của biểu tượng đó là kết quả trận đấu chính xác. Đây là một mảng đại diện cho cấu trúc:

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

Tôi cũng tính toán độ lệch chuẩn cho mỗi lần đặt cược (nhận xét trong đoạn trích trên); độ lệch chuẩn cao hơn thể hiện độ chắc chắn cao hơn, trong khi các trận đấu có độ lệch chuẩn thấp nhất chuyển sang mức độ không chắc chắn cao hơn, và, lý tưởng nhất, nên được bao phủ bằng đặt cược gấp đôi hoặc gấp ba, nếu có thể.

Thuật toán giả sau đây sẽ mô tả quy trình công việc tổng thể:

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

Cho đến nay là tốt, nhưng tôi cần nói với thuật toán tôi muốn chi bao nhiêu. Hãy nói rằng một chi phí đặt cược 1bằng bất kỳ loại tiền tệ nào, công thức để tính toán chi phí nhiều lần đặt cược là bao nhiêu:

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

Rõ ràng, thuật toán nên cố gắng phân bổ càng nhiều tiền càng tốt vào đề xuất đặt cược (nó sẽ không có ý nghĩa gì khác), và bây giờ là lúc điều này trở nên khó khăn hơn ...

Hãy nói rằng tôi muốn trả tối đa 4, liệt kê tất cả các bội số có thể có trong 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);

Mang lại đầu ra sau:

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

Vấn đề

Nếu tôi chọn chơi số tiền tối đa có sẵn ( 4) tôi sẽ phải đặt cược với hai lần nhân đôi, nếu tôi sử dụng thuật toán giả mà tôi đã mô tả ở trên, tôi sẽ kết thúc với gợi ý đặt cược sau:

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

Điều này có vẻ không tối ưu khi so sánh với đặt cược ba chi phí 3và không chắc chắn hơn:

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

Ví dụ trên đạt được mức độ liên quan cao hơn nữa nếu bạn cho rằng match #3tỷ lệ cược có thể là:

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

Trong trường hợp này tôi sẽ lãng phí gấp đôi không có lý do chính đáng.

Về cơ bản, tôi chỉ có thể chọn đặt cược lớn nhất (có thể ngu ngốc) và không đặt cược thông minh nhất, lớn nhất .

Tôi đã đập đầu vào tường trong vài ngày nay, hy vọng tôi có được một loại hiển linh nhưng cho đến nay tôi chỉ có thể đưa ra hai giải pháp nửa [xấu-]:


1) Vẽ một "đường"

Về cơ bản tôi sẽ nói rằng các trận đấu có stdev thấp hơn một giá trị cụ thể sẽ là gấp ba, các trận đấu với stdev cao hơn sẽ là cược đôi và các cược đơn còn lại.

Tất nhiên, vấn đề với điều này là tìm ra các ranh giới cụ thể phù hợp - và ngay cả khi tôi tìm thấy các giá trị hoàn hảo cho đặt cược "thông minh nhất", tôi vẫn không biết liệu mình có đủ tiền để chơi cược được đề xuất hay không Tôi có thể đặt cược thậm chí còn lớn hơn (cũng thông minh) ...


2) Bruteforce

Tôi đã nảy ra ý tưởng này trong khi viết câu hỏi này và tôi biết nó sẽ không có ý nghĩa hoàn hảo trong bối cảnh tôi mô tả nhưng tôi nghĩ tôi có thể làm cho nó hoạt động bằng cách sử dụng các số liệu hơi khác nhau. Về cơ bản, tôi có thể làm cho chương trình đề nghị cược (# cược ba và kép) cho mỗi số tiền có thể có của tiền tôi có thể chơi (từ 1để 4trong ví dụ của tôi), áp dụng các giả thuật toán tôi đã mô tả ở trên và tính toán giá trị bảng xếp hạng toàn cầu (một cái gì đó như % of symbols * match stdev- tôi biết, nó không có ý nghĩa gì).

Đặt cược với thứ hạng cao nhất (bao gồm sự không chắc chắn) sẽ là đặt cược được đề xuất. Vấn đề với cách tiếp cận này (bên cạnh thực tế là nó chưa có ý nghĩa gì) là các trò chơi mà chương trình của tôi sẽ hoạt động không giới hạn ở 3 trận đấu và số lần kết hợp đặt cược đôi và ba cho các trận đấu đó sẽ là thực chất cao hơn


Tôi cảm thấy như có một giải pháp tao nhã, nhưng tôi không thể nắm bắt được ...

Bất kỳ trợ giúp bẻ khóa vấn đề này được đánh giá rất cao, cảm ơn.


Dường như có một số nhầm lẫn liên quan đến vấn đề của tôi, tôi đã giải quyết vấn đề này trong câu hỏi này và cả trong các bình luận nhưng việc giải thích sai dường như vẫn chiếm ưu thế, ít nhất là đối với một số người.

Tôi cần biết tôi sẽ chơi bao nhiêu cược ba, đôi và đơn cho một trò chơi cụ thể (tất cả các trận đấu). Tôi đã biết những biểu tượng nào tôi muốn chơi bằng cách xem từng trận đấu.


4
Những người giỏi ở math.stackexchange.com có thể hiểu rõ hơn về vấn đề bạn đang mô tả, từ đó có thể gợi ý những cách tốt để thực hiện nó :)

1
@Lethargy: Có lần tôi đã đăng một câu hỏi ở đây về Tam giác Pascal và các số nguyên tố mà sau đó đã được chuyển sang math.SE. Tôi đã nhận được khoảng 15 lượt upvote (cả ở SO và math.SE) rất nhanh nhưng câu hỏi đã được đóng lại sau chưa đầy 30 phút và nó thậm chí không còn tồn tại nữa. Tôi không nghĩ họ thích những câu hỏi "đơn giản" như vậy.
Alix Axel

2
Nếu chúng ta tối ưu hóa cho Số lượng tối đa Thắng thì điều này có vẻ thực sự dễ dàng. Số lần thắng trung bình chỉ đơn giản là cơ hội chiến thắng của từng trường hợp được cộng lại. Tức là nếu chúng ta đặt cược một lần vào cơ hội tối đa, chúng ta sẽ thắng trung bình 0,4 + 1 + 0,9 = 2,3 trận. Vì vậy, nếu thêm 1 cược luôn đắt như nhau, giải pháp đơn giản là sắp xếp các cơ hội thắng và lấy các cơ hội CHI PHÍ đầu tiên (ví dụ này cho kết quả "tốt nhất"). Nếu chi phí là khác nhau khi thêm một giây so với thứ ba vào một cái gì đó thì nó sẽ phức tạp hơn (mặc dù công việc đệ quy bruteforce) và tôi nghĩ rằng tôi sẽ ngủ cái này hơn.

2
Là một nhà toán học không biết php, tôi sẽ thấy việc tấn công vấn đề này dễ dàng hơn nhiều nếu nó nằm trong ký hiệu toán học hơn là mã.

2
Bạn đã nghe nói về tiêu chí Kelly ? Nếu không, có một số đọc ngay cho bạn.

Câu trả lời:


2

Tôi nghĩ rằng tôi đã đưa ra một giải pháp bruteforce hoàn toàn khả thi, nó diễn ra như sau:


  • 1) tính toán mọi sự kết hợp có thể có của nhiều cược tôi có thể thực hiện

Đối với ví dụ và số tiền tôi cung cấp trong câu hỏi của mình, đây sẽ là:

  • 3 đơn, 0 đôi, 0 ba = tương đương với 1 lần đặt cược
  • 2 đơn, 1 đôi, 0 ba = tương đương với 2 cược đơn
  • 2 đơn, 0 đôi, 1 ba = tương đương với 3 cược đơn
  • 1 đơn, 2 đôi, 0 ba = tương đương với 4 cược đơn

  • 2) tính độ lệch chuẩn của tỷ lệ cược biểu tượng cho mỗi trận đấu

             |    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) cho mỗi kết hợp đặt cược nhiều lần ( bước 1 ) tính toán xếp hạng bằng công thức:

    xếp hạng = (#n (x) [+ #n (y) [+ #n (z)]]) / stdev (#n)

Ở đâu #n là một trận đấu cụ thể và #n(x|y|z)là tỷ lệ cược theo thứ tự của các biểu tượng.

  • Các trận đấu được xử lý từ độ lệch chuẩn thấp đến cao.
  • Các biểu tượng riêng lẻ trong mỗi trận đấu được xử lý từ tỷ lệ cược cao đến thấp.

Kiểm tra đặt cược 1 đơn, 2 đôi, 0 ba lầ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

Đặt cược này mang lại cho tôi thứ hạng toàn cầu về 14.89 + 2.48 + 2.12 = 19.49 .


Kiểm tra đặt cược 2 đơn, 0 đôi, 1 ba lần:

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

Mà cho tôi một bảng xếp hạng toàn cầu 21.28 + 2.24 + 2.12 = 25.64.:-)


Tất cả các cược còn lại rõ ràng sẽ kém hơn vì vậy không có điểm nào trong việc kiểm tra chúng.

Phương pháp này có vẻ hiệu quả nhưng tôi đã đưa ra nó thông qua thử và sai và theo ruột của tôi, tôi thiếu hiểu biết toán học để đánh giá liệu nó có đúng hay không, ngay cả khi có cách nào tốt hơn ...

Bất kỳ con trỏ?

PS: Xin lỗi vì định dạng xấu nhưng trình phân tích cú pháp MD dường như khác với StackOverflow.


Bạn đã xem xét lập trình tuyến tính ( en.wikipedia.org/wiki/Linear_programming ) để giải quyết vấn đề này chưa?
Victor Sorokin

1

Làm thế nào về việc thực hiện một giải pháp dựa trên Phương pháp Simplex. Vì tiền đề cho việc sử dụng phương thức Simplex không được đáp ứng, chúng ta cần sửa đổi phương thức một chút. Tôi gọi phiên bản sửa đổi là "Walk the line".

Phương pháp:

Bạn có thể đo lường sự không chắc chắn của mỗi trận đấu. Làm đi! Tính độ không chắc chắn của mỗi trận đấu với đặt cược đơn hoặc đôi (đối với đặt cược ba không có sự không chắc chắn). Khi thêm tiền cược gấp đôi hoặc gấp ba, luôn chọn tỷ lệ cược không chắc chắn nhất.

  1. Bắt đầu với số lượng cược ba lần tối đa. Tính tổng độ không đảm bảo.
  2. Hủy bỏ một cược ba. Thêm một hoặc hai cược đôi, giữ chi phí tối đa. Tính tổng độ không đảm bảo.
  3. Lặp lại bước 2 cho đến khi bạn có số lần đặt cược tối đa.

Chọn cược với tổng độ không chắc chắn thấp nhất.


0

Những gì tôi đến từ việc quan sát các cược thể thao này tôi đã đi đến kết luận này.

Giá trị kỳ vọng
Hãy nói rằng bạn có 3 lần đặt cược trắng 1.29 5.5 and 10.3(lần đặt cược cuối cùng trong bảng) EV cho cá cược là
EV = 1/(1/1.29+1/5.5+1/10.3) - 1 = -0.05132282687714185 nếu xác suất mà một người chiến thắng người khác được phân phối là
1/1.29 : 1/5.5 : 1/10.3, thì bạn sẽ mất tiền trong thời gian dài vì EV của bạn âm.
Bạn chỉ có thể thu lợi nếu bạn có thể tìm ra xác suất của từng kết quả và tìm ra những bất thường.

Hãy nói rằng xác suất thực sự là
0.7 : 0.2 : 0.1

Điều đó có nghĩa là tỷ lệ nên 1.43 \ 5.0 \ 10.0

Bạn có thể thấy rằng trong trường hợp này, tỷ lệ hoàn trả tốt nhất là cho cá cược rút thăm vì nó mang lại cho bạn
EV(0) = 5.5/5 - 1 = 0.1
nơi đặt cược thua lỗ
EV(2) = 10.2/10 - 1 = 0.02
và đặt cược cho chiến thắng trên sân nhà thậm chí là EV-
EV(1) = 1.29/1.43 - 1 = -0.10


Tôi không nghĩ rằng bạn có câu hỏi của tôi. Tôi đã biết những ký hiệu nào (và theo thứ tự nào trong trường hợp đặt cược nhiều lần) để đặt cược cho mỗi trận đấu riêng lẻ. Vấn đề của tôi là tìm ra số lần đặt cược ba và hai lần lý tưởng mà tôi nên chơi bằng cách xem tất cả các trận đấu (và cơ hội biểu tượng tương ứng của họ) trên toàn cầu .
Alix Axel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.