hirax.net::Keywords::「モンテカルロ」のブログ



1998-11-29[n年前へ]

鴨川カップルの謎 

そうだ、京都、行こう


 京都の風物詩の一つに「鴨川カップル」がある。京都を流れる鴨川の川縁に、カップルが等間隔に並ぶ現象である。鴨川の三条大橋から四条大橋までがその舞台である。この鴨川カップルについては、いくつかの性質が知られている。

  1. 基本的にはカップルらは等間隔に座る。
  2. 暗くなるに従い、カップル間の間隔が狭まる。
  3. 電灯の近く、すなわち、比較的明るいところではカップル間の間隔は広がる。
  4. 夏はカップルの間隔が狭まり、冬はカップルの間隔が広がる。
  5. 夏はカップル数が多く、冬は少ない。
  6. 男性が連れ立って、しかも何人かで座っていると、その周りにはカップルはなかなか座らない。
 以下に、具体例を写真により示したい。なお、これは1998年の11/21日の17時前後に撮影されたものである。冬における測定のため、カップルの間隔は非常に広がっている。目測によれば15m程である。これが夏の夜であれば5m程にはなる。
鴨川カップルの例
いい雰囲気の2人

(四条大橋の上から撮影)
移動中の鴨川カップル
これは男同士。2人で語り合っている高校生男子。

(この後、1999.05.04午前中に撮影した画像も示す。午前でもあるにも関わらず、上の時より密度が高い。もちろん、夜の密度の高さはこんなものではない)

1999.05.04午前中に撮影した画像

 今回の目的は、「鴨川カップル」のこのような性質はなぜ生じ、そこに効いているパラメータを実測することである。

 まず、性質2,3(暗くなるに従い、カップル間の間隔が狭まる、電灯の近く、すなわち、比較的明るいところではカップル間の間隔は広がる)より、明るいと隣のカップルと離れようとする力が大きくなると予想される。また、カップル同士が離れようとする力、斥力、のバランスにより性質1(基本的にカップルらは等間隔に座る)が形成されていると考えられる。

 性質3(夏はカップルの間隔が狭まり、冬はカップルの間隔が広がる。)の季節による間隔の違いは性質4のカップル数の違いから来ているのかもしれないし、それ以外の何らかのパラメータがあるのかもしれない。性質4(夏はカップル数が多く、冬は少ない)はやはり「寒さ」のせいであろう。京都は本当に寒い。いくらアツアツのカップルとは言えども、寒いものは寒い(多分、想像だが)。当然、建物の中でのデートとなるだろう。自ずと、鴨川カップルは少なくなる。

 性質5(男性が連れ立って、しかも何人かで座っていると、その周りにはカップルはなかなか座らない)については、「男性の群れ」というのは普通のカップルに比べて非常に強い斥力が働いていると考えられる。この性質5に関しては、私の実体験を持って語ることができる。私と友人連中が鴨川の川岸に近づくと、座っている鴨川カップルが離れていく、という経験を何度もしたことがある。やはり、強い斥力が働くのだ。

 計算は全てMathematica3.0を使った。計算の例をMathematicaのNotebookで示す。また、計算の考え方を以下に示す。

計算方法
 鴨川の川縁を真上から見た所。画面上部が鴨川。画面下部が歩道。画面中央に街灯がある。そのため、画面中央が一番明るい。
 カップル達はこの辺りに座る。
対称性を考えて、画面の左半分のみを考える。また、赤い線上にカップルが座るものとする。
 その線上の明るさを模したもの。X=100の所が街灯の直下とする。

 このような明かりに照らされた状態で、カップルが照らされているとする。
