月別アーカイブ: 2013年3月

[作ってみた] [プログラミング] 反応拡散方程式で遊ぶ


我々には少し先までしか見えないが、そこになすべきことをたっぷりと見付けることができる。
―アラン・チューリング

タテジマキンチャクダイ

タテジマキンチャクダイ

以前,セル・オートマトンに関係するプログラミングで作った反応拡散方程式シミュレーションのお話です.
眠らせておくのももったいないので,ここで紹介しておきます.

反応拡散方程式というのは,ある空間上での何かの物質の濃度の変化を表現した微分方程式です.もともとは化学の分野で反応をモデル化する際に考えられたものですが,その解が複雑な振る舞いをすることから様々な分野で興味の対象となり,実世界の模様との関連性が指摘されたりもしています.

今回はこの反応拡散方程式のシミュレータの紹介です.まずは動画をどうぞ.

この模様はチューリングパターンと呼ばれ,動物の模様や植生の分布などに類似の模様が見られることがあります.

今回扱う反応拡散方程式は1980年代に提案されたGray-Scottモデルと呼ばれるもので,以下の形に書き下されます.

  \frac{\partial u}{\partial t} = D_{u}\nabla^2u - uv^2 + F(1 - u)\\   \frac{\partial v}{\partial t} = D_{v}\nabla^2v + uv^2 - (F + k)v

 

uとvという2種類の物質(?)についての式で,左辺が変化の度合い,右辺第1項が拡散,第2項が反応,第3項が生成と消滅に対応しています.Fとかkとかはパラメータです.

解析的に解けなさそうな式ですが,差分方程式にしてしまえばコンピュータで解くのはそれほど困難ではありません.得られるパターンが独特かつパラメータによって多様に変化するので,数値解析の例題としてはなかなか楽しい部類に入るのではないかと思います.

私がこの反応拡散方程式にはじめて出会ったのは,まともにプログラミングを学んだ少し後の頃でしたが,当時紹介されていた動画などを見てすっかり気に入ってしまった記憶があります.

1つは「ぬるぬる」している点です.特にはじめて触った頃のプログラミングというのはテキストや数式を扱うことが多いため,どうにも真四角でお固い世界だと錯覚しがちです.こんな「ぬるぬる」は当時の私にとってあまりコンピュータっぽくなかったというのがあります.
もう1つは,式が簡単であることです.すごく複雑なものが複雑な式から出てくるならまあわかりますが,この式自体はそれほど複雑ではありません.
各部分では単に隣接した点の情報のみから変化しているだけなのですが,それでも全体としてパターンが現れるというのはなかなか面白いと思います.

プログラムを置いておきます.手元の 64bit Windows 用(7で動作確認済み)なので,実行できない方は一番下のソースコードからコンパイルしてみて下さい.
マウスでドラッグした部分が消せます.キーボードの左2列(1,2,q,w,a,s,z,x)でパラメータの変更,iキーで分布を初期化できます.

rd_system_2 [追記: 録画用でウィンドウが小さいままだったので大きくしました.]

rd_system_32bit [さらに追記: 32bit版も用意しました]


私の大学の機械工学科には「シミュレーション & ビジュアライゼーション演習」という授業があります.この授業では何らかのシミュレーションの可視化に挑戦します.

実際に扱う対象は連続体というよりはどちらかというと剛体系の人が多いかと思いますが,何にしても可視化してみるというのは楽しいもので,あれこれ計算した結果が絵になって出てくる達成感がある気がします.
私も昨年度TAで参加したときに楽しませてもらいました.

プログラミングでちょっと遊んでみたいという人は,マイコンのような動くものにつなげてみるか,あるいはこういう可視化のできるもので何か作ってみると手ごたえを感じやすいと思います.


実装はC++/OpenGL+freeglut,方程式は1次の陽解法です.私はこういうものを作るときはたいていC# & 速度の必要な部分のみC++で実装してしまうのですが(実はこれもそうでした),今回は公開する前に移植しやすいようにC++で書き直してみました.

ソースはgithubにあげておきます.
githubを使うのははじめてなので,何か不具合があったら申し訳ございません.

ソース


確率の問題再考 「ある家庭の子供2人のうち,1人は男であることがわかっている.このとき…」


「ある家庭の子供2人のうち,1人は男であることがわかっている.このとき,もう1人が男である確率は?」

5725091674_9d1f4a5688_o

確率の分野でとても有名な問題のひとつの表現です.確率の入門書に限らず,この手のパズルを紹介する書物などでもよく見かけ,またインターネット上の様々なコミュニティで定期的に話題になります.
Yahoo!知恵袋でも検索をかけると数十件程度同じ内容の質問が並んでいたりします.テレビ番組で取り上げられたこともあるようですね.

なんやかんやと炎上したあげく,答えは1/3だという結論に達するのが定番の流れです.

私はこの問題,いつも間違ってるんじゃないか?と思っています.少なくとも問題文に矛盾があって,答えを1/3とするのは乱暴すぎるような気がしています.


まず挙げられる(間違いとされる)答えは

「性別なんてもう片方の性別には関係していない.だから1/2だ」

というものです.これに対する反論はだいたい以下のようになります.

「想定されるパターンは(男,男),(男,女),(女,男),(女,女)の4種類である.このうち4番目は問題文より除外されるので,残り3パターンから考えて1/3だ」

この説明は一見正しそうに見えます.ただ,上の説明で問題文の「もう1人が男」を考えるとどうにも不穏な空気が漂い始めます.特に(男,男)のときのもう1人ってどっちでしょう?


問題文を見てみると,問題文前半では単に「1人は~である」という表現が使われているだけです.これは(答えを1/3とする文脈では)「~という人が1人以上いる」と言っているだけであり,特定の人のことは何も記述していません.じゃあその後に続く「もう1人」は?と考えると,そんなものは定義できないことがわかります.
(問題文のつじつまをあわせるなら,「1人は男である」を特定の人にすることになり,答えは1/2になるでしょう.この場合は上の誤答とされていた表現もすんなりくると思います.)

この記述のおかしさは男女というどちらも起こりそうな現象で考えると気づきにくいですが,もっと確率の偏った出来事に置き換えて書けば雰囲気が変わります.

「太陽と月のうち少なくとも片方は東から出て西に沈む.もう片方は~」

と書くと,いやいや,もう片方なんてないでしょう,となると思います.(前半の文には特に間違いはありません.)

出題者の意向通り答えを1/3としたいなら,問題文は「両方男である確率は?」としないとおかしくなります.細かい違いのようですが意味が全然変わってきます.

 

以前Slashdotに載った記事で「子供が二人いて、(少なくとも) 一人は火曜日生まれの男の子である。もう一人の子供も男の子である確率は ?」という問題を扱うものがありました.

問題の原文は “I have two children, one of whom is a son born on a Tuesday. What is the probability that I have two boys?” となっており,問題はなさそうです.
ところが英語版の記事に転載された段階で “What’s the probability that my other child is a boy?“となってしまい,ここから変な話が始まってしまっています.

(ちなみに原文での答えは13/27になります.これは火曜日という一見どうでもよさそうな条件が答えに影響するという点に面白さがある,と紹介されています.考えてみて下さい.)


まあこんなのは言葉遊びだと言われればそうかもしれませんが,一度問題を正しく把握してしまえばあとは適当な手段で計算するだけなのであって,その段階に落としこむまでのほうが大事であることはよくあることではないかと思います.

私が一番気になったのは,こういう質問に答える側の人があまりこういう議論(問題文に矛盾がある,とか)をしないのだなと思ったことです.元が有名な問題なのでたぶんどこかで聞いた/議論した答えを輸入しているのだと思いますが,もし正しい答えとされるものを十分な吟味なしに「正しい答え」として広めているのであれば,それは自分の出した答えが間違っている以上に危険なことではないかと私は思います.


後輩向け: 卒論の研究室の選び方まとめ


図書館

どの本をとるべきか?

ちょっとした事情でwebサーバーを止めていましたが,復活させました.

私の大学の工学部機械系2学科は4年生の4月に卒論の研究室配属が行われます.研究室からすれば毎年の行事ですが,当の4年生にしてみれば大事なイベントです.
4年生は例年この時期になるとどの研究室がいいかとか,この研究室は誰が志望しているだろうかとか,そういう話があちこちで聞かれるようになります.

一方で,いったい何を基準に選べばいいのか4年生にはよくわからないところもあります.これは研究室が遠くて雰囲気が伝わりにくい(らしい)ことと,そもそも研究生活をしたことがない以上何を重視すればいいのか知りようがないというのがあると思います.

もちろん研究テーマや研究室の専門は大事ですが,機械系は研究室の数がとても多く,また興味のある内容が広い人もいるため,なかなか決めきれない人も多いと思います.
かなりの人数が修士課程まで進むことを考えると,研究室選びというのは大学時代の後半3年間を決める大事なイベントでもあるわけです.

というわけで,新4年生向けに研究室選びに役に立つかもしれない情報をいくつか集めてみました.


念の為に言っておきますが,ここの内容は「何がある研究室は悪い」とか「こういう性格の研究室が良い」とかそういうことを書くつもりではありません.(なるべくニュートラルな立場を取ろうと努めています.)
選ぶときの目安としてどんな違いがあるのかの例を見せられたらと思っています.


まず身近なところで,私の指導教員がいくつか指標を用意してくれています.

  1. 4年生が修士で同じ研究室に進学しているか?
    修士の定員が少ない場合や,研究室が外部に有名で外部受験生が多い場合など例外もあります.また機械情報は(というか情報理工学系は?)院試の出願時に修士の指導教員まで決めてしまい時間がないため,基本的に卒論配属とおおよそ同じ志望になっていると思います.
  2. OBが研究室に出入りしているか? OBとの交流が活発か?
    OB以外にも,他の研究室の先生やメンバーなどとの交流も聞いてみましょう.つながりをもっている研究室もあります.
  3. 教授との相性
    人間同士なので,あまり他人の意見に流され過ぎないように.

 

next49さんのブログの「大学院修士向け研究室情報チェックリスト」にも,研究室選びについて様々なことが述べられています.修士向けとありますが卒論生向けでも問題ありません.この方は大学の教員で,他にも数多くの卒論生向けのエントリー研究全般についてのエントリーがありますので参考になるかと思います.

いくつか抜粋してみます.

  1. 実験系か理論系か。拘束時間や研究のスタイルが大きくことなる
    実験系は分野にもよりますが,機械の都合や故障などで一時的に時間が制限される場合があります.
    両方扱う研究室もありますが,片方だけの場合はもう片方とどういう関係を持ってるのか調べてみてもいいかもしれません.
  2. そもそも研究室のメンバーは何人か?
    人数が多いと研究室内でいくつかの研究グループに分割されていたりします.指導教員との距離感に影響します.もちろん人によって丁度良い距離があると思います.
    学生が多ければ教員の人数も増えますが,どちらかに比率が偏っている場合は,どういう理由があるのか考えてみてもいいでしょう.
  3. 管理か放任か
    機械系でコアタイムのある研究室はそれほどないと思いますが,週次イベントの数や時間はまちまちです.
    たいてい週のどこかで研究会があります.それ以外にもグループミーティングがある場合なども多いです.他にも例えば機械情報(正確には知能機械情報学専攻)の研究室は必修科目として研究室輪講があります.
  4. メンバーの多様性はどうか?(出身校、学部は、属していたサークル、人種、出身国、地域など)
    留学生の人数や結びつきの強い国などにはけっこうばらつきがあります.
    また,修士課程などで複数の枠を持っている研究室があります.機械系に近い分野だと創造情報学専攻,学際情報学府,バイオエンジニアリング専攻などがあります.研究室の多様性もそうですが,院試の入り口が複数になる場合もあります.

 

他にも,せっかくなのでいくつか見ておくとおもしろいかなと思うものを挙げておきます.

  1.  卒論生の面倒を見る人
    教授や准教授であったり,助教であったり,あるいはドクターであったり,比率は研究室で様々です.
  2. (研究テーマ設定などで)どれくらいの自由度があるのか?
    例えば研究室として大きなプロジェクトに関わっていたりすると,4年生もそれに合流して研究の一部を担当したりすることがよくあります.これもどちらのスタイルがよいかは個人差があります.
    テーマと問題点が決まっている方がもちろん研究は進みやすく,おそらく知識の吸収もしやすくなります.一方でテーマと問題点の設定というのは研究においてとても重要なプロセスで(一番大事という人もいる),避けては通れません.一方でそれには深い知識が必要で…と,鶏と卵みたいな関係になっている気がします.
  3. 研究室の入りやすさ
    「部外者は基本的に禁止」から比較的開放的な研究室まで様々です.研究室の方針が垣間見えます.
  4. 同期のメンバー
    後輩の好きな先輩というのも多分たくさんいますが,なんだかんだで困ったときには同期が一番頼りになります.仲のいい人がいるからというのも,必ずしも理由にならないわけではないと思います.
    これもきっと性格によりますね.

 


他にも違いを考えだすときりがありませんが,入ってみないとわからないこともたくさんあるので,あんまり深く悩みすぎないようにしましょう.研究室の形態も毎年どんどん変わっていきます.
先生方は皆とんでもなく優秀で,やりたいと思えばいくらでも力になってもらえるはずです.

研究室選びと4月からの研究生活,肩の力を入れすぎずにがんばってください.