2008-06-05

Gray-Scottモデル Gray-Scottモデル - Nao_uの日記 を含むブックマーク はてなブックマーク - Gray-Scottモデル - Nao_uの日記 Gray-Scottモデル - Nao_uの日記 のブックマークコメント

今回参考にした元動画では「Gray-Scottモデル」というものが使われていた。このモデルの計算式に関しては下記のリンクを参考にしてみた。

4.2 2次元Gray-Scottモデル

Gray-Scottモデルとは、U+2V→3V, V→Pの二つの化学反応からなるモデル化学反応系のことである。この化学反応が2次元空間を拡散しつつ起こるとすると、二つの化学種U, Vの2次元空間内での濃度u(x,y,t), v(x,y,t)は、質量作用の法則により次の反応拡散方程式にしたがう:

[数式略。リンク先を参照してください]

ここで、Uの総量が一定となるよう単位時間あたり最大Fずつ外部からUが供給されるとし, U+2V→3Vの反応速度定数を1, V→Pの反応速度定数をkとした。

Gray-Scottモデルの物理的な解釈として、Uは時間と共に飽和するまで増加し、Vは一定の割合で分解され続け、Vが豊富にある場所ではUがVに特定の反応速度で変化する、という感じなんだろうと理解した。

この式を元に、

  • uとvの値を2枚の2次元配列のバッファに保存。
  • uはステップごとにF(1-u)の割合で増加し、vはk*vづつ減少する。
  • uと2vが同時に存在しているときに、uがuv^2づつvに変化する。(u-=uv^2, v+=uv^2, uが0以下なら反応を制限)
  • uとvは毎ステップ適当な割合で拡散する。

という解釈でプログラムに落とし込み、UVそれぞれの拡散速度と、F・kのパラメータを調整してみた。

この式だとuの拡散速度をvよりも大きくすることで、uよりもわずかにvの方が早い速度で広がっていった結果、vの端の領域でuが枯渇して複雑なパターンが生み出されるらしい。

拡散は周囲4近傍の平均との差分に係数をかけたものを毎回足してみている。これしかやり方を知らないのでそうしてみたんだけど、もっといいやり方があるんじゃないかという気がする。

今回の最終的なパラメータは、

f = 0.020;

k = 0.07;

uの拡散 = 0.99;

vの拡散 = 0.20;

に落ち着いた。

なんとなくそれっぽく動いてはいるみたいだけど、計算の順序が合ってるのかとか、そもそもこれは反応拡散方程式を解くやり方として正しいのかとかについては全く自信はない。難しい数学とかは苦手なのでもしかしたら全然別の計算式でたまたま似たような結果になってるだけなのかもしれないけど、とりあえず動いてるみたいなので良しとしておく。

トマトは遺伝子の突然変異で大きくなった 原種の千倍に トマトは遺伝子の突然変異で大きくなった 原種の千倍に - Nao_uの日記 を含むブックマーク はてなブックマーク - トマトは遺伝子の突然変異で大きくなった 原種の千倍に - Nao_uの日記 トマトは遺伝子の突然変異で大きくなった 原種の千倍に - Nao_uの日記 のブックマークコメント

初期配置が対象型だと、ピーマンやトマトの輪切りみたいな形に広がっていく。ちょっとしたパラメータの違いでも広がり方は大きく変わり、ほぼ一様で対称な状態からでも複雑なパターンが生まれてくる。生物が成長するときに生み出されるパターンも、反応拡散方程式のような仕組みでできあがっているのかもしれない。

21枚葉のクローバー発見、ギネス記録を3枚更新 21枚葉のクローバー発見、ギネス記録を3枚更新 - Nao_uの日記 を含むブックマーク はてなブックマーク - 21枚葉のクローバー発見、ギネス記録を3枚更新 - Nao_uの日記 21枚葉のクローバー発見、ギネス記録を3枚更新 - Nao_uの日記 のブックマークコメント