매직 머니 트리 문제


19

나는 샤워 에서이 문제를 생각했는데 투자 전략에서 영감을 얻었습니다.

매직 머니 트리가 있다고 가정 해 봅시다. 매일 머니 트리에 일정량의 돈을 제공 할 수 있으며, 머니 트리에 3 배의 돈을 주거나 50/50 확률로 파기합니다. 당신은 평균적으로 당신이 이것을함으로써 돈을 벌고 돈 나무를 이용하기를 열망한다는 것을 즉시 알 수 있습니다. 그러나 한 번에 모든 돈을 제공하면 50 %의 돈을 잃게됩니다. 용납 할 수 없습니다! 당신은 위험을 회피하는 사람이므로 전략을 세우기로 결정합니다. 모든 것을 잃을 가능성을 최소화하고 싶지만 가능한 한 많은 돈을 벌고 싶습니다! 당신은 다음을 생각해냅니다 : 매일, 현재 자본의 20 %를 머니 트리에 제공합니다. 당신이 제공 할 수있는 최저 금액이 1 센트라고 가정하면, 10 달러로 시작하면 모든 돈을 잃는 데 31 손실이 필요합니다. 또 뭔데, 현금이 많을수록 잃어버린 행진이 길어질수록 모든 것을 잃을 수 있습니다. 당신은 빨리 많은 돈을 벌기 시작합니다. 하지만 아이디어가 떠 오릅니다. 매일 30 % 만 제공하면 더 많은 돈을 벌 수 있습니다! 그러나 35 %를 제공하지 않는 이유는 무엇입니까? 50 %? 언젠가 눈에 큰 달러 기호가 있으면 수백만의 돈으로 머니 트리까지 달려가 현금의 100 %를 제공하여 머니 트리가 즉시 타게됩니다. 다음날 맥도날드에서 일자리를 얻습니다. 머니 트리가 즉시 타 버립니다. 다음날 맥도날드에서 일자리를 얻습니다. 머니 트리가 즉시 타 버립니다. 다음날 맥도날드에서 일자리를 얻습니다.

현금을 모두 잃지 않고 제공 할 수있는 최적의 현금 비율이 있습니까?

(하위) 질문 :

제공해야 할 최적의 비율이 있다면,이 정적 (매일 20 %)입니까, 아니면 자본이 증가함에 따라 비율이 증가해야합니까?

매일 20 %를 제공함으로써 시간이 지남에 따라 모든 돈을 잃을 가능성이 줄어 듭니까? 모든 돈을 잃을 확률이 시간이 지남에 따라 증가하는 비율이 있습니까?


7
이것은 도박꾼의 파멸에 대한 변형처럼 보입니다
Robert Long

2
이 질문의 대부분은 분수 센트가 가능한지에 달려 있습니다. 또한이 상황에서 누군가가 가질 수있는 많은 목표가 있습니다. 목표가 다르면 최적의 전략이 달라집니다.
Buge

답변:


19

이것은 잘 알려진 문제입니다. 켈리 베팅이라고합니다. 그런데 대답은 1/3입니다. 부의 로그 유틸리티를 최대화하는 것과 같습니다.

켈리는 무한대로 시간을내어 뒤로 풀기 시작했습니다. 연속 컴 파운딩의 관점에서 항상 수익을 표현할 수 있기 때문에 프로세스를 되돌리고 로그로 표현할 수도 있습니다. 로그 유틸리티 설명을 사용하려고하지만 로그 유틸리티는 편리합니다. 부를 로 최대화 하면 로그 유틸리티와 동일한 기능을 수행하게됩니다. 경우 지불금 확률이고, 승리의 확률이고, 투자 자산의 비율이며, 다음 유도 작동합니다.nbpX

이진 베팅의 경우, 단일 기간 및 단위 자산에 대해 입니다.E(log(X))=plog(1+bX)+(1p)log(1X)

