Pythonによる”数”シミュレーション

はじめに

このHPは、Pythonによる複雑系シミュレーションを紹介するものです。通常、このような計算は常微分方程式(ODE)を用いて行われことが多いです。実際、ODEは複雑な物理現象や化学現象の数理モデルとして成功を収めています。力学系や確率微分方程式の分野で用いられるODEは、複雑な現象の記述に成功しています。現在、コンピュータによってかなり複雑な方程式でも解くことができるからです。

一方、世の中にはまだ数理モデル化が難しい分野も存在します。特に、生物学の分野でそれは顕著であるように思われます。例えば、1つの細胞を例に取ってみると、細胞中では様々な分子による生化学反応が行われていますが、それをODEで表現するには、幾つかの問題点が存在します。

1つ目は、単純に分子の種類が多く込み入っていることが挙げられます。種類が多いことは現在のコンピューターを活用すればさほど問題ではないかもしれません。しかし、込み入っていることは、分子の拡散や移動の問題、濃度の記述などの面で問題になると言えるでしょう。

2つ目は、数が少ない分子が多く存在することが挙げられます。細胞中の遺伝子の濃度を定義するのは、その数が少ないため難しい問題です。遺伝子は、通常1細胞に1つです(重複の場合もあるようですが)。人間のように46本の染色体に分かれていますが、それぞれが唯一のものです。したがって、遺伝子の濃度として表すことは一応出来ますが、数そのもので定義されたほうがメリットが多いと考えます。

3つ目は、確率の問題です。生物には個体差が存在し、進化により多種多様な生物が生まれたことが挙げられます。また、個体差は種の進化の源のような存在で、1種の生物(細胞)が皆同じであったら進化はなかなか起こらないのではないでしょうか。種の繁栄や絶滅にはある程度明確な理由があると考えられますが、すべてを捉えることが出来ず、種の多様性の中に確率的な要因が働いた結果とも考えます。このシミュレーションは、上記の問題をすべて解決するものではありませんが、アルゴリズムに確率的要素を取り込むことによって、生物創発の記述するための道具となりえると考えています。

シミュレーションの特徴は、時間発展する要素が何個あるのかという、”数”、によって表現するところにあります。量論的に数の変化を記述する反応式が、その個数の変化の方向を決めます。単位時間あたりの反応個数は、反応パラメータとそれぞれの要素の個数に基づくランダムな確率変数によって決められます。二項分布を使うことによって、少ない”数”の分子も多い数の分子も対等に表現できるところもこのシミュレーターのメリットです。

ダウンロードしたプログラムには例題が含まれています。それらを参考にモデルを作ることが出来ます。入力ファイル(テキストファイル)を作り、それを実行することによって計算が可能です。

実行手順は、次の2つです。

実行手順

0.準備

フォルダを1つ用意して、その中にもう一つプログラム格納用のフォルダを作ります。
その中に、6つのプログラムファイル(binomial_v013.py、...)を置きます。
また、もう一つフォルダを作成し、作成した入力ファイルを置きます。
入力ファイル格納用のフォルダは、幾つあっても構いません。

(なお、プログラムの詳細は、ダウンロードしたファイルの「README(JP)_v013.txt」、「Folder structure.pdf」等を参照ください)

1.Spyder

  1. 1-1. anaconda3からSpyderを立ち上げ、 binomial_v013.pyを開きます。
  2. 1-2. binomial_v013.pyの中の入力ファイルが記載されている行に、
    計算したい入力ファイル名を記載します。
    例: fName = ‘inp_test_031.txt’
  3. 1-3.Spyderの”Run file”コマンドを打つと計算が始まります。計算結果は、入力ファイルの置かれたフォルダ内に更にフォルダが作られ格納されます
    例:inp_test_031_2022-7-5 12-27-28

2.コマンド、もしくは端末

  1. 1-1. コマンドプロンプト(windows)、もしくは端末(Linux) を立ち上げ、
    binomial_v013.pyのあるフォルダまで移動します。
  2. 1-2. 以下のように、コマンド入力し入力ファイルに従ってプログラムを実行します。
    例:$ python binomial_v013.py inp_test_031.txt
  3. 1-3.計算結果は、入力ファイルの置かれたフォルダ内に更にフォルダが作られ格納されます。
    例:inp_031_2022-7-5 12-27-28