2019年1月30日水曜日

必勝法

>> モンテカルロシミュレーション

 当該ページで倍増法を必勝法みたいにいっているけど、ほんとうなのかなぁ。
 単純に考えて

  1. ゲームのルールを決めることができるハウスがゲストの必勝法(ハウスにとって必敗法)があるゲームを採用するはずがない。
  2. クラップスというゲーム自体、長いこと、存在する。
  3. ということは必勝法が存在しない、すくなくとも今だ、見つけられていない。

 ということになるんじゃないか。

 いちおう自分でもモンテカルロしてみる。

(defun dice()
(+ (random 6) 1))
(defun craps()
"負け:-1 勝ち:1"
(let ((sum (+ (dice)(dice))))
(labels ((retry (x)
(let ((w (+ (dice)(dice))))
(cond ((= x w) 1)
((= w 7) -1)
(t (retry x))))))
(case sum
(2 -1)
(3 -1)
(4 (retry sum))
(5 (retry sum))
(6 (retry sum))
(7 1)
(8 (retry sum))
(9 (retry sum))
(10 (retry sum))
(11 1)
(12 -1)))))
(defun game (&optional (x 1000))
(loop repeat x
collect
(craps)))
(defun double(i)
(let* ((bet 100)
(result 0)
(wrk (loop for x in (game i)
collect
(prog1
(setf result (+ result (* bet x)))
(if (= x 1)
(setf bet 100)
(setf bet (* bet 2)))))))
(UIOP/FILESYSTEM:DELETE-FILE-IF-EXISTS "/tmp/result")
(with-open-file (stream "/tmp/result" :direction :output :if-exists :overwrite :if-does-not-exist :create)
(loop for x in wrk
do
(format stream "~D~%" x)))))
view raw craps.lisp hosted with ❤ by GitHub

 1000回試行

 あれ?
 なんか、いけそうに見える。
 540回ぐらいの大きな負けを超えることができれば、あとは順調に勝ちが積み上がっていくような……。

 10000回試行

 100000回試行

 1000000回試行

 10000000回試行

 ——なんなんだ、これは。フラクタルかよ!
 どこまでいっても大負けになる瞬間がある。10000000回試行では瞬間的に1200000000円——12億……。どんなに勝ちを積んでもフッ飛んでしまうことがあるのか。おそろしい。