ddXE[log(x)]=ddX[plog(1+bX)+(1p)log(1X)]
=pb1+bX1p1X

극한값을 찾기 위해 미분 값을 0으로 설정

pb1+bX1p1X=0

교차 곱하기,

pb(1X)(1p)(1+bX)=0
pbpbX1bX+p+pbX=0
bX=pb1+p
X=bp(1p)b

귀하의 경우,

X=3×12(112)3=13.

공동 확률 분포를 통해 예상되는 부의 유용성을 해결하고 할당을 선택하고 제약 조건을 적용함으로써이를 여러 개의 연속적인 결과로 쉽게 확장 할 수 있습니다. 흥미롭게도, 모기지 지불을 충족시키는 능력 등과 같은 제약 조건을 포함하여 이러한 방식으로 수행하는 경우 총 위험 세트를 설명하여 위험 조정 또는 적어도 위험 제어 해결책.

Desiderata 원래 연구의 실제 목적은 시끄러운 신호를 기준으로 얼마나 많은 도박을 할 것인지와 관련이있었습니다. 특정 경우에, 소음이 많은 전자 신호에서 얼마나 많은 돈을 소비해야하는지, 소련이 핵무기 발사를 지시했다. 미국과 러시아는 거의 실수로 여러 차례 발사 한 적이있다. 신호로 얼마나 도박을합니까?


가는 더 높은 위험을 줄 것이 전략은 내가 낮은 분수에 비해 생각 파산
probabilityislogic

@probabilityislogic 동전이 존재하는 경우에만. 별개의 경우에는 마지막 페니에 베팅 할 수 있기 때문에 사실이됩니다. 당신은 페니의 3 분의 1을 베팅 할 수 없었습니다. 불연속 세계에서, 파산 가능성은 지불 사례와 상관없이 할당 크기가 증가해야한다는 것이 본질적으로 사실입니다. 2 % 할당은 이산 세계에서 1 %보다 파산 가능성이 더 높습니다.
데이브 해리스

@probabilityislogic 당신이 3 센트로 시작하면 위험합니다. $ 550로 시작하면 1024에서 파산 할 확률이 한 번도 안됩니다. 합리적인 냄비 크기의 경우, 실제로 무한대로 가지 않는 한 불연속 붕괴의 위험이 줄어들고, 대출이 허용되지 않는 한 확실성이됩니다.
데이브 해리스

나는 이것이 알려진 문제 일 것으로 예상했지만 그것을 찾는 방법에 대한 실마리는 없었습니다. Kelly에 대해 언급 해 주셔서 감사합니다. 질문 : 켈리 기준에 대한 위키 백과는 최적의 백분율을 계산하기 위해 다음 공식을 언급합니다 : (bp-q) / b. 여기서 b는 1 달러에 베팅 한 $ 달러, p는 이길 확률, q는 잃을 확률입니다 시나리오에이 내용을 입력하면 (2 * 0.5-0.5) /2=0.25가 표시됩니다. 내기하는 최적의 백분율은 25 %입니다. 1/3의 답으로이 불일치를 일으키는 원인은 무엇입니까?
ElectronicToothpick

3
b = 3을 채우면 @ElectronicToothpick은 1/3이됩니다. 차이점은 세 번의 지불금을 어떻게 고려하는지에 있습니다. 1 달러로 시작하고 50 센트를 베팅했다고 가정하면 트리플 페이 아웃은 50 50 센트 또는 2 달러 (b = 2, 즉 빼기 50 센트 또는 2 배 50 센트)로 끝나는 것으로 간주합니다. 50 센트 또는 2.50 달러 (b = 3, 즉 마이너스 50 센트 또는 3 배 50 센트).
Sextus Empiricus

5

Dave harris의 답변이 마음에 들었습니다. 내가 이익을 극대화하기보다는 "위험이 낮은"관점에서 문제를 겪을지라도

