「シミュレーション」カテゴリ内の記事 このカテゴリをはてなブックマークに追加 このカテゴリを含むはてなブックマーク (初公開日順)

2020年11月 5日 (木)

二封筒問題のシミュレーション その3 整数拡張編

概要


二封筒問題(参: 三浦俊彦『可能世界の哲学』)を Python を用いたシミュレーションで解く。その1では未開封と開封で答えが違うことがシミュレーションによっても確かめられた。その謎を解くため、その2では、まずは額を実数にするよう問題を拡張した。

この「その3」では整数問題に戻って拡張を試み、謎の解明を完成する。

続きを読む "二封筒問題のシミュレーション その3 整数拡張編"

2020-11-05 23:05:33 (JST) in シミュレーション Python | | コメント (8)

二封筒問題のシミュレーション その2 実数拡張編

概要


二封筒問題(参: 三浦俊彦『可能世界の哲学』)を Python を用いたシミュレーションで解く。その1では未開封と開封で答えが違うことがシミュレーションによっても確かめられた。

この「その2」ではその謎を探るため、まずは上限の効果を確かめようと額を実数にするよう問題を拡張してみる。

この次の「その3」では整数問題に戻って拡張を試みる。

続きを読む "二封筒問題のシミュレーション その2 実数拡張編"

2020-11-05 22:59:45 (JST) in シミュレーション Python | | コメント (0)

二封筒問題のシミュレーション その1 基礎編

概要


二封筒問題(参: 三浦俊彦『可能世界の哲学』)を Python を用いたシミュレーションで解く。

最初は誤解して、「求めているのは、単に、相手を見たとき相手の額が自分の何倍かを調べると平均で 1.25 倍になるということ。交換したとしてもしなかったとしてもそうなる。じゃあ、交換すれば結果が変わるかというと変わらない。開封も未開封も関係ない。」と考えた。

しかし、その後、開封バージョンを実際にシミュレーションをすれば、確かに交換したら 1.25 倍になるということが(予想外にも)示せた。この「その1」では、その「驚き」までを示す。

そして、その2その3では、なぜそうなるかを示すために議論を実数バージョン、一般的な整数バージョンに拡張する。

続きを読む "二封筒問題のシミュレーション その1 基礎編"

2020-11-05 22:51:24 (JST) in シミュレーション Python | | コメント (4)

2020年5月 9日 (土)

「志村けん問題」を JAGS で解く その2 試行錯誤編

JAGS に慣れていないこともあり、「その1 結論編」に達するまでにはかなり試行錯誤した。その「苦労」を記録しておく。

JAGS は確率に関する Prolog みたいなものという認識で、それがおもしろいと思っていたのだが、「苦労」した結果、Prolog みたいに使うのは間違いかと思うようになった。

続きを読む "「志村けん問題」を JAGS で解く その2 試行錯誤編"

2020-05-09 05:28:58 (JST) in シミュレーション R | | コメント (0)

「志村けん問題」を JAGS で解く その1 結論編

新型コロナウィルス(COVID-19)により稀代のコメディアン・志村けん氏が亡くなった。その志村けん氏がまだ闘病中だったころ、新型コロナについて一つの確率的問題が提起された。

志村けん氏ほどの有名人が新型コロナに罹ったということは、感染者数は言われているよりもっと多いに違いない。…これは本当か。

…というのが、その問題のだいたいである。

「それは本当だ」というのを R 言語上のベイズ統計モデリングソフト JAGS を用いて示せたというのが本稿の主張である。

続きを読む "「志村けん問題」を JAGS で解く その1 結論編"

2020-05-09 05:25:43 (JST) in シミュレーション | | コメント (1)

2020年4月18日 (土)

JAGS でモンティ・ホール問題を解く

JAGS と R 言語の私の入門・練習として、モンティ・ホール問題を JAGS (rjags) で解いてみる。

続きを読む "JAGS でモンティ・ホール問題を解く"

2020-04-18 19:28:13 (JST) in シミュレーション R | | コメント (1)

2018年4月13日 (金)

Exhaustive Lock Dependency Emulator その3 修正とチェック

略して ELDE。マルチプロセスの最も簡単な lock/unlock 機構において、そのロックの依存を総当たり的に調べるプログラムを書いた。その1で「虚実行」も数え上げていたのを修正し、「実実行」のみを対象とするようにした。

前回は、意図しない「虚実行」を含めていたため、他の人がやらないような実装になり、その意味では個性があったかもしれないが、今回こそ、特に工夫のない「車輪の再発明」になっていると思う。ただ、前回の怪我の功名で、違う考え方で作った二つの実装が同じ結果を出すのを確かめることで、エミュレータの正しさを多少ともチェックしているのは優位点かもしれない。「証明」がないのは相変わらずではあるが、いくつかの例で、チェックはできた。

前回も書いたとおり、これはマルチプロセス環境を Perl 上でエミュレートするという話ではまったくない。プログラム自体は、シングルプロセスで終了する形をとる。

