การเดิมพันที่ยิ่งใหญ่และชาญฉลาด


16

ฉันพยายามเขียนรหัสอัลกอริทึมเพื่อแนะนำการเดิมพันในเกม 1X2 (น้ำหนัก)

โดยพื้นฐานแล้วแต่ละเกมมีชุดการแข่งขัน (ทีมเจ้าบ้าน vs ทีมเยือน):

  • 1: เจ้าบ้านชนะ
  • X: วาด
  • 2: ทีมเยือนชนะ

เกมการพนัน BWin 1X2

สำหรับการแข่งขันแต่ละครั้งและสัญลักษณ์ ( 1, Xและ2) ฉันจะกำหนดอัตราร้อยละที่แสดงถึงโอกาส / ความน่าจะเป็นสัญลักษณ์ว่าเป็นผลการแข่งขันที่ถูกต้อง นี่คืออาร์เรย์ที่แสดงถึงโครงสร้าง:

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

ฉันยังคำนวณค่าเบี่ยงเบนมาตรฐานสำหรับแต่ละการเดิมพัน (แสดงความคิดเห็นในตัวอย่างด้านบน) ค่าเบี่ยงเบนมาตรฐานที่สูงกว่าแสดงถึงความมั่นใจที่สูงกว่าในขณะที่การแข่งขันที่มีค่าเบี่ยงเบนมาตรฐานต่ำที่สุดจะแปลความไม่แน่นอนในระดับที่สูงขึ้นและหากเป็นไปได้ควรมีการเดิมพันสองหรือสามเท่า

อัลกอริทึมหลอกต่อไปนี้ควรอธิบายเวิร์กโฟลว์โดยรวม:

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

จนถึงตอนนี้ดีมาก แต่ฉันต้องบอกอัลกอริทึมว่าฉันต้องการใช้จ่ายเท่าไร ให้บอกว่าการเดิมพันครั้งเดียวมีค่าใช้จ่าย1ในทุกสกุลเงินสูตรในการคำนวณค่าใช้จ่ายการเดิมพันหลายรายการคือ:

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

เห็นได้ชัดว่าอัลกอริทึมควรพยายามจัดสรรเงินให้ได้มากที่สุดเท่าที่เป็นไปได้ในคำแนะนำการเดิมพัน (มันไม่สมเหตุสมผลอย่างอื่น) และตอนนี้เป็นที่ที่จะได้รับเล่ห์เหลี่ยม ...

ให้บอกว่าฉันต้องการจ่ายสูงสุด4รายการทั้งหมดที่เป็นไปได้ใน 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);

ให้ผลลัพธ์ต่อไปนี้:

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

ปัญหา

ถ้าฉันเลือกที่จะเล่นจำนวนเงินสูงสุดที่มีอยู่ ( 4) ฉันจะต้องเดิมพันด้วยสองคู่ถ้าฉันใช้อัลกอริทึมหลอกฉันอธิบายไว้ข้างต้นฉันจะจบลงด้วยคำแนะนำเดิมพันต่อไปนี้:

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

ซึ่งดูเหมือนว่าจะดีที่สุดเมื่อเทียบกับการเดิมพันสามเท่าที่มีค่าใช้จ่าย3และครอบคลุมความไม่แน่นอนมากขึ้น:

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

ตัวอย่างข้างต้นจะได้รับความเกี่ยวข้องมากยิ่งขึ้นหากคุณพิจารณาว่าmatch #3อัตราต่อรองอาจเป็น:

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

ในกรณีนี้ฉันจะสูญเสียสองครั้งโดยไม่มีเหตุผลที่ดี

โดยทั่วไปก็สามารถเลือกที่ใหญ่ที่สุด (อาจจะโง่) เดิมพันและไม่ฉลาดเดิมพันที่ยิ่งใหญ่ที่สุด

ฉันตีหัวของฉันกับกำแพงเป็นเวลาหลายวันแล้วหวังว่าฉันจะได้รับ epiphany บางชนิด แต่จนถึงตอนนี้ฉันก็สามารถคิดวิธีแก้ปัญหาสองแบบครึ่งหนึ่ง [ไม่ดี]:


1) วาด "เส้น"