당신이하고있는 랜덤 워크 (random walk), 당신의 분수 내기를 가정 것은 와 승리의 확률 로 주어진다있다 곳 . 평균적으로 당신은 이것을 기대치와 또한 시간의 양을 나타낼 수 한 확률 변수의 함수로서 이지만 가 독립적이지 점에qp=0.5

Yt|Yt1=(1q+3qXt)Yt1
XtBernoulli(p)
E(Yt|Yt1)=(1q+3pq)Yt1
Yt|Y0=Y0j=1t(1q+3qXt)
E(Yt|Y0)=(1q+3pq)tY0
tZt=j=1tXtBinomial(t,p)ZtZt1
Yt|Y0=Y0(1+2q)Zt(1q)tZt

가능한 전략

이 공식을 사용하여 대한 "낮은 위험"값을 결정할 수 있습니다 . 연속 손실 후에도 여전히 원래 재산의 절반 을 확보하고 싶다고 가정 해보십시오. 그런 다음qkq=12k1

예시적인 복용 수단 우리 집합 하거나와 우리 세트 .k=5q=0.129k=15q=0.045

또한 전략의 재귀 특성으로 인해이 위험은 매번 베팅 할 때마다 취하는 것입니다. 즉, 에서 계속 플레이함으로써 귀하의 자산이 최소 가되도록 보장합니다sk+s0.5Ys

토론

위의 전략은 승리의 보상에 의존하는 것이 아니라 패배에 대한 경계를 설정하는 것에 달려 있습니다. 우리는 계산 된 의 값 과 위험을 염두에두고 사용 된 의 값을 대입하여 예상되는 상금을 얻을 수 있습니다 .qk

그러나 시간 에서 예상되는 보수보다 중간 값을 보는 것이 흥미 롭습니다 . 이는 를 가정하여 찾을 수 있습니다 . 때 비율은 입니다. 이것은 때 최대화 되고 때 보다 큽니다.tmedian(Zt)tp

Yk|Y0=Y0(1+2q)tp(1q)t(1p)
p=0.5(1+q2q2)0.5tq=0.251q<0.5

시간 앞서있을 확률을 계산하는 것도 흥미 롭습니다 . 이렇게 우리는 가치 결정해야 되도록 일부 우리 승의 비율이 만족한다는 것을 발견 정리하고 이것은 대략적인 근사치에 연결될 수 있습니다 (참고 : 평균 , 표준 오차 )를 tz

(1+2q)z(1q)tz>1
zt>log(1q)log(1q)log(1+2q)
0.50.5t
Pr(ahead at time t)Φ(tlog(1+2q)+log(1q)[log(1+2q)log(1q)])

게임에 매우 좋은 확률이 있음을 분명히 보여줍니다. 승산 계수 때 최소화 (최대 값의 와)는 단조 함수로서 감소 . "낮은 위험"전략은 재산의 아주 작은 부분을 베팅하고 많은 횟수를하는 것입니다.tq=013q

이것을 및 과 비교한다고 가정하십시오 . 각 경우에 대한 계수는 및 입니다. 이것은 경기 이후 에 작은 내기보다 약 95 %의 확률로 앞서고 큰 내기에서는 75 %의 가능성으로 나옵니다. 또한, 가장 가까운 5 센트 또는 달러로 지분을 반올림해야한다고 가정하면 더 큰 베팅을 할 수 있습니다. 부터는 될 수 있습니다. 이것은 개 중 손실 의 시퀀스이며 , 게임이 예상 할 경우q=13q=11000.110.32382013.35,8.90,5.95,3.95,2.65,1.75,1.15,0.75,0.50,0.35,0.25,0.15,0.1,0.05,0143819손실, 만약 당신이 처음 몇 개의 베팅으로 운이 없다면,이기는 것조차도 나쁜 행진을 보충하지 못할 수도 있습니다 (예를 들어, 대부분의 부가 사라지면 대부분의 승리가 발생하는 경우). 경기 에서는 1 %의 작은 지분으로 파산 할 수 없습니다 . 반대로 작은 지분은 평균적으로 훨씬 적은 이익을 낳을 것 입니다. 작은 내기의 증가에 비해 큰 내기 의 배 증가와 같은 것입니다 (즉, 작은 것으로 38 라운드 후 24 달러를 가질 것으로 예상 함) 큰 내기를 가진 내기 및 7000 달러).383501.2


