確率2%のくじ引きで100万人が当たりを引くまでチャレンジするシミュレーション
だいたい2%くらいの確率でドロップするっぽいGraf Zeppelinのドロップ。けれど実感としては2%なんて嘘だろう? そんなことを思ってしまうくらい苦しんでいるプレイヤーの姿が目について、いくらなんでもしぼりすぎだ、などなど、巷に怨嗟の声がこだましています。
さて、先日書いた確率2%のくじ引きをシミュレートするというスクリプト。今回はそれを少し書き直して、100万人が当たりを引くまで試行するようにしてみました。だいたい総試行回数は5千万回くらいになるようです。
前回、意外や1回目の試行で入手するケースが多い、だなんて驚いていましたが、これは別に不思議でも意外でもない当たり前のことで、2%で当たりが出るくじ引き。1回目のくじ引きで、100万の2%である2万人が当たりを引く。2回目は100万から2万を引くところの、98万の2%、19万6千人が当たりを引く、といった具合に、徐々に減っていくのが当たり前。実際、この記事の末尾に実行結果を載せていますが、それもほぼそのようになっていて、人間の感覚と理屈の乖離というものを実感させられます。
以前、ドロップする確率を入力すると、だいたいどれくらいの回数で、どれくらいの入手見込みがあるかを計算するスクリプトを書いたことがありました。
それによると2%のくじ引きだとこんな結果が出ます。
20% | 12 |
50% | 35 |
80% | 80 |
90% | 114 |
95% | 149 |
98% | 194 |
99% | 228 |
99.999% | 570 |
この目安と今回の実行結果、それを比較してみると、入手したプレイヤーの割り合いが2割を超えるのは、確かに12回試行した時で、50%は35回試行、80%も90%も計算のとおりに出ます。95%は148回試行と1回の差が生じて、99%は229回と今度は1回多くなってしまって、と、このあたりは本当に小さな誤差ですけれど、おそらくは試行回数をもっともっと増やしていくと、計算によって想定される回数にもっともっと近付いていくのでしょう。
さて、今回の結果だけをもって書いてしまいますが、ほぼ5千万回試行。49,915,914回ですが、場合によっては5千万を超えることもあります。これを入手者数100万人で割ると49.9回。ということは、50回くらいで入手するのが平均、標準、普通ってところなのかなと思ったところで、いや、これ、平均じゃなくて中央値を出さないといかんのじゃないか?
とまあ、そう思ったところで、計算する気はないんですけどね。
データはCSVで出力してるので、表計算ソフトに放り込んで計算させたら一発というのは理解してますが、今回はそれをする手間を惜しんでおこうと思います。
# -*- coding: utf-8-unix; mode: python -*- import random result = dict() clg = 0 acquirer = 0 while acquirer < 1000000: cnt = 0 havenot = True while havenot: cnt += 1 clg += 1 if random.randrange(50) == 1: if cnt in result: result[cnt] += 1 else: result[cnt] = 1 acquirer += 1 havenot = False total = 0 for key in range(max(result.keys()) + 1): if key in result: total += result[key] line = '{0:>5}, {1:>5}, {2:.4%}, {3:>7}, {4:.4%}' print(line.format(key, result[key], result[key] / acquirer, total, total / acquirer)) elif key == 0: pass else: print('{0:>5}, 0, 0% , , 0%'.format(key)) print() print('acquirer: {0:,}'.format(acquirer)) print('number of trials: {0:,}'.format(clg))続きを読む
確率2%のくじ引きのシミュレーション
Graf Zeppelinのドロップが、だいたい2%くらいっぽいかもかも、ということで、実際に確率2%のくじ引きで当たりを引くまでの試行回数がどれくらいのバラツキを見せるのか、確認するための簡単なプログラムを書いてみました。
入手までの試行回数をキーとした辞書に入手した人数が入ります。
キーが500種類になるまで試行を繰り返すようになってます。これだと総試行回数は3千万回前後になる模様です。
結果なんですが、意外や、どうも、1回目とか2回目のチャレンジで入手するケースが最多になってしまって、ええーっ、ぷらずマジで!? 正直信じられないんですが、やり直せば違う結果も出るかもかもっぽいとはいえ、グラフを描くと左肩あがりのロングテールを描きます。3回やって3回同じグラフになった。
なので、数十ならともかく数百回S勝利して出ない、っていう人は、本当に、本当の本当に運が悪いっていえるのかも知れません。
なお、ついさっき試してみて、今回の試行では735回が最多チャレンジ数となりました。こんなん、もうやってられへんよね。
# -*- coding: utf-8-unix; mode: python -*- import random result = dict() clg = 0 while len(result) < 500: cnt = 0 havenot = True while havenot: cnt += 1 clg += 1 if random.randrange(50) == 1: if cnt in result: result[cnt] += 1 else: result[cnt] = 1 havenot = False for key in range(max(result.keys()) + 1): if key in result: print('{0:>5}, {1:>3}, {2}%'.format(key, result[key], result[key] / clg * 100)) else: print('{0:>5}, 0, 0%'.format(key)) print(',{0}'.format(clg))
結果も貼っとこう。長いので折り畳んどきます。
続きを読む0埋め、それすなわちゼロフィル
ずいぶん前、文字列オブジェクトにはrjust()なんてメソッドがある、これを使ったら楽々0埋め可能だ、なんていっていましたが、つい最近、zfill()という、そのものずばりの0埋めメソッドがあることを知りました。
URLエンコードを使ってユニコード文字列をCookieにセットする
久しぶりにHTTP Cookieなど使ってみたら、さっぱりノウハウが消えてしまっていて思わぬ苦戦をしました。理由はいろいろあるけれど、日本語など非ASCII文字列をCookieに設定する場合、URLエンコードしないといけないなど、もろもろの仕様をすっかり忘れていたことや、よくよく考えたらPythonで書いてきたCGI、CookieにはSession IDを設定するだけで、フィールドに入る文字列などはSessionに記憶させてたから、URLエンコードする必要がなかったというのも大きかった。けれど、一番の問題は、IDLEで試してもうまくいかない、urllibでもurllib2でもいいんだけど、quoteでエンコードして、unquoteで戻した文字列が、おかしくなってしまうというところであったでしょう。
ああ、最初からprint()デバッグでやりゃあよかった。
ネットで調べても、あまり情報が出てきませんでした。なのでここに記録しておこうと思います。自分も含め、誰かの助けになればと思います。
import Cookie import urllib2 cookie = Cookie.SimpleCookie() value = u'スパム' # 記録 cookie['value'] = urllib2.quote(value.encode(u'utf-8')) # 読み出し if cookie.has_key('value'): value = urllib2.unquote(cookie['value'].value) value = value.decode(u'utf-8')
マイベストソング2013、らしいよ
マイベストソング2013〈今年の1曲でiTunes Cardを当てよう! 私のマイベストソング2013♪〉
正直、このロゴでこられたなら、この曲をあげざるを得ない。
『ダイヤモンドハッピー』、最高だと思います。ギター一本で歌えるようにできないものかと思っとる。
9月5日に買っていたもの
- 作者: 宮原るり
- 出版社/メーカー: 芳文社
- 発売日: 2013/09/05
- メディア: コミック
- この商品を含むブログ (14件) を見る
- 作者: にょりこ
- 出版社/メーカー: 芳文社
- 発売日: 2013/09/05
- メディア: コミック
- この商品を含むブログ (4件) を見る
- 作者: とく村長
- 出版社/メーカー: 芳文社
- 発売日: 2013/09/05
- メディア: コミック
- この商品を含むブログ (8件) を見る
- 作者: たかみ裕紀,蒼山サグ,てぃんくる
- 出版社/メーカー: アスキー・メディアワークス
- 発売日: 2013/08/27
- メディア: コミック
- この商品を含むブログ (14件) を見る
- 作者: 雨蘭
- 出版社/メーカー: 白泉社
- 発売日: 2013/08/29
- メディア: コミック
- この商品を含むブログ (8件) を見る
7月16日に届いていたもの
CD
TVアニメ ガールズ&パンツァー ファンディスクCD ディープパンツァーCDです!
- アーティスト: 西住みほ(渕上舞),武部沙織( CV.茅野愛衣),五十鈴華( CV.尾崎真実)
- 出版社/メーカー: ランティス
- 発売日: 2013/08/07
- メディア: CD
- この商品を含むブログ (9件) を見る
- アーティスト: (オリジナルサウンドトラック)
- 出版社/メーカー: ジェネオン・ユニバーサル
- 発売日: 2012/06/27
- メディア: CD
- 購入: 3人 クリック: 50回
- この商品を含むブログ (16件) を見る
- アーティスト: ドラマ
- 出版社/メーカー: アニプレックス
- 発売日: 2012/03/14
- メディア: CD
- クリック: 2回
- この商品を含むブログ (5件) を見る
侵略!?イカ娘 金元寿子×イカ娘 侵略ラジオ 聞かなイカ? ラジオCD2じゃなイカ?
- アーティスト: ラジオ・サントラ,金元寿子,片岡あづさ
- 出版社/メーカー: ランティス
- 発売日: 2012/04/18
- メディア: CD
- この商品を含むブログ (2件) を見る