IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート 

第92回 確率のトリックをJupyterでシミュレーション (中井悦司) 2016年6月

はじめに

 前回は、JupyterのPython実行環境を科学技術教育に利用するという話題をお届けしました。―― と言っても、Pythonで高度な数学の計算を行うというだけの話ではありません。高校生レベルの物理学の問題を動画にする例を紹介したように、学習する内容にかかわらず、「自分でコードを書いて実際に試してみる」という環境が何よりも有用だと言えるでしょう。

 とくに、Jupyterの面白いポイントとして、「理屈はわからなくても、まずはコードで試してみる」という使い方ができる点があります。今回は、簡単な確率の問題を例にして、Jupyterを用いた「シミュレーション」の利用例を紹介したいと思います。

「モンティ・ホール問題」に挑戦

 少しばかり唐突ですが、次の問題を考えてみてください。

[問題]

「プレーヤーの前に閉まった3つのドアがあって、1つのドアの後ろには景品の新車が、2つのドアの後ろには、はずれを意味するヤギがいる。プレーヤーは新車のドアを当てると新車がもらえる。プレーヤーが1つのドアを選択した後、司会のモンティが残りのドアのうちヤギがいるドアを開けてヤギを見せる。

 ここでプレーヤーは、最初に選んだドアを、残っている開けられていないドアに変更してもよいと言われる。プレーヤーはドアを変更すべきだろうか?」

 この問題文は、Wikipediaから引用したものですが、みなさんの答えはいかがでしょうか? これは、結論から言うと、ドアを変更するのが正解です。最初に選んだドアが「当たり」の確率は1/3ですが、ドアを変更した場合、「当たり」の確率は、2倍の2/3になります。

 この事実を数学的に証明することも可能ですが、どうしても直感的な理解が難しく、かつて、本職の数学者もまきこんだ大論争に発展したことがあるそうです。この時、最終的に論争の決着をつけたのは、コンピューターによるシミュレーションでした。Wikipediaの記事によると、「自前のパーソナルコンピュータで数百回のシミュレーション」を行った結果、ドアを変更した際に「当たり」となる確率は2/3に一致したということです。

 当時、このようなシミュレーションにどの程度のプログラムコードが必要だったのかは分かりませんが、これは、Jupyterを使えば10数行のコードでできてしまいます(*1)。現在のPCの性能であれば、数百回どころか、1万回のシミュレーションもほぼ一瞬です。すぐ手元にJupyterがある筆者からすると、「どうしてもっと早くシミュレーションをしなかったの?」という気分にもなってきます。

 特に、プログラムコードを利用するメリットとして、「暗黙のルールが明示的に示される」という点もあります。先の論争においては、このゲームのルールについて人によって理解の仕方が異なっており、それが原因で議論が混乱したということもあったようです。しかしながら、シミュレーションのプログラムコードを見れば、どのようなルールでゲームが進行するかは、明確に理解することができます。知識や理解を共有する手段としても、プログラムコードが役に立つことがわかります。

微積分の意味もJupyterで確認

 この他に、「暗黙のルール」を明確に理解するためにJupyterが利用できそうな例としては、高校生の微積分の計算などがありそうです。関数の微分には、「グラフの接線の傾き」という意味がありますが、これは、「グラフ上の少し離れた2点を結ぶ直線の傾き」を計算しながら、2点を徐々に近づけていった極限として定義されます。あるいは、積分で得られる「グラフの面積」は、「グラフの中に棒グラフを並べた面積」を計算しながら、棒の幅を小さくしていった(棒の数を増やしていった)極限になります。これらは、Pythonのプログラムでアニメーション化すると、図1のようになります。

fig01 fig02

図1 微分と積分をJupyterでアニメーション化した例

 この時、大切なことは、Jupyterを利用すれば、生徒自身がプログラムコードを書いて、このアニメーションを作成できるという点です。プログラムのロジックを考える中で、前述の「極限」の意味を明確に捉えることができるようになるでしょう。

次回予告

 今回は、Jupyterの活用例として、数学の問題をプログラムコードで表現するという話をしました。プログラムコードというのは、数学の理屈を表現、あるいは、理解する手助けにもなることがお分かりいただけたでしょうか。図1の動画を作成するコードも公開してありますので、興味のある方は参考にしてください(*2)。

 さて、これまで約4年間にわたって続いた本連載は、今回が最終回となります。現在、新しい連載を企画中ですので、また別の形でお目にかかれる時まで、少しお待ちいただければと思います。

参考資料

*1 モンティ・ホール問題をJupyterでシミュレーション

*2 Math animation

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   OpenStack  OpenFlow/SDN  情報セキュリティ  Python  システムトラブルシュート