당신이 생각한다면 그것이 위험이 낮은 방식으로 선택되고 우리가 그것을 계산하지 않는 ,이 나쁘지 근사하지 않습니다. 따라서 큰 베팅 전략으로 인한 이익을 과대 평가하고있을 것입니다. t > > Kqt>>k
확률 론적

의 중앙값을 최대화하는 방법 은 실제로 의 평균을 최대화하는 Dave Harris의 방법과 동일합니다 ( 의 중앙값과 ). 로그 정규 분포이고 평균과 중앙값이 동일하지 않은 의 평균을 최대화 할 때 달라 집니다. Z t Z t Y tZtZtZtYt
Sextus Empiricus

5

나는 이것이 Martingale과 크게 다르다고 생각하지 않습니다. 귀하의 경우 배가되는 배팅은 없지만 배당금은 3 배입니다.

나는 당신의 나무의 "살아있는 복제물"을 코딩했습니다. 10 번의 시뮬레이션을 실행합니다. 각 시뮬레이션 (추적)에서 200 개의 코인으로 시작하여 20,000 번씩 매번 1 개의 코인을 사용해보십시오.

시뮬레이션을 중지시키는 유일한 조건은 파산 또는 "생존"20k 시도

여기에 이미지 설명을 입력하십시오

조만간 파산이 당신을 기다리고 있다고 생각합니다.


코드는 자바 스크립트로 개선되었지만 종속성은 없습니다 : https://repl.it/@cilofrapez/MagicTree-Roulette

결과를 바로 보여줍니다. 코드는 간단하게 조정할 수 있습니다. 그러나 많은 시뮬레이션을 실행하고, 베팅 금액을 늘리지 만 많은 시도가 있습니다 ... 자유롭게 플레이하십시오!

코드 하단에서 각 시뮬레이션의 결과 (기본적으로 10)는 스핀 번호와 돈이라는 두 개의 열이있는 CSV 파일로 저장됩니다. 그래프의 온라인 플로터에 공급할 수 있도록 만들었습니다.

예를 들어 Google 차트 라이브러리를 사용하여 로컬에서 모두 자동화하는 것은 쉽지 않습니다. 화면에 결과 만 표시하려면 파일에서 언급 한대로 마지막 부분을 주석 처리 할 수 ​​있습니다.

편집하다

소스 코드:

/**
 * License: MIT
 * Author: Carles Alcolea, 2019
 * Usage: I recommend using an online solution like repl.it to run this code.
 * Nonetheless, having node installed, it's as easy as running `node magicTree.js`.
 *
 * The code will run `simulations` number of scenarios, each scenario is equal in settings
 * which are self-descriptive: `betAmount`,`timesWinPayout`, `spinsPerSimulation`, `startingBankRoll`
 * and `winningOdds`.
 *
 * At the end of the code there's a part that will generate a *.csv file for each simulation run.
 * This is useful for ploting the resulting data using any such service or graphing library. If you
 * wish the code to generate the files for you, just set `saveResultsCSV` to true. All files will
 * have two columns: number of spin and current bankroll.
 */

const fs = require('fs'); // Only necessary if `saveResultsCSV` is true

/**
 * ==================================
 * You can play with the numbers of the following variables all you want:
 */
const betAmount          = 0.4,   // Percentage of bankroll that is offered to the tree
      winningOdds        = 0.5,
      startingBankRoll   = 200,
      timesWinPayout     = 2,
      simulations        = 5,
      spinsPerSimulation = 20000,
      saveResultsCSV     = false;
