Mein Sohn, der Mathematik mag, scheint zu wissen, wie man irgendwo doppelt setzt, und er hat es auf interessante Weise erklärt.
[Laut Wikipedia](https://ja.wikipedia.org/wiki/%E3%83%99%E3%83%83%E3%83%86%E3%82%A3%E3] nach der Martingal-Methode % 83% B3% E3% 82% B0% E3% 82% B7% E3% 82% B9% E3% 83% 86% E3% 83% A0)
Die klassischste und bekannteste Methode ist seit langem als Casino-Gewinnstrategie beliebt. Auch als Doppelwettmethode bekannt. Zuerst setzen Sie 1 Einheit, wenn Sie verlieren, setzen Sie 2 Einheiten, und wenn Sie verlieren, setzen Sie 4 Einheiten, und wenn Sie einmal gewinnen, kehren Sie sofort zu 1 Einheit zurück. Unabhängig von der Anzahl der Versuche erhalten Sie 1 Guthaben, wenn Sie gewinnen. In vielen Fällen gewinnen Sie einen kleinen Betrag, aber wenn Sie verlieren, verlieren Sie viel. Wenn Sie kontinuierlich verlieren, erreichen Sie bald die Obergrenze des Wettens, die als Punk- oder Tischlimit bezeichnet wird.
Ich wusste, dass es nicht funktionieren würde.
Ich hatte jedoch nicht versucht, tatsächlich zu verlieren, also beschloss ich, es zu versuchen. Versuchen Sie es ohne Wahrscheinlichkeit, damit der Sohn eines Schülers der Mittelstufe verstehen kann.
import random
def play():
a = random.randint(0, 1)
if a == 0:
return 'win'
else:
return 'lose'
Definieren Sie eine Funktion, die das Ergebnis des Spiels zurückgibt.
def test():
win = 0
lose = 0
for i in range(1000):
if play() == 'win':
win += 1
else:
lose += 1
print('win: ' + str(win) + ' , lose: ' + str(lose))
for i in range(10):
test()
Das Ergebnis eines 1000-maligen Versuchs wird zehnmal angezeigt, um zu überprüfen, wie die Ergebnisse verstreut sind.
win: 498 , lose: 502
win: 491 , lose: 509
win: 479 , lose: 521
win: 509 , lose: 491
win: 513 , lose: 487
win: 520 , lose: 480
win: 521 , lose: 479
win: 495 , lose: 505
win: 526 , lose: 474
win: 524 , lose: 476
Es ist so. Es gibt kein Problem, da die Gewinnrate bei etwa 50% liegt.
Als Schüler der Mittelstufe kann er nicht spielen, aber für ihn verwendet er einen angemessenen Betrag von 10.000 Yen als Militärmittel. Der erste Einsatz beträgt 100 Yen.
Wenn Sie verlieren, verdoppeln Sie den Einsatz und wiederholen Sie den Vorgang, bis Sie gewinnen.
def martingale(money, bet):
times = 1
while(True):
if play() == 'win':
money += bet
return money, times
else:
money -= bet
bet += bet
if money <= bet:
return money, times
times += 1
Versuchen Sie es 10 Mal und zeigen Sie das Ergebnis an.
def test():
money, times = martingale(10000, 100)
if money < 0:
print('Lose at: ' + str(times) + ', money: ' + str(money))
else:
print('Win at: ' + str(times) + ', money: ' + str(money))
for i in range(10):
test()
Das Ergebnis.
Win at: 4, money: 10100
Win at: 3, money: 10100
Win at: 1, money: 10100
Win at: 2, money: 10100
Win at: 2, money: 10100
Win at: 4, money: 10100
Win at: 1, money: 10100
Win at: 1, money: 10100
Win at: 3, money: 10100
Win at: 2, money: 10100
Eigentlich habe ich das oft gemacht, aber manchmal habe ich verloren. Sie können definitiv gewinnen. Wie mein Sohn denkt.
Ich möchte sehen, wie lange das dauern kann. Es endet, wenn der Betrag verdoppelt wird, um ihn mit dem Fall zu vergleichen, dass 10.000 Yen gleichzeitig gesetzt werden. Wenn sich der Betrag verdoppelt und der Einsatz nicht ausreicht, beginnt die Richtlinie außerdem bei 100 Yen.
def iterate(money, bet):
day = 1
duble = money * 2
while(True):
money, times = martingale(money, 100)
if money <= 0:
return money, day
elif duble <= money:
return money, day
day += 1
Ich bevorzuge "sonst wenn" gegenüber Schreiben oder Bedingungen. Wenn der Nachbeurteilungsprozess wahrscheinlich kompliziert ist, schreiben Sie eine Funktion, die das Beurteilungsergebnis zurückgibt. Es ist mir egal ...
Behandeln Sie die Anzahl der Wiederholungen als die Anzahl der Tage. Wenn Sie von 100 Yen mit 10.000 Yen als Militärgeld beginnen, wird es sich in 100 Tagen verdoppeln und enden. Wenn Sie auch nur einmal verlieren
Nun, wenn Sie dies 10 Mal wie gewohnt versuchen ...
def test():
money, day = iterate(10000, 100)
print('day: ' + str(day) + ', money: ' + str(money))
for i in range(10):
test()
Ergebnis ist
day: 164, money: 20000
day: 100, money: 20000
day: 164, money: 20000
day: 100, money: 20000
day: 98, money: 0
day: 64, money: 0
day: 100, money: 20000
day: 90, money: 0
day: 104, money: 0
day: 20, money: 0
Hmm? Es sind 5 Siege und 5 Niederlagen. Ich werde ziemlich viel verlieren. Es ist meine persönliche Präferenz, ob ich von Anfang an 10.000 Yen setzen oder das Gefühl haben sollte, dass ich viel spielen könnte, aber ich wollte die tatsächliche Gewinnrate überprüfen.
Also werde ich ungefähr 10 Mal anzeigen, um es ungefähr 1000 Mal zu versuchen.
def test():
win = 0
lose = 0
for i in range(1000):
money, day = iterate(10000, 100)
if 0 < money:
win += 1
else:
lose += 1
print('win: ' + str(win) + ', lose: ' + str(lose))
for i in range(10):
test()
Ich habe es auf paiza.io versucht, aber es stellte sich als Time Out heraus, also habe ich es in zwei Hälften geteilt und zweimal ausgeführt.
win: 510, lose: 490
win: 498, lose: 502
win: 502, lose: 498
win: 467, lose: 533
win: 496, lose: 504
win: 498, lose: 502
win: 500, lose: 500
win: 527, lose: 473
win: 500, lose: 500
win: 508, lose: 492
Die Gewinnquote beträgt fast 50%.
Was ist also mit 1 Million Yen?
def test():
win = 0
lose = 0
for i in range(1000):
money, day = iterate(1000000, 100)
if 0 < money:
win += 1
else:
lose += 1
print('win: ' + str(win) + ', lose: ' + str(lose))
for i in range(10):
test()
Es war ein schwerer Prozess, da die Anzahl der Wetten zunahm.
win: 507, lose: 493
win: 489, lose: 511
win: 490, lose: 510
win: 521, lose: 479
win: 497, lose: 503
win: 467, lose: 533
win: 493, lose: 507
win: 497, lose: 503
win: 496, lose: 504
win: 510, lose: 490
Infolgedessen beträgt die Gewinnrate 50%, was bedeutet, dass sich das Ergebnis nicht ändert, selbst wenn Sie sofort oder doppelt setzen und die Anzahl erhöhen.
Selbst wenn Sie 1 Million Yen vorbereiten, um 100 Yen zu verdienen, scheint es keinen Sinn mehr zu geben, die Mittel zu erhöhen. Es war eine Schande, mein Sohn.
Es ist ein Programm, das ich meinem Sohn von der Junior High School erklären kann, also habe ich beschlossen, es zu versuchen, nicht die Wahrscheinlichkeit. Er war vielleicht in der Lage, die Berechnungen zu erklären, weil er eine hohe Fähigkeit in Mathematik hat, aber er hatte wahrscheinlich auch ein Problem mit meiner Fähigkeit ...
Wenn Sie zweimal setzen, halbiert sich zwar die Wahrscheinlichkeit zu verlieren, aber da sich der verlorene Geldbetrag verdoppelt, ist die Gewinnrate bei Wiederholung dieselbe wie bei sofortiger Wette. Es ist natürlich, ruhig zu sein, aber wenn es ums Gewinnen geht, werden Sie sich täuschen lassen. (Es ist das gleiche wie eine permanente Institution)
In diesem Sinne schien es eine sehr effektive Methode zu sein, es tatsächlich zu versuchen.
Nachtrag-I erfuhr später, dass diese Verifizierungsmethode als Monte-Carlo-Methode bezeichnet wird. (Ich kannte nur den Namen) Ich bin nicht zuversichtlich, also kommentieren Sie bitte, wenn jemand sagt, dass dies wahr ist.
Ich habe es in unbekannter Python geschrieben. Ein anderer Sohn schrieb Python und war ein wenig interessiert. Ich fühle mich beim Schreiben etwas schrullig, aber es sollte leicht zu lesen sein.
Dies ist ein Geheimnis, aber das erste Programm, das ich erstellt habe, hatte einen Fehler in den Randbedingungen und das Berechnungsergebnis war ein wenig profitabel ...
Recommended Posts