Title: チューリングパターンとは
Date: 2019-04-04
Category: 生物学
Tags: 生物学, Bioinfo
Slug: turing_pattern
Authors: Naoto Yamaguchi
Summary: チューリングパターンの解説
システム生物学の授業が書くことになったきっかけです。 hatenablog に書いたところ数式を上手く表示できず書き途中であったため、こちらで書きました。hatenablog の方に、意外とアクセスがあったので、折角訪問してくださった方にちゃんと見ていただきたいと思いました。hatenablog の方は放置していてひどいです。こちらのサイトも見た目等変なところが多いですがご容赦下さい。そのうち直します。
実装は、以下のサイトを参考にしました https://ipython-books.github.io/124-simulating-a-partial-differential-equation-reaction-diffusion-systems-and-turing-patterns/
こういう模様、パターンのことをチューリングパターンと言います。チューリング波、反応拡散波という言い方もあります。
そして重要なのは、以下の 2 点
- このパターンはある条件を満たす化学反応システムが自発的に生み出す周期的なものであるということ
- 模様(=波)の仕組みは、反応拡散方程式で数学的に表せる!! ということ
- この模様は、生物によく見られるものであり、一部の生物では、確かに反応拡散系によってこの模様が作られている!! ということ
遺伝子だけで決まる訳ではない
これは化学反応によって自発的に起こるパターンで、生物にも見られる!!
※ 画像はイメージです。
こちらからお借りしました。チューリング波(反応拡散波)を理解したい
| 実際の生き物に見られる模様のパターン | |
|---|---|
ことの始まりは、イギリスの数学者アランチューリングが 1952 年に発表した論文で、「生物の模様は波によって作られる」という仮説。です
生物の体の表面では化学反応が起きており、反応を活性化する因子と抑制する因子の広がる速さが異なることで「波」が生じ、模様が作られる
https://www.jst.go.jp/pr/jst-news/pdf/2015/2015_04_p08.pdf という考え方。
1952 年に、イギリスの代表的な数学者でコンピュータ科学の生みの親でもあるアラン・チューリングが、「2 つの仮想的な化学物質が、ある条件を満たして互いの合成をコントロールしあうとき、その物質の濃度分布は均一にならず、濃い部分と薄い部分が、空間に繰り返しパターン(反応拡散波)を作って安定する」ことを、数学的に証明した。1970 年代に数人の数学者がチューリングの方程式を 2 次元でシミュレーションしたところ(チューリングの時代はコンピュータがなかった)、方程式の定数(仮想的な化学物質の性質)を少し変えるだけで、シマウマのストライプ模様もキリンの網目模様も、豹の斑点模様も作り出せることを発見した。
https://www.brh.co.jp/seimeishi/journal/011/to_1.html 天才か...
簡単に例えてみると... 2 つの赤い物質(A)と青い物質(B)があって、この 2 つの関係が、
-
赤い物質が増えると、自分(赤い物質)をより増やすようになる(=赤が自分を「促進」)
-
赤い物質が増えると、青い物質を増やすようになる(=赤が青を「促進」)
-
逆に青い物質が増えると、赤い物質を減らすようになる(=青が赤を「抑制」)
ような関係で、
-
とき、ランダムに赤青がある状態からスタートして、ある程度時間が経つと、安定した赤青模様のパターンができる!ということである。
上記のように初期状態やパラメーターによって色々な模様ができます。
白黒でも良いですが、画像に合わせて赤青にしました。
この関係は、食物連鎖の一部に例えてみるとわかりやすいでしょう全然現実世界に沿っていないとは思いますが...
- ネズミが増えるとネズミたちは、協力して生活するようになり、どんどんその数を増やしていきます(ネズミが自分たちの増加を「促進」)
- ネズミが増えると、ネズミを食べる猫たちは沢山食料を得られるので、猫たちの数も増えていきます(ネズミが猫の増加を「促進」) 3. 猫が増えると、ネズミは今まで以上に食べられてしまうので、数を減らしてしまいます。(猫の増加がネズミの増加を「抑制」)
このような関係のイメージです。
この 1~4 の関係を数学的に表すと、一例として、
と表すことができます。これは反応拡散方程式と言われるものです。式の意味は後ほど説明します。
位置付けとしては、今回の式は、2 変数の反応拡散方程式
反応拡散方程式 : $$ ∂u/∂t = F(u) + D∂^2u/∂x^2 $$
反応方程式 : $$ ∂u/∂t = F(u)$$
拡散方程式 : $$ ∂u/∂t = D∂^2u/∂x^2 (D は拡散係数)$$
1 つめは反応項、2 つめを拡散項と呼ぶことにします。 F(u)は 2 物質の化学反応による物質の濃度の変化を表す式が入ります。例えば、酵素の反応速度を表すミカエリス・メンテンの式などが入ることもあるでしょう。
拡散項は、2 物質が空間を広がっていくことを考えるときに使います。
2 つの化学物質 u と v があって、その二つの濃度が以下のような数式(反応拡散方程式)で表わされるとき、u と v の濃い部分と薄い部分がいい感じに模様のパターンを作って安定化するということである。
バーゼル市の動物園へ行って、シマウマやキリンの模様を詳しく観察してみた。すると、それらは反応拡散波そのものではないことに気がついた。反応拡散波は、化学反応が作り出す定常波であるから、その波長(模様の間隔)は、一定に保たれなければならない。しかし、シマウマやキリンの模様は皮膚に固定されているらしく、体が大きくなるにつれて模様の間隔が広がっていってしまう。
近藤先生が、実験で証明したのは、タテジマについてです。シマウマやキリンについてはわかりません。近藤先生の物語はこちら https://www.terumozaidan.or.jp/labo/technology/15/index.html 生物が模様を作る仕組みを 25 年かけて明らかにした。それを我々は学ぶことができている。感謝
反応拡散系(=反応系 + 拡散系) 化学反応と分子の拡散を組み合わせた反応システムのこと。
http://www.fbs.osaka-u.ac.jp/labs/skondo/ozaki/what%20is%20RD%202(outline).htm
todo 情報科学の勉強しましょう。形式言語理論を学ぶとわかります。
めっちゃすごい人。計算機科学の父。映画、「イミテーションゲーム」はおすすめです。
チューリングは原論文(The Chemical Basis of Morphogenesis)の中で、反応拡散波が皮膚の模様形式だけでなく、「形態形成全般にはたらく基本的なメカニズム」であろうと述べている。
つまり骨格なども形成しているのではという考え方もあるようです。
三浦岳、発生の数理を参考
まずは一次元の棒状の組織を考えてから二次元に拡張する。横の長さ 1, 縦の長さ$$ dy
このままでは空間的な分布の状態を考えるのは難しいので、この細長い棒を横方向に$$ dx
- 組織片の中での活性因子、抑制因子の相互作用
- ある組織片と、両隣りの組織片との間での活性因子、抑制因子のやりとり
の 2 つの要素を考え、時間変化をみる。時間は連続的なものだが、便宜上、微小区間$$ dt
反応項は 2 種類の分子の相互作用によって決まり、様々なパターンがある。今回は一例として、チューリングパターン形成に置ける反応項を考える。今回考えている、チューリングパターンを生成する反応拡散系における反応系では、上で述べたように、
- 活性化因子は、自身の産生を促進
- 活性化因子は、抑制因子の産生を促進
- 抑制因子は、活性因子の産生を抑制
これを数式で表すと、
$$ f(p, q)
変化量を考えると $$ f(p(n, m), q(n, m)) \times dt $$
となる。
今回の例では、2 種類の物質で考えたが、他にも 1 種類、3 種類での反応系を考えることができて、それらの相互作用(促進か、抑制か)に応じて、様々なダイナミクスが生じる。具体例としては、
- 遺伝子発現、解糖系振動、概日時計、細胞周期などにみられるダイナミクスなどがあげられる。ここを参考にした http://www.fbs.osaka-u.ac.jp/labs/skondo/ozaki/what%20is%20RD%202(outline).htm
- 活性因子は、ある程度以上の濃度になると産生が抑えられる(-p3) ∂u/∂t の反応項 = ∂v/∂t の反応項
次に、隣の組織片との間の相互作用を考え、拡散における濃度変化を考える。
で表される。$$d_p$$は活性化因子の拡散係数である。これによる$$n$$番目の組織片の濃度変化は、この量を組織片の面積で割って、
となる。同様に左隣の物質とのやりとりを考えると、左右合わせて、$$n$$番目の組織片の濃度変化は、
となる。
同様に抑制因子の濃度変化は、
これが拡散項となる
領域が十分広いという境界条件のもとで、$$dt, dx$$を無限に 0 に近づけると、離散ではない連続の方程式を得ることができる。連続関数として、時刻$$t$$における位置$$x$$の活性因子、抑制因子の濃度をそれぞれ$$u(x, t), v(x, t)$$とし、$$dt, dx$$を無限に 0 に近づけると、
とそれぞれの濃度変化を表すことができる。それぞれ第一項が反応項であり、第二項が拡散項である。これは一般の反応拡散方程式の表記
ここでは、反応項として、
を考える。(ちなみにこれは神経細胞の発火モデルである、FitzHugh-南雲モデルと類似している)
これは、
- 活性因子が、自らの産生を促進する$$(0.6p)$$
- 活性因子は、抑制因子の産生を促進する$$(1.5p)$$
- 活性因子は、ある程度以上の濃度になると産生が抑えられる$$(-p^3)$$
- 抑制因子は、活性因子の産生を抑制する$$(-q)$$
- 抑制因子は、何もないと減衰していく$$(-2q)$$
という 5 つの条件を備えている。
拡散項については、
$$ d_p = 0.0002 , d_q = 0.01$$ とおく。
$$ d_q
濃度変化は以下のように表せる。
これを元にして、2 次元でのパターン形成の様子を描画してみる。
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inlineu は色素?濃度を表す。v もその濃度。v は u は抑制する。u は v を促進する。初期条件では、u,v は互いに独立したランダムな値とする。 Neumann 境界条件
a = 2.0e-4 b = 1e-2 tau = 1 k = 0
size = 100 dx = 2. / size T = 54.0 dt = .001 n = int(T / dt
U = np.random.rand(size, size)
V = np.random.rand(size, size)
def laplacian(Z):
Ztop = Z[0:-2, 1:-1]
Zleft = Z[1:-1, 0:-2]
Zbottom = Z[2:, 1:-1]
Zright = Z[1:-1, 2:]
Zcenter = Z[1:-1, 1:-1]
return (Ztop + Zleft + Zbottom + Zright - 4 * Zcenter) / dx ** 2def show_patterns(U, ax=None):
ax.imshow(U, cmap=plt.cm.copper, interpolation='bilinear', extent=[-1, 1, -1, 1])
ax.set_axis_off()
U = np.random.rand(size, size)
V = np.random.rand(size, size)
def laplacian(Z):
Ztop = Z[0:-2, 1:-1]
Zleft = Z[1:-1, 0:-2]
Zbottom = Z[2:, 1:-1]
Zright = Z[1:-1, 2:]
Zcenter = Z[1:-1, 1:-1]
return (Ztop + Zleft + Zbottom + Zright - 4 * Zcenter) / dx ** 2
fig, axes = plt.subplots(3, 3, figsize=(8, 8))
step_plot = n // 9
# 偏微分方程式を有限微小変化methodでシミュレーション
for i in range(n):
# uとvのラプラシアンを計算
deltaU = laplacian(U)
deltaV = laplacian(V)
# uとvの値をグリッドの中でとる
Uc = U[1:-1, 1:-1]
Vc = V[1:-1, 1:-1]
# 値を更新する
U[1:-1, 1:-1], V[1:-1, 1:-1] = \
Uc + dt * (a * deltaU + 0.6 * Uc - Uc**3 - Vc + k), \
Vc + dt * (b * deltaV + 1.5 * Uc - 2.0 * Vc) / tau
# Neumann条件: 端の微分は0?
for Z in (U, V):
Z[0, :] = Z[1, :]
Z[-1, :] = Z[-2, :]
Z[:, 0] = Z[:, 1]
Z[:, -1] = Z[:, -2]
# 9つの異なる時間に状況を分けてプロット
if i % step_plot == 0 and i < 9 * step_plot:
ax = axes.flat[i // step_plot]
show_patterns(U, ax=ax)
ax.set_title(f'$t={i*dt:.2f}$')fig , ax = plt.subplots(1, 1, figsize=(8, 8))
show_patterns(U, ax=ax)今回のお話は、システム生物学という分野で扱われがちなお話です。私が興味を持っているバイオインフォマティクスにシステム生物学が含まれるかどうかはわかりません。僕が所属する学科は、バイオインフォマティクスとシステム生物学という 2 つの学問分野を柱にしています。システム生物学もなかなか面白いなと思いました。今後こちらのブログも充実させていくので、是非チェックして見て下さい! todo あとで追記