今回のアイデアのキモは、グローバルな単一ロックのみを扱うため、ロックは重ならず、プロセスをまたいでそれぞれのロックをシーケンシャルに整列して捉えることができるという点にある。その列をロック仕様として総当りで数え上げ、それに基づくよう実行していく。処理の重なりのうち、簡単なものは省いて効率化する。

なお、「プログラム」をコンテクストに関し「関数的(functional)」でなければならない…という条件を課すのは今回も同様である。すなわち、コンテクストが同じように(同じ lock/unlock 順序で)与えられれば、常に同じ「出力」をしなければならない。

続きを読む "Exhaustive Lock Dependency Emulator その3 修正とチェック"

2018-04-13 21:00:17 (JST) in Perl シミュレーション 関数型言語・定理証明器 | | コメント (1) | トラックバック (0)

2017年4月20日 (木)

過剰診断論に関するシミュレーション 中間報告

「過剰診断論」にいくつか疑問を持ち、シミュレーションを書いてその疑問を明らかにしたいと考えた。その過程で、がん患者には、基礎寿命とがん寿命があって、どちらかが尽きたとき死ぬというモデルを考えることになった。

まだシミュレーション開発の途中だが、「基礎寿命論」についてある程度開発したところで、行き詰まりを感じたため、とりあえず現在の進捗を報告することにした。

続きを読む "過剰診断論に関するシミュレーション 中間報告"

2017-04-20 16:22:40 (JST) in Perl シミュレーション | | コメント (2) | トラックバック (0)

2017年2月11日 (土)

眠り姫問題のプログラム

「眠り姫問題」は意志決定問題と人間原理という二つの分野で共通のテーマセッターとなっている有名な難問なのだそうだ。三浦俊彦『多宇宙と輪廻転生』によると、次のような問題である。

>
日曜日に、ある実験が始められる。まず、あなたは眠らされる。そのあとフェアなコインが投げられ、表か裏かによって、次の二つの措置が選ばれる。

場合A■表が出た場合 - あなたは月曜日に一度起こされ、インタビューされ、また眠らされ、ずっと眠り続ける。

場合B■裏が出た場合 - あなたは月曜日に一度起こされ、インタビューされ、また眠らされ、火曜日に一度起こされ、インタビューされ、また眠らされ、ずっと眠り続ける。眠りは記憶を消すほど深いので、目覚めたとき月曜か火曜かはわからない。

いずれの場合もあなたは、実験の手続きについてはすべてわかっているものとする。目覚めたときに自分が月曜にいるか火曜にいるか、そしてコインは表だったのか裏だったのかがわからないだけである。

ちなみにコイン投げがなされるタイミングについては融通が利く。コイン投げは、あなたが最初に起こされる前でも、月曜にあなたが目覚めた後でも、問題の論理構造は変化しない。

さて、あなたへのインタビューは次のようなものである。

問1■「いまは日曜日、実験開始直前である。場合 A である確率は?」

問2■「さあ、あなたは目覚めた。場合 A である確率は?」

問3■「さあ、あなたは目覚めた。今は月曜日である。場合 A である確率は?」

(p.235-236)


このうち問2と問3が「眠り姫問題」であるという。この答えには、二つの流派がある。問2 の答えに 1/2 と答える派と、1/3 と答える派である。

問2に 1/2 と答える派はたいてい、問3に 2/3 と答える。問2 に 1/3 と答える派はたいてい、問3 に 1/2 と答える。

それぞれの派について、その考えに基づくシミュレーションをして数え上げるプログラムを Perl で記述してみよう……というのが本稿である。

続きを読む "眠り姫問題のプログラム"

2017-02-11 19:24:07 (JST) in Perl シミュレーション | | コメント (1) | トラックバック (0)

2017年2月 5日 (日)

コーシー分布でブラック・ショールズ・モデル?

最初に断わるが、これは失敗した実験の記録である。

実験のアイデアは単純なもの。株価等のコール・オプションを求める 2項モデルの近似式としてブラック=ショールズ式が使えるが、2項モデルの話は当然、モンテカルロ法でやってもよいはず。そのとき、2項モデルでは、上か下かのランダム二択を使うが、その替わりに正規分布の乱数を使ったり、コーシー分布 (Cauchy distribution)の乱数を使ってみたら、どうなるかやってみよう……というのが今回のアイデアである。

ブラック=ショールズ式が正規分布のブラウン運動なのだから、正規分布の乱数を使ってみるのは、元の2項モデルと同じ値になりそうだ……とまず考えた。次に、それができるなら、株価の変動は、べき分布(冪分布)だとよく言われるが、べき分布の一つであるコーシー分布の乱数を使ってみたら、ブラック=ショールズ・モデルにコーシー分布を適用したものになるのではないか……と考えた。

