ひとこと

第2章から本格的に定量的な計算が始まる.今のところは数や濃度などの数え上げが中心だが,これらは今後のベースになる部分なので,今回は少し丁寧に計算を追ってみた.実際に自分で計算してみると,有効数字の扱いやオーダーへの落とし込み方が何となくわかる.

第2章 何が?そして,どこに?―細胞と生物の構築プラン

大腸菌の標準

本書では最少培地での細菌の状態を基本に考える.

  • 長さ:
  • 直径:
  • 体積:
  • 表面積:

見積もり―大腸菌のサイズを測る

  • 大腸菌の体積:
  • 大腸菌の質量:

1細胞あたりのタンパク質の総質量

1細胞あたりの炭素原子の個数

  • 平均的なタンパク質のアミノ酸数:
  • 一つのアミノ酸の特徴的な質量:

典型的なタンパク質の質量

1細胞あたりのタンパク質の個数

1細胞あたりの細胞質中のタンパク質の個数

1細胞あたりの膜タンパク質の個数

1細胞あたりのリボソームの個数

1細胞あたりの脂質分子の個数

1細胞あたりの水分子の個数

1細胞あたりの無機イオンの個数



ひとこと

第1章では,本書を読み進める上で必要になる道具や考え方がいくつも登場する.生命現象の認識であったり,幾つかの要素に分解するといったことは,生物現象を物理に当てはめて理解するという型にはめるための枠作りと言える.

第1章 なぜ?―数を通して見た生命

  • 生物学のデータの背景にあるモデルを構築し理解する

    • モデルは問題の複雑さや詳細をある程度切り捨てる
    • 現象をある程度正確に予測できるようなモデルを立てる
  • 定量的なモデル

    • 定量的なデータには定量的なモデルが必要になる
    • 定量的なモデルは,生物学の問題について実験で検証可能な予測をする
    • ある入力が変わった時,特定の生物学的な出力変数がどのように変わるかを定量的に測定することができるならば,そのデータの解釈も定量的に行う必要がある

3つの「事実」

  1. 自分で確かめることができること
    • e.g. 細胞はタンパク質を含んでいる
  2. 異なる独立の実験手法によって繰り返し確かめられたこと
    • e.g. 細胞においてリボソームがタンパク質を合成する
  3. 生物学的な観察による説得力のある説明ではあるが,証明されていないか論争中の仮説に基づいている
    • e.g. 細胞内のミトコンドリアは元は独立して生きていた細菌であり,真核細胞の祖先との細胞内共生によって今日に至る

生物を作る4つの要素

  • 高分子 Macromolecule
    • タンパク質 Protein
    • 糖 Carbohydrate
    • 脂質 Lipid
    • 核酸 Nucleic acid

理想化としてのモデル

高度に複雑な生物対象から抽象と単純化によって有用な洞察を得るには,「一つ」の簡単なモデルに着目する

  • ある特定の側面を物語る重要な性質を選ぶ
  • 問題のどの特徴を無視することができるかを考える

  • どんな対象でも良い

    • DNA
    • タンパク質
    • 細胞膜
    • 大腸菌
    • 溶液

イラストとモデル

  • 図式化 Schematize
    • 重要な概念を説明するモデルをイラストとして表現
    • 何が重要かを,間接的あるいは直接的に表現

定量的モデルの数理化

  • e.g. Lacリプレッサー

    • 始めに思いつく大雑把なイメージ:Lacの近くに何かくっつくとDNAループを作って遺伝子が働かなくなるらしい.あと,くっつく場所との距離によって遺伝子の強さに違いがあって,なんか距離に応じて周期的っぽい
    • そこから,このデータをきちんと定量的に測定して,定量的モデルを立てる
  • e.g. バネとしての振る舞い

    • イメージ:中心からズレるとだんだん戻る力が強くなる
    • 定量的なモデル:平衡位置からずらした程度に比例した復元力
  • 中心からの距離が小さい時に線形近似できるというメリットもある

ただのバネの伸び縮みをモデル化しただけだけれども,バネの振る舞いに代表されるような単純な調和振動子モデルは,生物学の現象の様々なケースに適応することができる

  • 光ピンセットのトラップの中心に引っ張られる分子
  • 梁の曲がり
  • DNAの曲がり
  • 泳ぐ精子の鞭毛の拍動
  • 細胞表面の膜のゆらぎ
  • エネルギーランドスケープ上の分子
  • 時間とともに発現の程度を変える遺伝子ネットワーク

見積もりの役割

  • 生物学的な構造と仮説に関する数の感覚を掴む
    • 定量的な直感

(「Guesstimation」と「次元解析」は第2版から追記された箇所.(PBOC 2nd P.27) )

Guesstimation

  • 見積もり・フェルミ推定
    • 幾何平均 Geometric mean
    • 下限と上限から幾何平均を取る
    • e.g. だいたい10nmより小さくはならないし100nmよりは大きくならないだろうと予測される場合:だから,だいたい約30nmくらい
    • 文章中で紹介されている”Guesstimation by Weinstein and Adam”とは以下の本のことだろう.日本語訳として「サイエンス脳のためのフェルミ推定力養成ドリル」という題で出版されている

