
「縞を作れ」と一度も書いていない式から縞が出てくる。チューリングパターンを実装して、拡散の速さを揃えたら模様は消えた
動物の体表の模様——ヒョウの斑点、シマウマの縞、フグの迷路模様——がどうやって決まるのかを、アラン・チューリングが1952年に提案した仕組みで説明できる、という話がある。「チューリングパターン」と呼ばれている。
驚くのはその仕組みの素っ気なさだ。2種類の物質があって、互いに反応しながら、それぞれの速さで拡散する。それだけ。どこにも「縞を作れ」とも「斑点にしろ」とも書いていない。
今回実装したのはGray-Scottモデルという反応拡散系だ。
が供給される材料、 が を食べて増える物質。 が の供給率、 が の除去率。この2つの数字を変えるだけで、出てくる模様がまるで変わる。
実験に使ったコードの全文はGitHubに置いています。
中央にひとしずく落とす
真ん中に を少し置いて、あとは式に任せる。

ひとしずくが広がって、分裂して、迷路になる。この過程に外から与えた情報は「中央に少し置いた」ことだけだ。
FとKを42通り振る
を7段階、 を6段階に振って、それぞれ9,000ステップ回した。

42通りのうち、模様と呼べるものが出たのは 17通りだけだった。16通りは高濃度が全面に広がった一様な状態、9通りは が死に絶えて何も残らない。
模様が出る領域は、- 平面の中の細い帯に限られている。生き物の模様が「なんとなくできる」ものではなく、パラメータがある範囲に入っていないと成立しないことが、絵として見える。
代表例を大きく描くとこうなる。

| F | k | 主波長 | 塊の数 | 面積 |
|---|---|---|---|---|
| 0.030 | 0.055 | 12.6 | 16 | 33.0% |
| 0.022 | 0.051 | 12.7 | 104 | 17.0% |
| 0.038 | 0.061 | 11.7 | 58 | 33.4% |
| 0.026 | 0.058 | 12.3 | 427 | 19.5% |
| 0.034 | 0.065 | 14.4 | 81 | 3.8% |
見た目はまるで違うのに、空間フーリエ変換で測った主波長は11.7〜14.4格子とほとんど同じだった。塊の数は16個から427個まで26倍も違うのに、縞と縞の間隔はどれもほぼ12格子。
今回選んだ5例では、主波長の違いより形の違いが目立った。ただし ・ も反応速度を変えるパラメータなので、波長に影響しないと一般化はできない。
自分で ・ を選んで見比べられるようにした。
拡散の速さを揃えると、模様は消える
チューリングの1952年の主張の核心は、「反応があるだけでは模様はできない。拡散が加わることで不安定になる」という点にある。典型的な2成分の活性化・抑制モデルでは、拡散速度の差がその条件に関わる。ただしGray-Scott系の模様には有限の初期刺激から成長する非線形なパターンもあり、今回の観察だけで古典的なTuring不安定性を確認したとは言えない。Pearsonの原論文も、この系の多様な時空間パターンを扱っている。
これは実験で確かめられる。・・初期値・乱数をすべて固定したまま、拡散係数の比 だけを変えた。

| 模様の面積 | |
|---|---|
| 1.0 | 0.00% |
| 1.1 | 0.20% |
| 1.5 | 5.83% |
| 2.0 | 32.05% |
| 3.0 | 42.53% |
| 4.0 | 43.09% |
比が1.0、つまり2つの物質が同じ速さで広がるとき、模様はまったくできなかった。 反応の式は何ひとつ変えていない。変えたのは「どちらが速く広がるか」だけだ。
比を上げていくと、1.5あたりから模様が立ち上がり、2.0で一気に育ち、3.0以上で頭打ちになる。模様が出た条件で比べると、主波長は比1.5の23.0格子から、2.0で12.7格子、4.0で7.6格子へと細かくなっていった。
(2026-10-10 訂正: 公開時は「主波長は53.3格子から7.6格子へ」と書いていました。53.3は模様が消えた比1.0の実行の値で、160格子の盤面でこの測り方が返せる最長の波長(160/3)にあたります。模様の間隔ではないので、模様が出た条件だけで書き直しました。)
まとめ
- Gray-Scottモデルを実装し、・ を42通り振ったところ、模様が出たのは17通り。16通りは一様に埋まり、9通りは消滅した
- 見た目が違う模様でも主波長は11.7〜14.4格子とほぼ同じ。塊の数は16個から427個まで26倍違うのに
- 拡散係数の比を1.0にすると模様の面積は0.00%。反応の式を変えずに、広がる速さの差だけで模様の有無が決まる
- 比を上げると模様が育ち(2.0で32%)、3.0以上で頭打ち。模様が出た条件では、波長は23.0から7.6へ細かくなる
「縞を作れ」と書かれていない式から縞が出てくる、という話は本当だった。ただしそれは、今回調べた格子・初期値・計算時間では、模様が出る ・ の範囲は限られ、拡散比を1にした条件では模様を観測できなかった。すべての反応拡散系に対する必要十分条件ではない。
42通り試して、25通りは何も起きなかった。引っかかったのはそちらのほうだ。
チューリングパターンの話は、たいてい成功例の絵と一緒に紹介される。ヒョウの斑点、フグの迷路、貝殻の縞。私も知識としてはそこまで知っていた。だが実際に と を振ってみると、大半の設定では全面が一様に埋まるか、あっさり消えるかのどちらかだ。
生き物の模様が「反応拡散で説明できる」というのは、裏返せば、そのパラメータが狭い範囲に収まるように何かが調整されている、ということでもある。仕組みが単純であることと、それが機能する条件がゆるいことは、まったく別の話だった。
きれいな絵だけを見て仕組みを理解した気になっていたのは、42枚のうち17枚しか見ていなかったからだと思う。
このブログでは、機械学習の仕組みを実際にコードで実装して確かめた実験をテーマ別に整理しています(拡散モデル・Transformer・強化学習・多様体学習・過学習など)。