/**
 * ==================================
 */

const simWins = [];
let currentSim = 1;

//* Each simulation:
while (currentSim <= simulations) {
  let currentBankRoll = startingBankRoll,
      spin            = 0;
  const resultsArr  = [],
        progressArr = [];

  //* Each spin/bet:
  while (currentBankRoll > 0 && spin < spinsPerSimulation) {
    if (currentBankRoll === Infinity) break; // Can't hold more cash!
    let currentBet = Math.ceil(betAmount * currentBankRoll);
    if (currentBet > currentBankRoll) break;  // Can't afford more bets... bankrupt!

    const treeDecision = Math.random() < winningOdds;
    resultsArr.push(treeDecision);
    if (treeDecision) currentBankRoll += currentBet * timesWinPayout; else currentBankRoll -= currentBet;
    progressArr.push(currentBankRoll);
    spin++;
  }

  const wins = resultsArr.filter(el => el === true).length;
  const losses = resultsArr.filter(el => el === false).length;
  const didTheBankRollHold = (resultsArr.length === spinsPerSimulation) || currentBankRoll === Infinity;

  const progressPercent = didTheBankRollHold ? `(100%)` : `(Bankrupt at aprox ${((resultsArr.length / parseFloat(spinsPerSimulation)) * 100).toPrecision(4)}% progress)`;

  // Current simulation summary
  console.log(`
  - Simulation ${currentSim}: ${progressPercent === '(100%)' ? '✔' : '✘︎'}
    Total:      ${spin} spins out of ${spinsPerSimulation} ${progressPercent}
    Wins:       ${wins} (aprox ${((wins / parseFloat(resultsArr.length)) * 100).toPrecision(4)}%)
    Losses:     ${losses} (aprox ${((losses / parseFloat(resultsArr.length)) * 100).toPrecision(4)}%)
    Bankroll:   ${currentBankRoll}
  `);

  if (didTheBankRollHold) simWins.push(1);

  /**
   * ==================================
   * Saving data?
   */
  if (saveResultsCSV) {
    let data = `spinNumber, bankRoll`;
    if (!fs.existsSync('CSVresults')) fs.mkdirSync('CSVresults');
    progressArr.forEach((el, i) => {
      data += `\n${i + 1}, ${el}`;
    });
    fs.writeFileSync(`./CSVresults/results${currentSim}.csv`, data);
  }
  /**
   * ==================================
   */

  currentSim++;
}