次元解析 Dimensional analysis

  • 関係してくる変数の次元を上手く組み合わせて,目的の変数の次元に揃える

モルフォゲン勾配の場合

  • Length scale :
    • [Length]
  • Diffusion constant :
    • [Length]2 / [Time]
  • mean lifetime :
    • [Time]

Diffusion constant(拡散係数)とmean lifetime(モルフォゲン分子の平均寿命)を上手く組み合わせてLength scaleの単位を表そうと思ったら,になる.こうすれば,変数の性質を知らなかったとしても数式を立てることができる.

  • 注:平均寿命が分かりにくければ,モルフォゲンの時間あたりの分解率の逆数だと思えば良いだろう(
  • モルフォゲンの濃度勾配に関しては,英語版第2版の20章で詳しく述べられる

モデリングにおける4つの間違い

  • 不適切なタイプの物理モデルを使った失敗
  • 「ピックアップトラックに積み込むことのできる荷物の量は何時間か?」といった問題設定
  • システムの詳細を十分に考慮していない失敗
    • 大腸菌の泳ぐ速度:ゆらぎを考慮していない
    • 失敗というより不適切
  • 不適切な仮説を置いたモデルによる失敗
    • 大腸菌の泳ぐ速度にブラウン運動を考慮していない
  • 実験にブレイクスルーをもたらす失敗
    • 新しい科学的発見をするチャンス!

Rules of Thumb

物理生物学者として見積もりするならこれくらいは覚えておくべき基本的な数字(テキストの表参照)

まとめ

物理学の定量的な思考を生物学に適用するために必要となるスキル

  • 基礎的な物理学のモデルによってシステムを記述する:モデル化するスキル
  • システムに対する認識が適切で現実的かどうかをチェックする:定量的見積もりを行うスキル


ひとこと

このボルヘスの短編に本書の姿勢というものが凝縮されている.地図と科学を対応付けて考えるならば,分野の細分化が進行した現在におけるそれぞれの科学の役割というものを憂う一方で,地図に代表される抽象化の中にある本質的な役割と設計方法について再考するきっかけとなる.

序文

学問の厳密さについて - On Exactitude in Science

日本語1版では序文冒頭,英語2版では第1章の前半で出てくる文章.これはホルヘ・ルイス・ボルヘスとアドルフォ・ビオイ=カサーレスの書いた短編.訳注にあるように,架空の著者による架空の本の抜粋であり,二人の書いた短編自体にこの前後は存在しない.

書籍の形として翻訳されたものは,「ボルヘス怪奇譚集」や「汚辱の世界史」,「澁澤龍彦文学館10 迷宮の箱」などで読めるようだ.

物理を使って生物を視る4つのステップ

  1. 生物の現象を観察する
  2. オーダーの見積もりを行う
  3. 単純なモデルを適用する
  4. モデルを洗練する

本書の全体構成

  • 第1部:「生命とは」
    • 主に生物の現象を扱う
  • 第2部:「平衡状態としての生命」
    • 時間を考慮しないような定量的モデルを使ってとくことの出来る問題を扱う
  • 第3部:「非平衡状態としての生命」
    • 時間に依存したシステムのダイナミックな振る舞いや複雑さを扱う
  • 第4部:「生命の意味」
    • 生物システムのさまざまな情報処理について説明する


Home | bioRxiv

論文のプレプリント・サーバといえばarXivが有名だが,その生物学バージョンが”bioRxiv“(バイオアーカイブ)としてスタートしている.これまでにもarXivにおいて生物学といえばQuantitative Biology(q-bio)という分類があったが,今回作られたbioRxivはそれを補完するような形でライフサイエンス分野に絞って作られているようだ.生物学という括りの中で,以下の24分野に分かれている.また,2013年12月2日時点では59の論文が投稿されている.

  • Biochemistry
  • Bioengineering
  • Bioinformatics
  • Biophysics
  • Cancer Biology
  • Cell Biology
  • Developmental Biology
  • Ecology
  • Evolutionary Biology
  • Genetics
  • Genomics
  • Immunology
  • Microbiology
  • Molecular Biology
  • Molecular Medicine
  • Neuroscience
  • Paleontology
  • Pathology
  • Physiology
  • Plant Biology
  • Scientific Communication
  • Synthetic Biology
  • Systems Biology
  • Zoology

それぞれの論文のページにはアブストや投稿履歴,DOIなどがのarXivにも備わっている情報の他に,コメントを付けられる機能がある.こういうのは最近のオープンアクセス誌の流れだろうか.また,arXivには無いbioRxivの大きな特徴として,それぞれの論文にクリエイティブ・コモンズのライセンスが付けられているということがある.これは論文著者が投稿時に幾つかの選択肢の中から好きなライセンスを付けられるようになっており,CC-BYからno reuseまでかなり幅広く用意されているようだ.

Authors retain copyright and choose from several distribution/reuse options under which to make the article available (CC-BY, CC-BY-NC, CC-BY-ND, CC-BY-NC-ND, or no reuse). By posting on bioRxiv, authors explicitly consent to text mining of their work (e.g., by search engines or researchers).

http://biorxiv.org/about-biorxiv

個人的には生物学の分野だとあまりプレプリント・サーバには馴染みがないように思えるが,これから様々な使い方が広がっていくのだろうか.なお,主要な論文誌のプレプリント・サーバ利用のポリシーは以下に詳しくまとまっている.



課題のために遺伝的アルゴリズムを使う必要があったので,Pythonで遺伝的アルゴリズムを動かすことのできるライブラリPyevolveを試してみた.

始めの一歩

動かし方はとてもシンプルなので,公式ドキュメントのGet Startedをざっと見たあとにExampleでどういう使い方ができるのかを個別に見ていけばいいと思う.

日本語資料なら,自分が確認した限りでは以下のサイトが一番詳しい.

Pyevolveの基本的な使い方

ゲノムインスタンスの生成

ゲノムの構造はバイナリや1次元配列,2次元配列,木構造などを取ることができ,初期値が取りうる値の幅なども決めることができる.以下のコードでは,値が15個あって最小値0,最大値100というゲノムを作成している.

1
2
genome = G1DList.G1DList(15)
genome.setParams(rangemin=0, rangemax=100)

ゲノムの初期化,突然変異の設定

次に,ゲノムインスタンスを初期化して突然変異の分布などを指定する.最初に指定したゲノムの構造に従って指定する必要があるが,パラメータはだいたい読んだ通り.

1
2
genome.initializator.set(Initializators.G1DListInitializatorReal)
genome.mutator.set(Mutators.G1DListMutatorRealGaussian)

値が整数の場合は”G1DListInitializatorInteger”や”G1DListMutatorIntegerGaussian”が用意されている.

評価関数をセット

評価関数eval_funcを作って,ゲノムインスタンスに指定する.

1
2
3
def eval_func(chromosome):

[...]
1
genome.evaluator.set(eval_func)

GA Engineを作成する

1
ga = GSimpleGA.GSimpleGA(genome)

選択方式などのパラメータを指定する

デフォルトでGA Engineを動かした場合,世代数や集団数は以下のようになる.

  • 100 世代
  • 集団サイズ:80個体
  • ランキング選択

これらを変更するには,以下のようにパラメータをセットする.

1
2
3
4
ga.selector.set(Selectors.GRouletteWheel)
ga.setGenerations(5000)
ga.setMutationRate(0.1)
ga.setPopulationSize(100)

選択方法は,その他にもランキング方式やトーナメント方式などが用意されている.

GA Engineの実行

1
ga.evolve(freq_stats=250)

実行中はfreq_statsで指定した世代ごとに以下のようなログが出力される.

1
2
3
4
5
Gen. 1 (0.02%): Max/Min/Avg Fitness(Raw) [23104.07(27490.00)/15107.82(10386.00)/19253.39(19253.39)]
Gen. 250 (5.00%): Max/Min/Avg Fitness(Raw) [9486.89(15212.00)/6883.91(3184.00)/7905.74(7905.74)]
Gen. 500 (10.00%): Max/Min/Avg Fitness(Raw) [8749.57(15233.00)/6518.94(3085.00)/7291.31(7291.31)]
Gen. 750 (15.00%): Max/Min/Avg Fitness(Raw) [8259.84(14274.00)/6173.50(3073.00)/6883.20(6883.20)]
[]

pyevolve_graph.pyの使い方

Pyevolveには,イテレーションの変化を可視化する便利なスクリプトがある.

1. DBAdaptersをインポートする

1
from pyevolve import DBAdapters

2. 以下のスクリプトを追記する

挿入する場所はGSimpleGA.GSimpleGA() のすぐ後.

1
2
3
ga = GSimpleGA.GSimpleGA(genome)
sqlite_adapter = DBAdapters.DBSQLite(identify="ex1")
ga.setDBAdapter(sqlite_adapter)

これで,GAの実行後にpyevolve.dbというファイルが作成される.

3. pyevolve_graph.pyを実行する

あとはpyevolve_graph.pyを実行する.可視化するグラフのタイプなどが選べるようになっているので,その辺りのパラメータはマニュアルを参考.

例えば,以下のようなグラフを出力することができる.

1
$ pyevolve_graph.py -i ex1 -3 -g 1:500 -o pyevolve_graph

最後に:Pythonで遺伝的アルゴリズムをするなら

最後に残念なお知らせだが,Pyevolveは少なくとも2年前から開発が止まっている.Pyevolve安定版0.5で公式に対応しているPythonのVersionも2.6となっている(2.7では動いた.3.x系は不明).

どうやら現在ではDEAPというライブラリが精力的に開発されているようだ.まだオンラインの資料は少ないものの,3.x系などの対応を考えるならこちらを使うのも手だろう.

もし遺伝的アルゴリズムをPythonを使って自分で実装したい場合は,集合知プログラミング11章「進化する知性」がお薦めできる.基本的なアルゴリズムに加えて,交叉や突然変異の書き方であったり様々なデータタイプに対応したりと,実装も丁寧に解説されている.

動作環境

  • Mac OS X 10.8.5
  • Python 2.7.6
  • Pyevolve 0.5

参考