また、他のカップルが他のカップルに見える明るさは距離に反比例するものとする。普通ならば、距離の2乗で反比例にしたいが、計算の簡単のため、こうした。
 こうしておいて、隣のカップルの存在感(=カップルの明るさ/距離)が左右で同じという条件をつけてやる。

 100m内にカップルが5組として方程式を解くとこうなる。棒グラフの先端の位置がカップルの座っている位置を示している。1組目は0m地点、5組目は100m地点、すなわち、街灯の直下である。
 明るい所ではカップルの間隔が離れているのが判ると思う。
 カップルの居心地(隣のカップルの存在感=隣のカップルの明るさ/距離)はいずれも、8という値である。カップルの居心地指数は少ないほど快適であることを示す。

 それでは、条件を振ってやってみたい。上からだんだん暗くなっていく。鴨川の半日である。また、カップル数はいずれも100m辺り5カップルである。

左から、真上から見た鴨川の川縁、左半分の明るさ分布、左半分のカップルの位置、カップルの居心地
20
16
10
8
6.4

 昼間はカップルが等間隔であり、夕方になり、街灯で照度分布ができると、カップルの間隔も分布ができている。といっても、そういう条件で解いているのだから、当たり前だが。
 また、カップルの居心地は暗くなった夜の方が快適であるのがわかると思う。それは、カップルの様子を見ていても、その通りであると思う。しかし、快適であるからといって、カップルが何をやってもいいという意味ではない。そこは、はっきりしておきたい。

 今回は、カップル数を全て同じにしたが、逆に同じ居心地指数であるという条件下で解けば、夜の方がカップルが多いという性質も再現できる。これらの計算モデルと実験を比較していくことにより、鴨川カップルの性質を実証していくことができるだろう。なお、今回は計算の簡単のため、男性連れの効果は組み入れていない。また、いつかもう少しまともな計算をしてみたい。

 計算を行った感想だが、実に不毛な計算であった。気が向けば、モンテカルロシミュレーションによる鴨川カップルの検証も行いたい、と思う。が、気が向く日はきっと来ない。

1999-07-22[n年前へ]

失楽園殺人事件の犯人を探せ 

文章構造可視化ソフトのバグを取れ

 今回は
夏目漱石は温泉がお好き? - 文章構造を可視化するソフトをつくる - (1999.07.14)
の続きである。やりたいことは以下の3つ

  1. WordFreqのバグを取る。
  2. 定量化に必要な数値を出す。
  3. とにかく遊んでみる。
である。まずは、プログラムのバグを取ろう。前回、プログラム中にバグがあると書いたが、問題は私がbmonkey氏の正規表現を使った文字列探索/操作コンポーネント集ver0.16の仕様を勘違いしていたことによるものだった。ファイルにGrepを書けた際に、テキストファイル中の一行中に複数の適合する単語が存在した場合に、本来、一番最初に適合した単語の文だけが「適合する単語があったよ」と知らせてくれるのであるが、それを単語全部について教えてくれるものと勘違いしていたのだ。従って、一行中に探す単語が複数登場する場合には結局1回分しかカウントされなかったのである。まずはそれを直してみたい。「GrepでMatchした行中に改めて目的の単語が何回登場するかを調べる」という2段階にすることで今回の問題は解決する。

WordFreq.exe 1999.07.21Make版 wordfreq.lzh 338kB

 本WEBサイトのモットーは「質より量」である。...これはちょっと何だな...「下手な鉄砲も数撃ちゃ当たる」...これもちょと...「転がる石に...(もちろん日本版でなくて西洋版のだ)」といった方がニュアンスが良いかな?... 転がる石は精度を求めないのである。数をこなせば精度が悪くてもいい方角に転がっていくと思っているのだ。モンテカルロ理論である。「遊び」だし。というわけで、これはバグがあった言い訳である。

 さて次は、「定量化に必要な数値を出す」である。前回の題目で使った「ホトトギス」版「坊っちやん」のダウンロード元のWEBの作成者である木村功氏より、前回の話以後にいくつかアドバイスを頂いた。それが「定量化するにはどのようにしたら良いか」ということであった。それについては、最低限の機能をつけてみた。やったのはただひとつ。出現頻度の分散を計算するようにしただけである。この数値と出現平均値を用いて、色々な文章を解析すれば、このプログラムの返す値の出現分布の分散・平均値・有意水準などを導くことができるだろう。色々な時代の、色々な作家の、色々なジャンルの文章を解析し、それらから得られた値を調べてみればもしかしたら面白いことがわかるかもしれない。

 それでは、今回のプログラムを使って遊んでみよう。

 今回用いるテキストは小栗虫太郎の「失楽園殺人事件」だ。