// Total summary
console.log(`We ran ${simulations} simulations, with the goal of ${spinsPerSimulation} spins in each one.
Our bankroll (${startingBankRoll}) has survived ${simWins.length} out of ${simulations} simulations, with ${(1 - winningOdds) * 100}% chance of winning.`);
```

1
이것을 위해 작성한 코드를 게시 할 수 있습니까?
baxx

1
이것은 일정한 지분으로 베팅하지만 와 같이 고정 된 비율의 부에 베팅 할 때마다 매번 다른 결과를 산출합니다. 당신은 분수 동전을 피하기 위해이 적응해야 할 수도 있습니다 (예를 들어 내림이보다 적은 값을 생성하지 않는 한 건 내기하는 동전, 동전) 111411
헨리

@ baxx 물론, 방금 게시물을 업데이트했습니다. 헨리, 잘 모르겠어요 원하는 경우 다른 요구에 맞게 코드를 조정할 수 있습니다.
Carles Alcolea

@CarlesAlcolea 나는 게시물에 사용한 코드가 게시물 자체에 포함되어 있으면 좋을 것이라고 말했습니다. 게시 한 repl에 대한 링크가 어느 시점에서
죽을지 확실

1
트윗 담아 가기 이 즉흥적으로 작성된 프로그램을 작성한 후, 나는 이런 종류의 거의 모든 상황을 쉽게 탐색 할 수 있도록 작은 온라인 앱을 만들어야한다고 생각했습니다. 나는 찾지 못했습니다. 이제 나는 일에 빠져 들어 지금은 포스트에 코드를 남기고 할 일 목록에 앱을
남긴다

4

문제 설명

하자 금액의 대수 될 도박꾼이 시간에이 .Yt=log10(Mt)Mtt

가 도박꾼이 베팅하는 돈의 일부라고 하자 .q

하자 돈의 양이 그와 도박꾼 시작 (10 달러)합니다. 하자 도박꾼 (1 센트 이하) 파산 곳 금액합니다. 간단하게하기 위해 우리는 도박꾼이 돈 약간 넘었을 때 도박을 중단하는 규칙을 추가합니다 (나중에 한도를 규칙을 해제 할 수 있습니다 ).Y0=1YL=2YWYW

무작위 걷기

비대칭 랜덤 워크로 돈의 성장과 하락을 볼 수 있습니다. 즉, 를 다음과 같이 설명 할 수 있습니다 .Yt

Yt=Y0+i=1tXi

어디

P[Xi=aw=log(1+2q)]=P[Xi=al=log(1q)]=12

파산 확률

마틴 게일

표현식

Zt=cYt

우리가 를 선택할 때의 마틴 게일 입니다.c

caw+cal=2
(여기서 이면 ) 그때부터c<1q<0.5

E[Zt+1]=E[Zt]12caw+E[Zt]12cal=E[Zt]

파산 할 가능성

중지 시간 (손실 / 파산 또는 승리 )은 최악의 경우 특정 유한 길이 인 , 거의 확실하게 원하지이다.Yt<YLYt>YWYWYLaw

그런 다음, 선택적 정지 정리 를 사용하여 정지 시간 가 시간 0 의 예상 값 과 있습니다.E[Zτ]τE[Z0]

그러므로

cY0=E[Z0]=E[Zτ]P[Yτ<L]cYL+(1P[Yτ<L])cYW

P[Yτ<YL]cY0cYWcYLcYW

그리고 한도YW

P[Yτ<YL]cY0YL

결론

현금을 모두 잃지 않고 제공 할 수있는 최적의 현금 비율이 있습니까?

최적의 백분율이 어느 것이 다른 이익을 평가하는지에 달려 있습니다. 그러나 모든 것을 잃을 확률에 대해 말할 수 있습니다.

도박꾼이 돈의 제로 부분을 베팅 할 때만 파산하지 않을 것입니다.

증가와 도박꾼이 거의 확실 유한 한 시간 (도박꾼의 파멸이 코멘트에 로버트 롱 언급) 내에서 파산 몇 가지 지점까지 증가 파산 할 확률을. 이 점, 에서입니다 이에 대한 해결책이없는 포인트입니다 하나 아래가. 이것은 또한 증가하는 단계 가 감소하는 단계 보다 작은 이다.qqgambler's ruin

qgambler's ruin=11/b
cawal

따라서 경우 도박꾼이 돈의 절반 이하로 베팅하는 한 도박꾼은 파산 하지 않을 것입니다.b=2

모든 돈을 잃을 확률은 시간이 지남에 따라 줄어들거나 증가합니까?

파산 할 확률은 도박꾼이 파산하는 금액과의 거리에 따라 다릅니다. 시 도박꾼의 돈 것, 평균 감소에 평균 증가 및 파산 의지를 갈 수있는 확률에.q<qgambler's ruin

켈리 기준을 사용할 때 파산 확률.

데이브 해리스 대답 한 켈리 기준 사용할 때 대한, 로부터 독립 한 단일 베팅 손실과 수익의 비율 인 의 값 동일 할 것이다 파산 할 확률은 입니다.q=0.5(11/b)bbc0.10.1SL

즉, 켈리 기준을 사용할 때 매직 트리 의 아 시메트리 매개 변수 와 무관하게 파산 할 확률은 도박꾼이 파산하는 금액과 도박꾼이 시작하는 금액의 비율과 같습니다. 와. 10 달러와 1 센트의 경우 켈리 기준을 사용할 때 파산 할 확률은 1 : 1000입니다.b

시뮬레이션

아래 시뮬레이션은 다양한 도박 전략에 대한 다양한 시뮬레이션 궤적을 보여줍니다. 빨간 궤적은 파산하게 된 것입니다 ( 선을 ).Yt=2

시뮬레이션

시간 이후 이익 분배t

머니 트리로 도박의 가능한 결과를 추가로 설명하기 위해 분포를 균일 한 에서 흡수 경계 (도박자가 파산하는 곳)에서 1 차원 확산 과정으로 모델링 할 수 있습니다 . 이 상황에 대한 솔루션은 Smoluchowski에 의해 제공되었습니다Yt

스몰 로브 스키, 마리안 V. Annalen der Physik 353.24 (1916) : 1103-1112. ( https://www.physik.uni-augsburg.de/theo1/hanggi/History/BM-History.html을 통해 온라인으로 이용 가능 )

방정식 8 :

W(x0,x,t)=ec(xx0)2Dc2t4D2πDt[e(xx0)24Dte(x+x0)24Dt]

이 확산 방정식은 속도 를 예상 증가 와 동일하게 설정했을 때의 트리 문제와 관련이 있으며 , 는 단일 단계에서의 변화의 분산과 동일하게 설정 합니다 , 은 초기 금액, 는 걸음 수입니다.cE[Yt]DVar(Xt)x0t

아래 이미지와 코드는 방정식을 보여줍니다.

  • 히스토그램 은 시뮬레이션 결과를 보여줍니다.

  • 점선 은 분포를 근사하기 위해 순진 정규 분포를 사용할 때의 모형을 보여줍니다 (이는 흡수하는 '파산'장벽이 없음에 해당). 파산 수준 이상의 결과 중 일부는 초기에 파산 수준을 통과 한 궤적과 관련되어 있기 때문에 이는 잘못된 것입니다.

  • 연속 선 은 Smoluchowski의 공식을 사용한 근사치입니다.

힘장에서의 확산으로 그림

코드

#
## Simulations of random walks and bankruptcy:
#

# functions to compute c
cx = function(c,x) {
  c^log(1-x,10)+c^log(1+2*x,10) - 2
}
findc = function(x) {
  r <- uniroot(cx, c(0,1-0.1^10),x=x,tol=10^-130)
  r$root
}


# settings
set.seed(1)
n <- 100000
n2 <- 1000
q <- 0.45

# repeating different betting strategies
for (q in c(0.35,0.4,0.45)) {
  # plot empty canvas
  plot(1,-1000,
       xlim=c(0,n2),ylim=c(-2,50),
       type="l",
       xlab = "time step", ylab = expression(log[10](M[t])) )

  # steps in the logarithm of the money
  steps <- c(log(1+2*q,10),log(1-q,10))

  # counter for number of bankrupts
  bank <- 0

  # computing 1000 times
  for (i in 1:1000) {
    # sampling wins or looses
    X_t <- sample(steps, n, replace = TRUE)
    # compute log of money
    Y_t <- 1+cumsum(X_t)
    # compute money
    M_t <- 10^Y_t
    # optional stopping (bankruptcy)
    tau <- min(c(n,which(-2 > Y_t)))
    if (tau<n) {
      bank <- bank+1
    }
    # plot only 100 to prevent clutter
    if (i<=100) {
      col=rgb(tau<n,0,0,0.5)
      lines(1:tau,Y_t[1:tau],col=col)
    }
  }
  text(0,45,paste0(bank, " bankruptcies out of 1000 \n", "theoretic bankruptcy rate is ", round(findc(q)^3,4)),cex=1,pos=4)
  title(paste0("betting a fraction ", round(q,2)))
}

#
## Simulation of histogram of profits/results
#

# settings
set.seed(1)
rep <- 10000  # repetitions for histogram
n   <- 5000   # time steps
q   <- 0.45    # betting fraction
b   <- 2      # betting ratio loss/profit
x0  <- 3      # starting money

# steps in the logarithm of the money
steps <- c(log(1+b*q,10),log(1-q,10))

# to prevent Moiré pattern in
# set binsize to discrete differences in results
binsize <- 2*(steps[1]-steps[2]) 

for (n in c(200,500,1000)) {

  # computing several trials
  pays <- rep(0,rep)
  for (i in 1:rep) {
    # sampling wins or looses
    X_t <- sample(steps, n, replace = TRUE)
      # you could also make steps according to a normal distribution
      # this will give a smoother histogram
      # to do this uncomment the line below
    # X_t <- rnorm(n,mean(steps),sqrt(0.25*(steps[1]-steps[2])^2))

    # compute log of money
    Y_t <- x0+cumsum(X_t)
    # compute money
    M_t <- 10^Y_t
    # optional stopping (bankruptcy)
    tau <- min(c(n,which(Y_t < 0)))
    if (tau<n) {
      Y_t[n] <- 0
      M_t[n] <- 0
    }
    pays[i] <- Y_t[n]
  }

  # histogram
  h <- hist(pays[pays>0],
            breaks = seq(0,round(2+max(pays)),binsize), 
            col=rgb(0,0,0,0.5),
            ylim=c(0,1200),
            xlab = "log(result)", ylab = "counts",
            main = "")
  title(paste0("after ", n ," steps"),line = 0)  

  # regular diffusion in a force field (shifted normal distribution)
  x <- h$mids
  mu <- x0+n*mean(steps)
  sig <- sqrt(n*0.25*(steps[1]-steps[2])^2)
  lines(x,rep*binsize*(dnorm(x,mu,sig)), lty=2)

  # diffusion using the solution by Smoluchowski
  #   which accounts for absorption
  lines(x,rep*binsize*Smoluchowski(x,x0,0.25*(steps[1]-steps[2])^2,mean(steps),n))

}

"즉, 켈리 기준을 사용할 때 마술 트리의 아 시메트리 매개 변수 b와 무관하게 파산 할 확률은 도박꾼이 파산 한 금액과 도박꾼이받는 금액의 비율과 같습니다. 10 달러와 1 센트의 경우 이것은 파산 할 확률이 1 : 1000입니다 "라고 조금 놀랐습니다. 이것은 파산 할 확률이 라운드 당 제안 된 돈의 10 배인 경우에도 1 : 1000이된다는 것을 의미합니다. 돈이 커지면서 파산 할 확률이 줄어들 때 어떻게 가능합니까?
ElectronicToothpick

1
@ElectronicToothpick 지불금이 더 크고 도박에 대한 비율을 변경하지 않으면 파산 할 확률이 더 작아집니다. 그러나 도박하는 비율을 늘리면 더 이상 사실이 아닐 수 있습니다. 켈리 기준을 사용하면 지급액이 높을 때 도박 비율을 증가시킵니다. 이것은 돈의 로그의 예상 값을 증가 시키지만 결과적으로 파산 할 확률은 동일하게 유지됩니다.
Sextus Empiricus

1
실제로 도박꾼이 를 최적화하는 켈리 기준을 사용하지 않고 대신 를 최적화하기로 선택한 경우 더 많은 금액의 돈이 도박되고 있습니다. 아마도 이것은 지불금이 더 커질 때 파산 위험을 증가시킬 수 있습니다. 이것에 대한 분석을 추가 할 수는 있지만 내 대답이 이미 너무 길거나 복잡하다는 것을 두려워합니다. E [ M t ]E[logMt]E[Mt]
Sextus Empiricus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.