크고 똑똑한 베팅하기


16

1X2 (가중) 게임에서 베팅을 제안하는 알고리즘을 코딩하려고했습니다.

기본적으로 각 게임에는 경기 세트가 있습니다 (홈팀과 원정팀) :

  • 1: 홈 승
  • X: 무승부
  • 2: 승리

BWin 1X2 도박 게임

각 일치 및 기호 ( 1, X2)에 대해 해당 기호가 올바른 일치 결과 일 가능성을 나타내는 백분율을 지정합니다. 다음은 구조를 나타내는 배열입니다.

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

분명히, 알고리즘은 가능한 한 많은 돈을 베팅 제안에 할당하려고 시도해야합니다 (그렇지 않으면별로 의미가 없습니다). 이것이 까다로워지는 곳입니다 ...

4PHP ( @ 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
);

이 경우 나는 아무 이유없이 더블을 낭비 할 것입니다.

기본적으로, 나는 가장 똑똑하고 가장 큰 내기 만이 아닌 가장 큰 (아마도 어리석은) 내기를 선택할 수 있습니다 .

나는 어떤 종류의 주현절을 얻기를 희망하면서 지금 며칠 동안 벽에 머리를 부딪 쳤습니다.


1) "선"을 그리십시오

기본적으로 나는 특정 값보다 낮은 stdev와의 경기는 트리플이고, stdev와의 경기는 두 배의 베팅이고 나머지는 단일 베팅이라고 말합니다.

물론 이것의 문제는 적절한 특정 경계를 찾는 것입니다. 심지어 "가장 거친"베팅에 대한 완벽한 가치를 발견하더라도 제안 된 베팅을하기에 충분한 돈이 있는지 또는 여전히 더 큰 (또한 똑똑한) 내기를 만들 수 있습니다 ...


2) 무차별

이 질문을 작성하는 동안이 아이디어를 생각해 냈는데 설명 된 맥락에서 완벽하게 이해되지는 않지만 다소 다른 메트릭을 사용하여 작동시킬 수 있다고 생각합니다. 기본적으로,이 프로그램은 내가 (에서 재생할 수있는 돈의 모든 가능한 금액에 대한 베팅 (트리플 및 더블 베팅 #) 제안 만들 수 14(뭔가 내가 위에서 설명한 의사 알고리즘을 적용하고 글로벌 순위 값을 계산하는 내 예제를) 처럼 % of symbols * match stdev-나는 이해가되지 않습니다).

가장 높은 순위를 가진 베팅 (불확실성 포함)이 제안 된 베팅입니다. 이 접근법의 문제점 (아직 이해가되지 않는다는 사실 외에도) 내 프로그램이 작동 할 게임은 3 경기로 제한되지 않으며 해당 경기에 대한 더블 및 트리플 베팅 조합의 수는 실질적으로 더 높다.


나는 우아한 해결책이 있다고 생각하지만 그것을 이해할 수는 없습니다 ...

이 문제를 해결하는 데 도움을 주시면 감사하겠습니다.


내 문제와 관련하여 약간의 혼란이있는 것 같습니다.이 질문과 의견에서 이미이 문제를 해결했지만 적어도 일부에게는 오해가 여전히 우세한 것처럼 보입니다.

특정 경기 (모든 경기) 에 대해 얼마나 많은 트리플, 더블 및 싱글 베팅 을해야하는지 알아야 합니다 . 나는 각 경기를 개별적으로 보면서 어떤 심볼을 재생하고 있는지 이미 알고 있습니다.


4
에서 이상 좋은의 사람들 math.stackexchange.com는 :)를 구현하는 좋은 방법을 제안 차례에 힘이 설명하고있는 문제를 이해하고 더 나은 제공 할 수 있습니다

1
@Lethargy : Pascal Triangle과 Prime Numbers에 관한 질문을 후자가 math.SE로 이전했습니다. 나는 약 15 개의 공감대 (SO와 math.SE)를 매우 빨리 얻었지만 질문은 30 분 안에 닫히고 더 이상 존재하지 않습니다. 나는 그들이 이런 종류의 "단순한"질문을 좋아하지 않는다고 생각합니다.
Alix Axel

2
Maximum number Wins를 최적화하면 실제로 정말 쉬운 것 같습니다. 평균 승리 횟수는 각 단일 인스턴스가 함께 추가 된 승리 확률입니다. 즉, 최대 확률에 단일 베팅을 설정하면 평균 0.4 + 1 + 0.9 = 2.3 게임에서 승리합니다. 따라서 1 베팅을 추가하는 것이 항상 똑같이 비싸다면 해결책은 단순히 승리 확률을 정렬하고 첫 번째 COST 기회를 취하는 것입니다 (이 예제에서는 "최상의"결과를 제공합니다). 무언가에 두 번째 대 세 번째를 추가 할 때 비용이 다르면 더 복잡해 지지만 (bruteforce 재귀 작업) 나는 이것을 잠자고 생각합니다.

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합니다. :-)


나머지 모든 베팅은 분명히 열등하므로 테스트 할 필요가 없습니다.

이 방법 은 효과 가있는 것 같지만 시행 착오를 통해 그 방법을 생각해 냈으며 내 직감을 따라 올바른지 또는 더 나은 방법이 있는지 판단하는 수학적 이해가 부족합니다 ...

어떤 포인터?

추신 : 형식이 잘못되어 죄송하지만 MD 파서는 StackOverflow와 다릅니다.


이 문제를 해결하기 위해 선형 프로그래밍 ( en.wikipedia.org/wiki/Linear_programming )을 고려 했습니까 ?
Victor Sorokin

1

Simplex Method를 기반으로 솔루션을 만드는 것은 어떻습니까? Simplex 메소드 사용에 대한 전제는 이행되지 않았으므로 메소드를 약간 수정해야합니다. 수정 된 버전을 "Walk the line"이라고합니다.

방법:

각 경기의 불확실성을 측정 할 수 있습니다. 해! 싱글 또는 더블 베팅으로 각 경기의 불확실성을 계산하십시오 (트리플 베팅의 경우 불확실성이 없습니다). 더블 또는 트리플 베팅을 추가 할 때는 항상 불확실성을 가장 줄이는 것을 선택하십시오.

  1. 최대 3 배 베팅에서 시작하십시오. 총 불확실성을 계산하십시오.
  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봅시다.
각 결과의 확률이 무엇인지 파악하고 불규칙성을 발견 할 수있는 경우에만 이익을 얻을 수 있습니다.

진정한 확률은
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-
EV(1) = 1.29/1.43 - 1 = -0.10


나는 당신이 내 질문을 가지고 있다고 생각하지 않습니다. 나는 각 개별 경기에 어떤 기호 (및 다중 내기의 경우 어떤 순서로)에 내기를 걸 었는지 이미 알고 있습니다. 내 문제는 전 세계의 모든 경기 (및 해당 심볼 기회)를 보면서 내가해야 할 이상적인 트리플 및 더블 베팅 수를 찾는 것 입니다.
Alix Axel
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.