青空文庫 ( http://www.aozora.gr.jp/)
から手に入れたものだ。今回のタイトルどおり、「失楽園殺人事件」において「犯人」を探してみよう。

「失楽園殺人事件」において「犯人」を探したもの

 ラストのほうに向かうに従い犯人の登場が増えて、山場を迎えているのがわかるだろう。「犯人」で検索したら次は探偵の番だ。「法水」で検索し、探偵がきちんと働いているか見てみよう。

「失楽園殺人事件」において「法水」を探したもの

 なかなか出ずっぱりで活躍している。もちろん、探偵役もラストでは活躍しているようだ。

 ここまで見ていただくとわかるだろうが、画面は前回のバージョンとほとんど同じである。前回は、1物理行あたり検索単語は1個までしか見つからなかったが、今回はきちんと複数見つかっているのがわかると思う。1物理行中でもきちんと結果が出るようになったおかげで、文章中から「。」を検索すると、物理行(段落と近いもの)中に含まれる「文」の数を調べることが出来る。妙に長い文節の出現頻度などを調べることが出来るのだ。こういったものは定量化にふさわしいのではないだろうか?

「失楽園殺人事件」において「。」を探したもの

 また、C++プログラマーのあなたは自分のプログラム中から「//」などを検索すると面白いのではないだろうか。コメントの出現頻度が手に取るようにわかるだろう。

 というわけで、今回はバグ修正のご報告である。

2001-12-17[n年前へ]

モンテカルロでビンゴ大会 

 「できるかな?」更新。 気づけば251回目。間もなく256回。もうすぐ全てがFになります。もちろん、今回の話のきっかけは土曜日のビンゴです。(リンク

モンテカルロでビンゴ大会 

「幹事」のための確率講座

 先日、会社の後輩が結婚したので、その結婚式の二次会が新宿で開かれた。会場は、花園神社近くにあるこじんまりとした地下のバーで、多分4〜50人くらいが普通に座ると一杯になる程の広さの店だろう。

 そんな広さの店だったのだけれど、主賓のカップルの人徳だろうか、100人弱くらいの人達がその狭い店中に溢れていた。私達(『会社の先輩』と呼ばれる人達)はその一角に陣をとり、ビールを飲みながらカメラ談義などをしていた。EOS-1Digitalや50mmF1.0というレンズを前にして、私の手元にあるSpyzは段違いに情けなく、田代まさしの事件もあったせいで、恥ずかしさすら感じさせるほどだった。

 そして、その二次会は四時少し前に始まったのだが、ほどなくビールとワインが進んだ四時半頃にはお決まりのビンゴ大会が始まり、私達もシートを片手に司会者の進行に耳を傾けた。
 

5×5のビンゴ用のシート

説明も要らないだろうけど、読み上げられた数がシート上にあれば、
穴を開けて、穴が一直線に並べばビンゴだ

 (私を知らない人からは)クールと言われる私でも、何故かビンゴのシートを手にするとドキドキしてしまう。景品がどーしてもどーしても欲しいー、というわけではないのだけれど、やっぱりビンゴのシート片手にドキドキしてしまう。そんなドキドキは私だけではなくて、私の周りもみんなビンゴのシートを手にドキドキしているし、人間でなくてロボコップのようだと評された(評したのはワタシだが)こともある人でさえも、ビンゴのシートを手に司会者の声に耳を澄ませているのだから、きっとそれはみんな同じなのだ。

 そして、そんな中、司会者は次々と数字を読み上げていった。が、何回新たな数が読み上げられても私の手元のシートはなかなか穴が増えていかないのである。クジ運が良いとは言えない私のシートがビンゴになかなか近づかないのはいつものことなのだけれど、ワタシの周囲の人もまた同じように全然穴が増えていかないのである。そして、それどころか実は会場全体の人がそうだったのである。全然「リーチ」と声を上げる人もいなくて、狭い会場で100人弱もの人がいるにも関わらず、この遅々たる進行状況はかなり異常なのではないか、と感じてしまうほどなのだ。

 で、そのゲームの最中に手元のビンゴのシートを眺めながら私は考えた。なんで、こんなに時間がかかるのだろう?私だけでなく、ここに集う全ての人は不運の持ち主なのだろうか?不運の持ち主が100人集まるとは、これは一体何事だ?不運の会か?と、結婚式の二次会にはとても相応しくない想像さえしていた。
 で、そんな相応しくない想像をしながらそのシートを眺めていると、ふと気づいたのである。「ん?99?えっ?きゅーじゅきゅうー?」 この不安な気持ちは何だろう?手元のシートは5x5で高々25個の数字しかないのに、書いてある数は99までもある。ということは、呼び上げられる数字はきっと01から99までの100個。ということは、呼び上げられる数字に対して、手元のシートの「数字」の数は1/4程しかない。それでは、そもそもシート上になかなか穴が開いていかないのではないだろうか?そのペースで一体何回数字を読み上げれば、シート上で穴が一直線に並ぶのだろう?そして、あの何個もある景品達は一体何時になれば全部売れていくのだろう?う〜ん、ビールが回った頭では全然判らないぞー。いや、きっとシラフでも判らないぞー、そして、貸切の時間を考えるときっと司会者もドキドキしてるぞーと思ったのである。

 結局、最初にビンゴになった人が出たのが、ビンゴを始めてから20分以上過ぎてからだったと思う。そして、10個ほどの景品が配り終えられたのはビンゴが始まって一時間程した頃だった。つまりは、二次会がお開きになるくらいの時間だった。司会者はかなりヒヤヒヤしていたようだった。
 

 そして、帰りの電車の中で私は考えた。もしかしたら、ビンゴ大会を開く幹事には、確率統計の知識が必要とされるのではないか、と。何人の人達が会場にいて、景品は何個あって、ビンゴのシートには1から何までの数が書かれているから、一分に一個の数字というペースで読み上げていけば、ビンゴ大会にかかる時間は何分だ、と概算できるくらいでないともしかしたらマズイのかもしれない、と思ったのである。少なくともヒヤヒヤしないためには、そんな概算をしておくのも良いかもしれない、と思ったわけだ。
 

 で、そんな司会者・幹事のために、今回試しにビンゴの確率論を計算してみることにした。といっても、私は確率・統計がどうにも苦手なので、モンテカルロシミュレーション(別名下手な鉄砲も数打ちゃ当たる法)である。つまりは、何回もサイコロを振ってシミュレーションしてみただけの話である。PCの中で繰り返し、ビンゴ大会を開催してみただけなのである。ビンゴというギャンブルの確率を計算するのだから、それはもうモナコ王国誇るモンテカルロ・シミュレーション以外ないと思うのである。
 

 そんなわけで、下に示すのが「何回目でビンゴになるか一万回試行したときのモンテカルロシミュレーションを行ってみた結果」である。実際にビンゴ大会を一万回したらものスゴイ時間がかかるが、PCの中だったら一瞬ですむのが素晴らしいところである。ちなみに、ビンゴのシートの条件は、シートに書かれている数字が

  • 01〜24
  • 01〜49
  • 01〜74
  • 01〜99
の場合の四種類を計算してみた。さて、一体どんな計算結果になっただろうか?
 
何回目でビンゴになるか一万回試行したときの結果
横軸が何回目
縦軸がその回でビンゴになった人の割合
シートに書かれている数字が01〜24までの範囲の場合
シートに書かれている数字が01〜49までの範囲の場合
シートに書かれている数字が01〜74までの範囲の場合
シートに書かれている数字が01〜99までの範囲の場合

 これを見ると、例えば、シートに書かれている数字が01〜24までの範囲の場合は、12回目位で半数の人がすでにビンゴになっていることが判る。一分に一個の数字というペースで読み上げていけば、5分過ぎには半数が終了している、というペースである。かなり速いペースである。

 それに対して、シートに書かれている数字が01〜49までの範囲の場合ともなると、25回目位でやっと半数である。とはいえ、一分に一個の数字というペースでも、12,3分で半数がビンゴだから、これもやはりかなり速い進行だ。

 ところが、さすがにシートに書かれている数字が01〜99までの範囲の場合ともなると、半数がビンゴになるのが、60回目位なのである。先程の数字を読み上げるペースであれば、時間にして30分である。景品の授与の時間などを考えると、かなり時間がかかってしまいそうだ。きっと4,50分ほどはかかることだろう。実際、先日のビンゴ大会はその程度の時間がかかっていたわけである。

 そこで、試しに先日のビンゴ大会と同じ人数でモンテカルロ・シミュレーションをしてみた結果が下である。会場に100人の人がいた場合のビンゴになる人の回数(時間)に対する割合である。
 

会場に100人の人がいた時のビンゴになった人の割合
横軸が何回目
縦軸がその回でビンゴになった人の割合
シートに書かれている数字が01〜24までの範囲の場合
シートに書かれている数字が01〜49までの範囲の場合
ートに書かれている数字が01〜74までの範囲の場合
シートに書かれている数字が01〜99までの範囲の場合

 この結果だと、会場に100人の人がいた場合、最初のビンゴになる人は

  • シートに書かれている数字が01〜24までの範囲の場合 →  4回目
  • シートに書かれている数字が01〜49までの範囲の場合 →  8回目
  • シートに書かれている数字が01〜74までの範囲の場合 → 10回目
  • シートに書かれている数字が01〜99までの範囲の場合 → 27回目
である。この結果から、「シートに書かれている数字が01〜99までの範囲の場合」というのはかなり時間のかかる設定であることが判る。逆に、「シートに書かれている数字が01〜24、あるいは01〜49までの範囲の場合」というのはむやみやたらに速く、これもまた盛り上げに欠けそうである。なるほど、「シートに書かれている数字は74くらいまで」が盛り上げるためにも、時間が超過し過ぎないためにも良い数字である、ということが判るわけだ。こんな風にビンゴ大会のモンテカルロシミュレーションを行っておけば、大体の時間進行の目安が判る、ということになる。

 というわけで、これからの忘年会・パーティーシーズンに向けて、「幹事」は電卓を叩いて会費の計算をするだけではなくて、確率・統計の知識もあると便利かもしれない、モンテカルロでビンゴ大会の予行練習をしてみるのも良いかもしれない、と思ったのである。とはいえ、そんな確率統計を計算し尽くした「幹事」もちょっとイヤかも、とビールが回った頭で想像したりしたのだった。

2009-07-03[n年前へ]

例題・説明文付き色処理・シミュレーションMathematicaライブラリ 

 Mathematicaで作った色処理関連の関数群・それらを使いさらにオブジェクト指向に書いた(モンテカルロ光伝播シミュレーション機能付き)クラス群のライブラリに例題や説明文を付けたものを作りました。そのライブラリを記述したノートブックを、ColorLib_amature_on_7.0_1.01.nb (5.6MB) として、サイト上に置いておきます。

 Mathematicaを持っていない方でも、Mathematica Playerを使えば、Mathematicaのノートブックを眺めることができます。ですから、もしも題材に興味がある方ならば、「なるほど、この処理はこんな風に書いているのか」「ここはこう直した方が良いんじゃないのか」など、きっとそれなりに楽しむことができると思います。

 たとえば、Mathematicaで書いたライブラリを他の言語で書き直そうとしたときに、書きにくいと感じる部分こそが、Mathematica「らしい」だろうと思います。もちろん、これはMathematicaに限らない、プログラム言語にも限らない「個性」ということに関する一般的な話です。

例題・説明文付き色処理・シミュレーションMathematicaライブラリ








■Powered by yagm.net