Help us understand the problem. What is going on with this article?

モンテカルロ法でルーレットに賭け続けた場合に本当に勝てるのか調べた話

初めに

モンテカルロ法 というギャンブルの戦略があることを知り、実際にこれで勝負した場合の勝率がどの程度になるのかプログラムを書いて調べてみた。

参考動画: https://www.youtube.com/watch?v=_suZM2y9wyA

モンテカルロ法とは

勝率1/2の勝負に、以下のルールでベットを行い続ける方法

まず [1, 2, 3] の配列を作成する

-- loop --

  1. 配列の要素数が2未満だったらループを抜ける
  2. 配列の先頭と末尾の要素を足した額をベットする (初期状態では 4 )
  3. 勝ったら → 配列の先頭と末尾の要素を削除し 1. に戻る。
    負けたら → 配列の末尾に2.でベットした額と同じ値を追加し 1. に戻る

-- loop end --

書いたコード

https://github.com/yamazaki-sensei/montecarlo

  • ルーレットで赤or黒に賭けるのと同様の場合を想定。
  • 0だと赤でも黒でも外れ。
  • 予算は100000単位
  • プログラムでは10000ループのモンテカルロ法を行う
import Foundation

let roulette = (0...36) // 疑似ルーレット

func spin() -> Bool {
    return roulette.randomElement()! >= 19 // 0から18の数字が出たら負け
}

let n = 100
var budget = 100_000

let initialState = [1, 2, 3]

(1...100).forEach { _ in
    assert(budget > 0, "破産")
    (1...n).forEach { _ in
        var state = initialState
        while state.count >= 2 {
            if state.last! > 1000 {
                print(state)
            }
            let toBet = state.first! + state.last!

            if spin() {
                state.removeFirst()
                state.removeLast()
                budget += toBet
            } else {
                budget -= toBet
                state.append(toBet)
            }
        }
    }

    print("#################")
    print(budget)
}

所感

  • 10000ループだと80%くらいの確率で勝つ気がする。
  • 勝った時の儲けはだいたい10000単位くらい。
  • 負けるときは大負けして最終的なbudgetが10000とかになる → このときのstateを覗いてみると、 state.last! が10000以上とかになっている。怖い。
  • コードを変えて100000ループ回すと、30%くらいの確率で破産する。怖い。

終わりに

実世界の場合一度破産したら死んでしまうので恐ろしくてなかなか出来ない。やはり必勝法などは無かった。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした