15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

U-TOKYO APAdvent Calendar 2018

Day 15

Turingパターンでメリークリスマス

Last updated at Posted at 2018-12-14

はじめに

U-TOKYO AP Advent Calendar 2018の15日目の記事です.
クリスマスまであと10日なので, 今日はTuringパターンを作ってお祝いします.

Turingパターンとは, 魚の斑模様や縞模様のような自己組織化によるパターン(自然界に多い)の総称です.

Mbu pufferfish - Wikipedia

シマウマや熱帯魚や蝶の模様が同じモデルで説明できるというのは興味深いですね.
最近は人工生命(ALife)の文脈で登場することも多いようです.

名前からお気づきの方も多いと思いますが, これを発見したのは, Turingマシンでお馴染みの数学者Alan Turingです.
彼は晩年に数理生物学にも取り組んでいたようで, 1952年に"The Chemical Basis of Morphogenesis"(形態形成の化学的基礎)を執筆しています.

Turingパターンは反応拡散方程式というものを解くことで得られます.
私は分子生物学に詳しくないのでよくわかりませんが, 体表に存在する複数種類の色素が反応拡散方程式で仮定されるモデルに従っているのでしょうか.

拡散方程式

まずは拡散方程式を導入します.
位置$r$における拡散物質の密度を$u$, 時間を$t$とすると, 密度分布の時間発展は次の拡散方程式に従います.

\frac{\partial u(r,t)}{\partial t} = D_{u}\nabla ^2u(r,t)

$D_{u}$は拡散係数です. $u,r,t$に依存する場合もありますが, ここでは定数とします.
また, 以下では$u(r,t)$を単に$u$と書きます.
$\nabla ^2$はラプラシアンと呼ばれる演算子で, 「勾配の発散」を意味します. 物理では非常によく使います.
一言で言うと, その物質の濃度の差が無くなる方向に拡散するときの強さのようなものです.
ちなみに, 熱伝導方程式も同じ形で書けます.

このままでは, お湯の中に入れた味噌が全体に拡散して終わりなので, 別の物質との反応によって物質の濃度が高くなるような項を考えていきます.

Gray-Scottモデル

Gray-Scottモデルは次のような仮定のもとで反応拡散の様子を考えます.

  1. この系では, 一定の補充率(feed rate)$f$で餌である物質Uが追加されるとします
  2. 2つの物質VとVが1つの物質Uから物質Vを作るとします
  3. 物質Vは一定の減量率(kill rate)$k$で不活性物質Pに変化します
    バクテリアVが餌Uを食べながら増殖していく過程を想像するとわかりやすいかもしれません.

反応式でまとめると次のようになります.
U + 2V → 3V
V → P

反応拡散方程式

先程の拡散方程式と反応式から次の反応拡散方程式が導かれます.

\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

ともに第1項は拡散方程式から, 第2項は反応式と反応速度論からわかります.
第1式の第3項は補充項, 第2式の第3項は減量項です.
これを解くことでUとVの反応と拡散の様子がわかります.
Reaction diffusion simulationでは, $f$と$k$を変えてインタラクティブに時間発展を観察することができます.

数値シミュレーション

Pythonでの実装がこちらにあります.
https://github.com/alifelab/alife_book_src
ソースコードの解説は文献[1]をご参照ください.

設定ファイルを少し変更してgrey_scott.pyを実行すると…?

matrix_visualizer_fragment.glsl
uniform sampler2D u_texture;
varying vec2 v_texcoord;
void main()
{
    float r = texture2D(u_texture, v_texcoord).r;
    gl_FragColor = vec4(1-r,r,0.2,1);
}

greyscott.gif

このようにクリスマスカラーのTuringパターンができました!!
これはストライプの例ですが, パラメータを少し変えるだけで全く違う模様になっておもしろいので, いろいろ試してみてください.

おわりに

クリスマスまで, 引き続きU-TOKYO AP Advent Calendar 2018をお楽しみください!
スクリーンショット 2018-12-15 6.56.46.png

参考文献

[1] 作って動かすALife ――実装を通した人工生命モデル理論入門, 岡瑞起 他, O'Reilly, 2018.

[2] 生物にみられるパターンとその起源 非線形・非平衡現象の数理2, 松下貢 編, 三村昌泰 監修, 東京大学出版会, 2005.

15
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?