โดยทั่วไปฉันจะบอกว่าการจับคู่กับ stdev ต่ำกว่าค่าที่ระบุจะเป็นสามเท่าการจับคู่กับ stdev ที่สูงกว่ามากจะเป็นการเดิมพันสองครั้งและการเดิมพันเดี่ยวที่เหลือ

แน่นอนปัญหานี้คือการหาขอบเขตที่เหมาะสม - และแม้ว่าฉันจะพบค่าที่สมบูรณ์แบบสำหรับการเดิมพัน "ฉลาดที่สุด" ฉันยังไม่รู้ว่าฉันมีเงินเพียงพอที่จะเล่นเดิมพันที่แนะนำหรือไม่ ฉันสามารถเดิมพันที่ยิ่งใหญ่กว่า (ยังฉลาด) ...


2) Bruteforce

ฉันคิดด้วยความคิดนี้ในขณะที่เขียนคำถามนี้และฉันรู้ว่ามันจะไม่สมเหตุสมผลในบริบทที่ฉันอธิบาย แต่ฉันคิดว่าฉันสามารถทำให้มันทำงานโดยใช้ตัวชี้วัดที่แตกต่างกันบ้าง โดยทั่วไปฉันจะทำให้โปรแกรมแนะนำการเดิมพัน (# ของการเดิมพันที่สามและคู่) สำหรับทุกจำนวนเงินที่เป็นไปได้ของเงินฉันสามารถเล่น (จาก1ไป4ในตัวอย่างของฉัน) ใช้หลอกอัลกอริทึมที่ผมอธิบายไว้ข้างต้นและการคำนวณมูลค่าการจัดอันดับโลก (บางสิ่งบางอย่าง ชอบ% of symbols * match stdev- ฉันรู้ว่ามันไม่สมเหตุสมผล)

การเดิมพันที่มีอันดับสูงสุด (ครอบคลุมความไม่แน่นอน) จะเป็นการเดิมพันที่แนะนำ ปัญหาเกี่ยวกับวิธีการนี้ (นอกเหนือจากความจริงที่ว่ามันยังไม่สมเหตุสมผล) คือเกมที่โปรแกรมของฉันจะทำงานด้วยไม่ จำกัด การแข่งขัน 3 ครั้งและจำนวนชุดการเดิมพันสองและสามครั้งสำหรับการแข่งขันเหล่านั้นจะเป็น สูงขึ้นอย่างมาก


ฉันรู้สึกว่ามีวิธีการแก้ปัญหาที่สง่างาม แต่ฉันก็ไม่สามารถเข้าใจมัน ...

ความช่วยเหลือใด ๆ ที่ถอดรหัสปัญหานี้ได้รับการชื่นชมอย่างมากขอบคุณ


ดูเหมือนจะมีความสับสนเกี่ยวกับปัญหาของฉันฉันได้รับการแก้ไขแล้วในคำถามนี้และในความคิดเห็น แต่การตีความที่ผิดยังดูเหมือนว่าจะเหนือกว่าอย่างน้อยกับบางคน

ฉันต้องรู้ว่าฉันจะเล่นการเดิมพันสามเท่าสองเท่าและซิงเกิลสำหรับเกมใดเกมหนึ่ง (ทุกแมตช์) ฉันรู้แล้วว่าฉันต้องการเล่นสัญลักษณ์ใดโดยดูที่การแข่งขันแต่ละรายการ


4
คนดีมากกว่าที่math.stackexchange.comอาจจะสามารถให้ความเข้าใจที่ดีขึ้นในการแก้ไขปัญหาที่คุณอธิบายซึ่งอาจหันแนะนำวิธีที่ดีที่จะใช้มัน :)

1
@ Lethargy: ฉันเคยโพสต์คำถามที่นี่เกี่ยวกับ Pascal Triangle และ Prime Numbers ซึ่งต่อมาได้ถูกย้ายไปยังคณิตศาสตร์ ฉันได้รับ upvotes ประมาณ 15 รายการ (ทั้งที่ SO และ math.SE) อย่างรวดเร็ว แต่คำถามนั้นถูกปิดในเวลาน้อยกว่า 30 นาทีและมันก็ไม่มีอยู่อีกต่อไป ฉันไม่คิดว่าพวกเขาชอบคำถาม "เรียบง่าย" แบบนี้มากนัก
Alix Axel