結論を述べれば、正規分布の乱数を使うのは確かに2項モデルと変わらないように見える。モンテカルロ法はかなり粗い結果しか出ないので、そう見えるだけかもしれないが、そう言えそうに見える。一方、コーシー分布を使うのは、分割したときの「ボラティリティ」にあたる値をどうすれば良いかがわからず、うまく適用できなかった。その点から、この実験は失敗だと言える。ただ、コーシー分布を使うと、外れ値が多くなるため、元のブラック=ショールズ式で求めるオプション価格よりかなり高い価格が必要になることは、なんとなくわかった。

続きを読む "コーシー分布でブラック・ショールズ・モデル?"

2017-02-05 23:27:08 (JST) in Perl シミュレーション | | コメント (1) | トラックバック (0)

2016年8月27日 (土)

モンティ・ホール問題または三囚人問題の拡張とその確率操作シミュレーション

はじめに


近年、J. ローゼンハウスの『モンティ・ホール問題テレビ番組から生まれた史上最も議論を呼んだ確率問題の紹介と解説』という本が出た。この本は、モンティ・ホール問題について詳しく、この本が出る前に私が考えていた問題の拡張についても書かれてしまっていた。この本を読んで、一旦は、私がこれ以上、この問題について何か書く必要はないかと思った。が、それからしばらくして、私がやったことも少しは意味があるかと思い直し、私の思考の跡を備忘的に記録するため、ちょっとした確率モデルのシミュレーションに関する論考を足して、レポートにしておくことにした。

続きを読む "モンティ・ホール問題または三囚人問題の拡張とその確率操作シミュレーション"

2016-08-27 21:17:40 (JST) in Perl シミュレーション | | コメント (3) | トラックバック (1)

2011年11月18日 (金)

タロットの偶奇で易の卦を出す

トランプやタロットといったカードで易の卦を出すとき、一度出たカードは次には出なくなることから、カードの数のパリティー(奇数か偶数か)で卦を診ようとすると微妙に結果が偏ることになる。

本稿では、易の卦を出す簡単な方法がすでにいろいろある中、あえて複雑な操作を用い、この結果の偏りを減らす方法を考案する。

続きを読む "タロットの偶奇で易の卦を出す"

2011-11-18 22:57:26 (JST) in シミュレーション | | コメント (1) | トラックバック (1)

2011年7月 1日 (金)

Exhaustive Lock Dependency Emulator その2 wait_and_lock

その1の最後に「「虚実行」またはこの仕組みの大きなミスについて」として追記したようにこのフレームワークには大きなミスが見つかっている。以下は参考のために残しておく議論である。※


その1で、このフレームワークにおいて「入力待ち…は…特殊な枝刈りの仕方」ではないかというアイデアを書いた。本稿では、それを実装してみる。

理屈


入力待ちは、最も単純にはループして、他のプロセスが $context を変更するのを待てば良い。しかし、それは普通、非効率的で、このエミュレータだと、探索すべき lock 仕様の木の深さを無限に大きくすることになる。

もう少しマシな方法ということであれば、unlock したあと、次に他のプロセスが lock/unlock するのを待ってから lock する「wait_and_lock」と呼ぶべき機構を考えることができる。この方法を先のフレームワークで実現するには、 lock 仕様を見て、間に他の lock がなければ、それを枝刈りするだけで良い。とても簡易で、枝を伸ばすのではなく枝を刈るのだから効率的ですらある。

続きを読む "Exhaustive Lock Dependency Emulator その2 wait_and_lock"

2011-07-01 22:37:18 (JST) in Perl シミュレーション 関数型言語・定理証明器 | | コメント (2) | トラックバック (0)

2011年6月20日 (月)

Exhaustive Lock Dependency Emulator その1 並列処理の総当り

※最後に追記するようにこの記事には大きなミスが見つかった。以下は参考のために残しておく議論である。※


マルチスレッドまたはマルチプロセスの最も簡易な lock/unlock 機構において、その依存を総当たり的に調べるプログラムを(Perlで)書いた。

総当たり的なので、特に工夫があるといえるわけではなく、おそらく他の方が特に言及することなく為していることについて、たまたま私もプログラムする順番が回ってきたぐらいのことになると思う。「車輪の再発明」だが、調べるよりは自分で作ったほうが早い部類の話で、記号論理をやった人間にとって示唆に富む部分があるという印象を受けたので、ブログに書いておくことにした…といったところ。

これはマルチプロセス環境を Perl 上でエミュレートするという話ではまったくない。プログラム自体は、シングルプロセスで終了する形をとる。

アイデアのキモは、シングルプロセス環境ではあるがプロセスを順に何度も起動し、unlock があったときに環境をすべて保存し、lock があったときに以前 unlock された環境に切り換わると考えることにより、lock/unlock のシミュレーションができたと考える点にある。

続きを読む "Exhaustive Lock Dependency Emulator その1 並列処理の総当り"

2011-06-20 02:54:31 (JST) in Perl シミュレーション 関数型言語・定理証明器 | | コメント (3) | トラックバック (4)