モンティホールの問題をいじりまくった。
あらためて面白い設定だな、これ
過去記事:
・モンティ・ホール問題をPythonで検証する ~モンティホール・アウトレイジ ep 1~
・モンティ・ホールの問題を100個のドアで説明するの納得いかない~モンティホール・アウトレイジ ep 2~
・確率操作したモンティ・ホール問題をPythonで検証する~モンティホール・アウトレイジ ep 3~
過去3回に渡って、モンティ・ホールの問題をやってきました。
モンティ・ホールとPythonって単語を書きまくりましたが、「モンティ・パイソン」って書いてしまったこと数え切れず・・・(イギリスの超有名コメディです)
開始当初は具体的にどうしていくか決めず、とりあえずアウトレイジに攻めるということでスタートさせましたが、面白い結果になってよかった。
では、振り返ってみましょう。
1.戦いの軌跡
第1回では、ノーマルの状態のモンティ・ホールの問題に取り組みました。
第2回では、何も考えないヤツを出したり、ドアを増やしたりしました。
第3回では、確率操作をして、何も考えないヤツに戦略を考えさせました。
この3回、アウトレイジにルールをぶっ壊していきましたが、ある意味ずーっとモンティの手のひらの上で転がされ続けてました。それこそ、この問題の本質に近づけたと思います。
知ってても直観と真実が合わない、人間の直観もあてにならないというのを改めて実感できましたね。
2.今回使ったテクニック
今回使ったテクニックを挙げてみましょう。
①:try / exceptによるエラーの処理
以前はif構文でエラーが発生しないように回避していましたが、今回はtry / exceptでエラーを回避してみました。エラーパターンをあらかじめ確かめるので、なかなか勉強になります。
まだ、使いこなせてないので、またそのうち登場すると思います。
②:ランダムに動くヤツに戦略を検証させる
「いくつかある戦略のなかでどれがよいか?」を検証するやり方として、「大きな試行回数でランダムに戦略を選択する」という方法を見つけました。
これは、ほかでも使えそうです。
③:正規表現(reモジュール) re.matche
少し無理やり使いましたが、使い方の感覚がつかめました。
本来はもっと便利なはずですが、まだまだ使いこなせていませんね。
さらに、多様な表現があるので、今回はその氷山の一角しか使っていません。
また、どっかで使いたいですね。
④:確率操作 random.choises(選択肢, weights)
確率操作をする便利な方法を見出せました。これもどこかで使えそう。
使ってみて初めて分かるのが、choiceとchoicesの違いでした。
これは、実際にやってみないと分からなかったと思います。やっぱりアウトプットは重要ですね。
⑤:リストを文字列に変換する方法 ’’.join([リスト])
完全な副産物でしたが、面白いテクニックをしれました。
これも使いどころありそう。
3.プログラミングの学習について
プログラミングの学習って結局なんでしょうか?
ここでは、好き放題にプログラミングをかいていますが、その間に新しいコードを書き写して勉強しています。
ここで大事なのは、「書き方をミスしないこと」ではなくて「何が起きているかを理解すること」だと感じます。
さらにもう1つ、「何を使えば何ができるか?をたくさん知っておくこと」も重要だと思います。
これからもどんどん新たなテクニックを使っていきたいですね。
3.その他
プログラミングとは関係ないですが、このブログのコードの表示をかえました。
(この話はどっかでまとめようかな・・)
では、次のおもちゃ作りで!!!
PyQさんで勉強中!一緒にやろうぜ
コメント