2
หากเราปรับให้เหมาะสมสำหรับจำนวนที่มากที่สุดการชนะนี่เป็นเรื่องง่ายจริงๆ จำนวนชัยชนะโดยเฉลี่ยเป็นเพียงโอกาสชนะของแต่ละอินสแตนซ์เดียวที่รวมเข้าด้วยกัน คือถ้าเราวางเดิมพันครั้งเดียวในโอกาสสูงสุดที่เราจะชนะโดยเฉลี่ย 0.4 + 1 + 0.9 = 2.3 เกม ดังนั้นหากการเพิ่ม 1 เดิมพันมีราคาแพงเท่ากันเสมอวิธีแก้ปัญหาก็คือการเรียงลำดับโอกาสในการชนะและรับโอกาสในการคิดต้นทุนครั้งแรก หากค่าใช้จ่ายแตกต่างกันเมื่อเพิ่มที่สองกับสามในสิ่งที่มันจะซับซ้อนมากขึ้น (แม้ว่า recursive งานซ้ำ) และฉันคิดว่าฉันจะนอนนี้

2
ในฐานะนักคณิตศาสตร์ที่ไม่รู้จัก php ฉันจะพบว่ามันง่ายกว่ามากที่จะโจมตีปัญหานี้หากอยู่ในรูปแบบทางคณิตศาสตร์แทนที่จะเป็นรหัส

2
คุณเคยได้ยินเกี่ยวกับเกณฑ์ของเคลลี่บ้างไหม? ถ้าไม่มีบางอย่างที่นั่นสำหรับคุณ

คำตอบ:


2

ฉันคิดว่าฉันคิดวิธีแก้ปัญหาแบบ bruteforce ที่ใช้การได้มันเป็นแบบนี้:


  • 1)คำนวณการผสมผสานที่เป็นไปได้ของการเดิมพันหลายครั้งที่ฉันสามารถทำได้

สำหรับตัวอย่างและจำนวนเงินที่ฉันให้ไว้ในคำถามของฉันนี่จะเป็น:

  • 3 เดี่ยว 0 คู่ 0 สาม = เท่ากับ 1 เดิมพันเดียว
  • 2 เดี่ยว 1 คู่ 0 สาม = เท่ากับ 2 เดิมพันเดี่ยว
  • 2 เดี่ยว 0 คู่ 1 สาม = เทียบเท่ากับ 3 เดิมพันเดี่ยว
  • 1 เดี่ยว 2 คู่ 0 สาม = เท่ากับ 4 เดิมพันเดี่ยว

  • 2)คำนวณค่าเบี่ยงเบนมาตรฐานของอัตราต่อรองสัญลักษณ์สำหรับการแข่งขันทุกครั้ง

             |    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)สำหรับทุก ๆ การเดิมพันรวมกัน ( ขั้นตอนที่ 1 ) คำนวณอันดับโดยใช้สูตร:

    อันดับ = (#n (x) [+ #n (y) [+ #n (z)]]) / stdev (#n)

ไหน#nจะตรงกับที่เฉพาะเจาะจงและ#n(x|y|z)เป็นอัตราต่อรองที่ได้รับคำสั่งของสัญลักษณ์

  • การแข่งขันจะดำเนินการจากความเบี่ยงเบนมาตรฐานต่ำไปสูง
  • สัญลักษณ์ส่วนบุคคลในการแข่งขันแต่ละครั้งจะดำเนินการจากอัตราเดิมพันสูงถึงต่ำ

ทดสอบการเดิมพันเดี่ยว 1, 2 และ 0

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

14.89 + 2.48 + 2.12 = 19.49เดิมพันนี้ทำให้ผมมีการจัดอันดับโลกของ


ทดสอบ 2 เดี่ยว 0 คู่ 1 เดิมพันสาม:

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

21.28 + 2.24 + 2.12 = 25.64ซึ่งจะช่วยให้ผมจัดอันดับโลกของ :-)


การเดิมพันที่เหลือทั้งหมดจะด้อยกว่าอย่างชัดเจนดังนั้นจึงไม่มีประเด็นในการทดสอบ

ดูเหมือนว่าวิธีนี้จะใช้ได้ แต่ฉันมาพร้อมกับมันผ่านการลองผิดลองถูกและหลังจากที่ท้องของฉันฉันขาดความเข้าใจทางคณิตศาสตร์เพื่อตัดสินว่ามันถูกต้องหรือแม้ว่าจะมีวิธีที่ดีกว่า ...

ตัวชี้ใด ๆ

PS:ขออภัยสำหรับการจัดรูปแบบที่ไม่ถูกต้อง แต่ MD parser ดูเหมือนจะแตกต่างจาก StackOverflow


คุณได้พิจารณาการเขียนโปรแกรมเชิงเส้น ( en.wikipedia.org/wiki/Linear_programming ) เพื่อแก้ปัญหานี้หรือไม่
Victor Sorokin

1

วิธีการเกี่ยวกับการแก้ปัญหาตามวิธี Simplex เนื่องจากสถานที่ตั้งสำหรับการใช้วิธี Simplex ไม่เป็นจริงเราจึงจำเป็นต้องแก้ไขวิธีนี้เล็กน้อย ฉันเรียกรุ่นที่แก้ไขแล้ว "Walk the line"

วิธี:

คุณสามารถวัดความไม่แน่นอนของการแข่งขันแต่ละครั้ง ทำมัน! คำนวณความไม่แน่นอนของการแข่งขันแต่ละรายการด้วยการเดิมพันแบบเดี่ยวหรือแบบคู่ (สำหรับการเดิมพันแบบสามครั้งจะไม่มีความไม่แน่นอน) เมื่อเพิ่มการเดิมพันสองหรือสามเท่าให้เลือกเดิมพันที่ลดความไม่แน่นอนมากที่สุดเสมอ

  1. เริ่มที่จำนวนการเดิมพันสามเท่าสูงสุด คำนวณความไม่แน่นอนทั้งหมด
  2. ลบหนึ่งเดิมพันสาม เพิ่มหนึ่งหรือสองการเดิมพันสองเท่าโดยรักษาภายใต้ราคาสูงสุด คำนวณความไม่แน่นอนทั้งหมด
  3. ทำซ้ำขั้นตอนที่ 2 จนกว่าคุณจะมีจำนวนการเดิมพันมากสุด

เลือกการเดิมพันที่มีความไม่แน่นอนรวมต่ำสุด


0

สิ่งที่ฉันมาจากการสังเกตการเดิมพันกีฬานี้ฉันมาถึงข้อสรุปนี้

มูลค่าที่คาดหวัง
ให้บอกว่าคุณมี 3 เดิมพันเล็กน้อย1.29 5.5 and 10.3(เดิมพันสุดท้ายในตาราง) EV สำหรับการเดิมพันคือ
EV = 1/(1/1.29+1/5.5+1/10.3) - 1 = -0.05132282687714185 หากมีความเป็นไปได้ที่จะมีการแจกแจงความน่าจะเป็น
1/1.29 : 1/5.5 : 1/10.3ซึ่งคุณจะเสียเงินในระยะยาวเนื่องจาก EV ของคุณติดลบ
คุณสามารถทำกำไรได้ก็ต่อเมื่อคุณสามารถค้นหาความน่าจะเป็นของผลลัพธ์แต่ละรายการและค้นหาความผิดปกติ

ให้บอกว่าความน่าจะเป็นที่แท้จริงคือ
0.7 : 0.2 : 0.1

นั่นหมายความว่าอัตราควรจะเป็น 1.43 \ 5.0 \ 10.0

คุณสามารถเห็นได้ว่าในกรณีนี้การจ่ายผลตอบแทนที่ดีที่สุดสำหรับการเดิมพันการจับสลากเนื่องจากมันจะช่วยให้คุณสามารถ
EV(0) = 5.5/5 - 1 = 0.1
วางเดิมพันการสูญเสีย
EV(2) = 10.2/10 - 1 = 0.02
ได้
EV(1) = 1.29/1.43 - 1 = -0.10


ฉันไม่คิดว่าคุณจะได้รับคำถามของฉัน ฉันรู้แล้วว่ามีสัญลักษณ์อะไร (และเรียงตามลำดับในกรณีที่มีการเดิมพันหลายแบบ) เพื่อเดิมพันในการแข่งขันแต่ละนัด ปัญหาของฉันคือการหาจำนวนที่เหมาะของการเดิมพันที่สามและดับเบิลผมควรจะเล่นโดยดูที่การแข่งขันทั้งหมด (และโอกาสสัญลักษณ์ของตน)ทั่วโลก
Alix Axel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.