先端医化学実験 - 関西学院大学sci-tech.ksc.kwansei.ac.jp/~tohhiro/data/file.pdf ·...
TRANSCRIPT
先端医化学実験バイオインフォマティクス
遺伝的アルゴリズムによるタンパク質立体構造の重ね合わせ
藤 博幸
2016年6月23-24日
OUTLINE
1. 遺伝的アルゴリズムとは2. Rの基礎3. bio3dの使い方4. MolMolの使い方5. 演習に使用するプログラムとデータの説明 タンパク質立体構造の重ね合わせの説明
OUTLINE
1. 遺伝的アルゴリズムとは2. Rの基礎3. bio3dの使い方4. MolMolの使い方5. 演習に使用するプログラムとデータの説明 タンパク質立体構造の重ね合わせの説明
生物システムの情報科学への応用• ニューラルネットワーク• 遺伝的アルゴリズム• 進化プログラミング• 人工免疫システム• 粒子群 適化• 蟻コロニー 適化• 人工生命
遺伝的アルゴリズム
菊川怜の卒論テーマ「遺伝的アルゴリズムを適用したコンクリートの要求性能型の調合設計に関する研究」
肖像権の問題があるので菊川怜さんの画像は削除しました、
(•ω<)
遺伝的アルゴリズム
GeneAcAlgorithm(GA)1975年 JohnH.Hollandにより提案生物の遺伝の仕組みを模倣した 適化の手法たとえばナップザック問題、ハミルトン閉路問題、巡回セールスマン問題、施設配置問題などの 適化問題に適用できる
突然変異(mutaAon)と置換(subsAtuAon)
突然変異は集団中の個体に生じる※ 進化に寄与するのは体細胞ではなく生殖系列 の細胞に生じる突然変異
突然変異(mutaAon)と置換(subsAtuAon)
有害な突然変異は、集団から除去される(負の選択or純化淘汰)
突然変異(mutaAon)と置換(subsAtuAon)
有利な突然変異は急速に集団中に広まり集団全体がその突然変異遺伝子で置き換えられる (正の選択)
適応度 (fitness)
ある個体の子供の内の、繁殖年齢まで達したものの数
遺伝的アルゴリズム
GeneAcAlgorithm(GA)1975年 JohnH.Hollandにより提案生物の遺伝の仕組みを模倣した 適化の手法たとえばナップザック問題、ハミルトン閉路問題、巡回セールスマン問題、施設配置問題などの 適化問題に適用できる巡回セールスマン問題を例として遺伝的アルゴリズムを学ぶ
巡回セールスマン問題(travelingsalesmanproblem、TSP))
都市の集合と各2都市間の移動コスト(たとえば距離)が与えられたとき、全ての都市をちょうど一度ずつ巡り出発地に戻る巡回路の総移動コストが 小の順路を求める問題
5つの都市を巡る問題を考える
1 2
34
5
hRp://www.slideshare.net/sandinist/ss-1617965を参考にした
組み合わせは5!逆順の巡り方もあるのでその1/2で60通りの巡り方がありうる
5つの都市を巡る問題を考える
1 2
34
5
hRp://www.slideshare.net/sandinist/ss-1617965の例に従い説明
ここではコストは距離とする簡単のために都市間の距離は示さない1→2→5→4→3→1が 短経路とする
遺伝的アルゴリズム
遺伝的アルゴリズムは一般に以下の流れで実装される。なお、下記では個体数を N, 大世代数を G と置く。① あらかじめ N 個の個体が入る集合を二つ用意する。以下、この二つの集合を「現世代」、「次世代」と呼ぶことにする。② 現世代に N 個の個体をランダムに生成する。③ 評価関数により、現世代の各個体の適応度をそれぞれ計算する。④ ある確率で次の3つの動作のどれかを行い、その結果を次世代に保存する。
– 個体を二つ選択(選択方法は後述)して交叉(後述)を行う。– 個体を一つ選択して突然変異(後述)を行う。– 個体を一つ選択してそのままコピーする。
⑤ 次世代の個体数が N 個になるまで上記の動作を繰り返す。⑥ 次世代の個体数が N 個になったら次世代の内容を全て現世代に移す。⑦ 3.以降の動作を 大世代数 G 回まで繰り返し、 終的に「現世代」の中で も適応度の高い個体を「解」として出力する。
hRp://ja.wikipedia.org/wiki/遺伝的アルゴリズム より
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
初期集団の生成
集団サイズを3とする3個体を生成し、それぞれ次の順路に対応するとする個体1:①-②-③-④-⑤-①個体2:①-⑤-②-④-③-①個体3:①-②-⑤-④-⑤-①
個体( Individual): 染色体(後で説明)によって 特徴づけられた自律的な個 集団( PopulaAon):個体の集まり 集団サイズ( PopolaAonSize):集団内の個体数
用語の説明
経路を染色体として表現する
個体1:①-②-③-④-⑤-①個体2:①-⑤-②-④-③-①個体3:①-②-⑤-④-⑤-①
個体1 00000個体2 03010個体3 00200
コード化の手順
個体2の場合について説明①-⑤-②-④-③-①の①-⑤-②-④-③部分のみを考える①-②-③-④-⑤という順番に対して①-⑤-②-④-③という順番で取り出すことを考える(1)①-②-③-④-⑤に 次のように数字をわりあてる0 1 2 3 4
①-②-③-④-⑤0 1 2 3 4から①を取り出す(① - )
対応する0でコードし(0)、残る②-③-④-⑤を0123で表す
②-③-④-⑤0 1 2 3から⑤を取り出す(① - ⑤ - )
対応する3でコードし(03)、残る②-③-④を012で表す
②-③-④0 1 2 から②を取り出す(① - ⑤ - ② -)
対応する0でコードし(030)、残る③-④を01で表す
③-④0 1 から④を取り出す(① - ⑤ - ② - ④ -)
対応する1でコードし(0301)、残る③を0で表す
③0を取り出す(① - ⑤ - ② - ④ - ③)
対応する0でコードする(03010)
コード化の意味
何故このような表現をとるのか? 後述の突然変異と交叉の処理が容易に なるため※コード化の方法は一意に定まるものではない 同じ問題でも異なるコード化がありうる 問題に応じてコード化の工夫が必要
用語の説明
• 遺伝子( Gene):個体の形質を規定する基本構成要素 個体2の場合 03010 の0,3,0,1,0のそれぞれが遺伝子• 染色体( Chromosome):複数の遺伝子の集まり 個体2の場合、03010の全体が染色体• 遺伝子座( Locus):染色体上の遺伝子の位置 • 対立遺伝子( Allele):遺伝子がとりうる値 遺伝子座2は、0,1,2,3の4つの値をとりうる。 ここの例では、個体1と3では0、個体2で3個体1 00000個体2 03010個体3 00200
用語の説明
• 遺伝子型( Genotype):染色体の内部表現 • 表現型( Phenotype):染色体によって規定される形質の 外部的表現.巡回セールスマン問題の場合、巡路 表現型 遺伝子型個体1:①-②-③-④-⑤-① 00000個体2:①-⑤-②-④-③-① 03010個体3:①-②-⑤-④-⑤-① 00200• コード化( Coding):表現型から遺伝子型へ変換すること • デコード化( Decoding):遺伝子型から表現型変換すること
初期集団完成
個体1 00000個体2 03010個体3 00200
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
終了の判定
判定方法としていくつかのものが考えられる• 集団中の 大の適応度が,ある閾値より 大きくなった場合
• 集団全体の平均適応度が,ある閾値より 大きくなった場合
• 集団の適応度の増加率がある閾値以下 になる世代が一定期間続いた場合
• 世代交代の回数が規定の回数を超えた場合
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
交叉
• N個の親集団からランダムに2M個の個体を選択• ペアごとに組替え処理• N+2M個の個体が生成される今、M=1とし、乱数を利用して次の②個体が選択されたとする、個体2 03010個体3 00200
交叉の方法
• 1点交叉法 染色体の切断箇所をランダムに 1カ所指定し,その箇所(下の例における赤線の部分)で遺伝子を交叉させる.01001|101 01001|110
01100|110 01100|101• 多点交叉法 染色体の切断箇所をランダムに複数カ所(下の例では,2カ所)指定し,それらの
箇所で遺伝子を交叉させる. 010|011|01 010|001|01011|001|10 011|011|10• 一様交叉法 染色体と同じ長さのマスクと呼ばれるビット列を,0に対しては確率 p,また,1に
対しては確率 (1-p)で発生させ,マスクの値が 1であるときは親Aの遺伝子を子 C(親 Bの遺伝子を子D)に,また,0であるときは親 Bの遺伝子を子 C(親 Aの遺伝子を子 D)に継承させる.
例えば,マスクが 00101011となった場合は,以下のようになる. A 01001101 C01000101
B 01100110 D01101110• 個体の遺伝子型が連続値を表すときには,2つの親の平均値を子の遺伝子とする,平均化交
叉等の方法も使用される.平均化交叉では,2つの親から 1つの子供が生成される.
hRp://www.sist.ac.jp/~suganuma/kougi/other_lecture/SE/opt/GA/GA.htm#4.3より転載
一様交叉を選択された個体2と個体3に適用 マスクが01101とおく
01101個体203010 03000 個体300200 00210が得られる子集団に交叉で得られた集団(サイズ2)を加える。
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
突然変異
ある与えられた確率 Pm(突然変異率)で,突然変異を起こさせる。突然変異率は通常小さな値(たとえば5%)に設定。一般的な方法として、各遺伝子をランダムに対立遺伝子に置き換える。今回の例の場合、親集団(サイズ3)の各遺伝子座(5個)について、0~1の一様乱数を発生させ、それが0.05より小さい場合、その遺伝子座の可能な対立遺伝子のいづれかに置換する。
個体1 00000個体2 03010個体3 00200
ここで乱数が0.05より小さかったとする
個体3 00200遺伝子座2は、0,1,2,3を取りうる。この場合は1,2,3の3つから乱数で一つを選ぶと、2であったとし、0を2に変更 02200という個体を生成し、子集団に加える。
子集団
交叉によって生じた03000 -----à①-⑤-②-③-④00210 -----à①-②-⑤-④-③突然変異によって生じた02200 ----à①-④-⑤-②-③の3個体が含まれている。
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
各個体の評価
1 2
34
5
hRp://www.slideshare.net/sandinist/ss-1617965を参考にした
各個体の順路の総距離が短いものが評価(適応度)が高い適応度として 適化問題の目的関数を使用するここでは、総距離の逆数を適応度とする。
各個体の評価
1 2
34
5
hRp://www.slideshare.net/sandinist/ss-1617965を参考にした
親集団個体1:①-②-③-④-⑤-① 115km個体2:①-⑤-②-④-③-① 105km個体3:①-②-⑤-③-④-① 110km
子集団
03000: ①-⑤-②-③-④-① 113km00210: ①-②-⑤-④-③-①118km02200: ①-④-⑤-②-③-① 119km
個体2の総距離が 小
個体2の適応度が も高い
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
選択
親集団(サイズN)+子集団(サイズM)から次世代の集団を構成するN個体を選ぶ
選択の方法は様々なものが考案されている(1)ルーレット方式(2)ランキング方式(3)定常状態選択(4)ボルツマン選択(5)トーナメント方式…
適応度
個体1:①-②-③-④-⑤-① 1/115個体2:①-⑤-②-④-③-① 1/105個体3:①-②-⑤-③-④-① 1/11003000: ①-⑤-②-③-④-① 1/11300210: ①-②-⑤-④-③-① 1/11802200: ①-④-⑤-②-③-① 1/119
S=1/115+1/105+1/110+1/113+1/118+1/119各個体をルーレット方式で選択する
個体1
個体2
個体3
1
2
3
4
5
6
03000
00210
02200
ランキング方式各個体を適応度によってランク付けして、「1位なら確率 p1,2位なら確率 p2,3位なら…」というふうにランクごとにあらかじめ確率を決めておく方式個体1:①-②-③-④-⑤-① 4位0.05個体2:①-⑤-②-④-③-① 1位 0.4個体3:①-②-⑤-③-④-① 2位 0.203000:①-⑤-②-③-④-① 3位 0.100210:①-②-⑤-④-③-① 5位 0.0302200:①-④-⑤-②-③-① 6位 0.02
ルーレット方式の場合(1)先の例の場合のように適応度にあまり差がつかない個体間に選択に関する差を導入(2) も適合度の高い個体がルーレットの90%を占める場合、他の個体は選ばれなくなる
1
2
3
4
5
6
個体1
個体2個体3
030000021002200
エリート主義(eliAsm)
も高い適応度を示す個体あるいは複数の上位の適応度を示す個体を次世代に残し、残りをルーレット方式やランキング方式などで選択。見つかった中で も良いものを失わずにすむので、GAのパフォーマンスを向上させることができる
ここではランキング方式で、第二世代として以下が選択されたとする
個体2 03010個体3 00200個体2 03010
ここから終了判定移行し、終了と判定されなければ、第二世代について、交叉、突然変異、選択を実施し、第三世代を作成する。終了するまでこの操作を繰り返す。
「モデリングシミュレーション入門」第13回2005/01/14 井庭 崇 より
組換え
突然変異
交叉によって、局所的な 適解に陥るのをふせぎ、大域的な 適解を探索できる。
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
終了時処理
終的に「現世代」の中で も適応度の高い個体を「解」として出力する。それまでの世代で生成された も適応度の高い個体を「解」として出力する方法もある。
初期集団の生成
終了判定
突然変異
選択
交叉
適応度の評価
終了YES
NO
※ テキストによって処理の仕方は微妙に異なっている
遺伝的アルゴリズムでブランコの漕ぎ方を学習させた。hRp://www.youtube.com/watch?v=8vzTCC-jbwM#t=14
物理エンジン
物理エンジン:コンピュータ上の仮想的な3次元空間において重力、摩擦力などを自動計算して物体の動きをシミュレーションするソフトウェアChipmunkPhysicshRp://chipmunk-physics.net/PhysXhRp://developer.nvidia.com/object/physx_downloads.htmlBULLEThRp://code.google.com/p/bullet/downloads/listDynamohRp://home.iae.nl/users/starcat/dynamo/dynamo.zipSpringheadhRp://springhead.info/wiki/index.php?plugin=aRach&refer=Springhea...
OUTLINE
1. 遺伝的アルゴリズムとは2. Rの基礎3. bio3dの使い方4. MolMolの使い方5. 演習に使用するプログラムとデータの説明 タンパク質立体構造の重ね合わせの説明
Rとは 統計解析のためにデザインされたプログラミング言語 オープンソースのフリーソフトウェア (無料) マルチプラットフォーム (Windows, Mac, UNIXなどのOSで同一の作業ができる) 世界各地のRユーザが開発したプログラム(パッケージ)が CRAN (The Comprehensive R Archive Network)を介して 配信されている。 ( 新の手法が無料で利用可能) 生物系、特にゲノムワイドなデータの解析のパッケージも 充実している (Bioconductor)
PubMedで、”R”、”package”, “Bioinformatics”, “2015”で検索 151 件 検出 (2015年9月10日) ほとんどは新規パッケージ開発の論文。2割弱がRのパッケージを利用した解析
Rは生命科学の分野でも広く利用されている
http://sci-tech.ksc.kwansei.ac.jp/~tohhiro/link.htmlよりダウンロード
アイコンをクリック
Rの起動
コンソール画面が立ち上がる
プロンプト(>)の後に入力
> 3 + 4![1] 7!> 2.3-2.1![1] 0.2!> 3.14*2.0![1] 6.28!> 3/4![1] 0.75!> 1.5^3![1] 3.375!> 3.2%%3![1] 0.2!> 9%/%4![1] 2!
プロンプトの後ろにコマンドを入力してEnterを押すと実行
加 減 乗 除 冪 剰余 切り捨て
変数への値の代入と演算
> a <- 2!> a![1] 2!> print(a)![1] 2!> b <- 9.7!> b^a![1] 94.09!> c <- b^a + b/a!> c![1] 98.94!> b/a![1] 4.85!
変数名は、Rの関数名などとして予約 されているものでなければ、半角英数字 を使って自由に指定できる ただし、変数名を数字ではじめてはいけない 大文字、小文字は区別される
> a <- 2!> A <- 3!> print(a)![1] 2!> print(A)![1] 3!> ips <- 5!> a.Boss <- 3!> ips <- ips + a.Boss!> ips![1] 8!
> sqrt(2)![1] 1.414214!> exp(2)![1] 7.389056!> exp(1)![1] 2.718282!> 2.718282^2![1] 7.389057!> sqrt(exp(2))![1] 2.718282!
sqrt 平方根 exp 指数関数
関数の引数に関数をいれることも できる
> sin(pi/2)![1] 1!> cos(pi/2)![1] 6.123234e-17!> sin(pi)![1] 1.224647e-16!> cos(pi)![1] -1!> tan(0)![1] 0!> tan(pi/2)![1] 1.633124e+16!> sin(pi/2)/cos(pi/2)![1] 1.633124e+16!!
数値的に計算されるので 正確には0であるが、 非常に小さな値として表示
三角関数 sin, cos, tan
本来、無限大になるはず だが、数値的に計算され ているので大きな値として 表示
6.123234e-17=6.123234×10-17!!
四捨五入 > pi![1] 3.141593!> round(pi)![1] 3!> round(pi,4)![1] 3.1416!> round(pi,3)![1] 3.142!> round(pi,2)![1] 3.14!
切り捨て !trunc!大整数!floor!
切り上げ!ceiling!!> trunc(-5.678)![1] -5!> trunc(5.678)![1] 5!> floor(-5.678)![1] -6!> floor(5.678)![1] 5!> ceiling(-5.678)![1] -5!> ceiling(5.678)![1] 6!
Rではベクトルはc()で作成 > y <- c(9.02, 20.124, -0.998, 4.787)!> y![1] 9.020 20.124 -0.998 4.787!
大、 小 max, min!!> min(y)![1] -0.998!> max(y)![1] 20.124!
> x <- c(-pi, -pi*0.75, -pi*0.5, -pi*0.25, 0, pi*0.25, pi*0.5, !pi*0.75, pi)!> y <- sin(x)!> y![1] -1.224647e-16 -7.071068e-01 -1.000000e+00 -7.071068e-01 !0.000000e+00 7.071068e-01 1.000000e+00 7.071068e-01![9] 1.224647e-16!> plot(x, y)! 次ページ図 もっと、間隔を細かくとって、より滑らかな曲線を描きたい。 しかし、手作業で x 座標を書くのはめんどうくさい。 次の方法で解決 seq ある区間を、等しい間隔で区切ったベクトルを発生させる
> seq(1,5,0.5)![1] 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0!> seq(3,5,1)![1] 3 4 5!!seq(start, end, 間隔)!!!> x <- seq(-pi,pi,0.01)!> x! [1] -3.141592654 -3.131592654 -3.121592654 -3.111592654!…![628] 3.128407346 3.138407346!!> y <- sin(x)!> plot(x,y)!図は次ページ!!なめらかになったが、ドットで表示するのは見栄えがよくない。!点を打って線でつなぎたい。!!!
> plot(x,y,ty='l')
x軸のラベルをday、y軸のラベルをvariation, 全体のタイトルを SINE CURVEとする。
> plot(x, y, ty='l',xlab="day", ylab="variation", main="SINE CURVE")
生成されたグラフィクスの保存 画像ファイルの形式を、pngあるいはepsで保存したい場合 グラフィクスコマンドを実行する前に png(ファイル名)、あるいはpostscript(ファイル名)を実行!!グラフィクスコマンド(plotやcurve)を実行した後に!!dev.off()を実行!Rを実行している作業ディレクトリ(後述)内に、画像ファイル!が作成される。
> png("test.png")!> plot(x, y, pch=23)!> dev.off()!quartz ! 2 !!スクリーン上にはグラフィクスは表示されない!!test.pngをクリックすると図が表示される。!
関数quit()で終了
“保存しない”を押して 終了してから、再度 Rを起動
ベクトル(vector)
> 1:50! [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24![25] 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48![49] 49 50> > rep(3, 12) # 3を12回繰り返す! [1] 3 3 3 3 3 3 3 3 3 3 3 3!> !> rep(c(5,7), 2) # 5と7を2回繰り返す![1] 5 7 5 7!>!> rep(3:5, 1:3) # 3を1回、4を2回、5を3回繰り返す![1] 3 4 4 5 5 5!> !> x <- 1:50!> x! [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41![42] 42 43 44 45 46 47 48 49 50!> x <- seq(1,50)!> x! [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41![42] 42 43 44 45 46 47 48 49 50!
c(),seq以外の方法
> x <- c(2,4.5,1.9,1.1,3.3)!> x![1] 2.0 4.5 1.9 1.1 3.3!> y <- c(4.1,5.5, 1,2.1,2.2)!> y![1] 4.1 5.5 1.0 2.1 2.2!> length(x) ベクトルのサイズ![1] 5!> length(y)![1] 5!> z <- 5*x ベクトルの実数倍!> z![1] 10.0 22.5 9.5 5.5 16.5!> x %*% y ベクトルの内積! [,1]![1,] 44.42!
> x[1] ベクトルxの要素1を参照![1] 2!> y[2] ベクトルyの要素1を参照![1] 5.5!> x[1]*y[1]+x[2]*y[2]+x[3]*y[3]+x[4]*y[4]+x[5]*y[5]![1] 44.42!!> sum(x)![1] 12.8!> sum(y)![1] 14.9!
> x <- matrix(c(1,9,2,8,3,7,4,6), ncol=4)!> x! [,1] [,2] [,3] [,4]![1,] 1 2 3 4![2,] 9 8 7 6!> x <- matrix(c(1,9,2,8,3,7,4,6), ncol=4, byrow=TRUE)!> x! [,1] [,2] [,3] [,4]![1,] 1 9 2 8![2,] 3 7 4 6!
> Z <- matrix(1:6, ncol=3)!>!> dim(Z) # 行列のサイズ![1] 2 3!>!> ncol(Z) # 列の数![1] 3!>!> nrow(Z) # 行の数![1] 2!>!> Z[1,2] # 要素の取り出し![1] 3!>!> Z[1,] # 行の取り出し![1] 1 3 5!>!> Z[,2] # 列の取り出し![1] 3 4!> !> length(Z) # 全要素の数![1] 6!!
1 !3 !5!2 !4 !6
繰り返し処理の書き方 (1) for ループ
for ( i in ベクトル ) {!! 繰り返し処理の内容!}!!制御変数 i はベクトルの要素の値を毎回とる!( 変数名は i である必要はない)!!ベクトルの次元数だけ処理が繰り返される!!通常 ベクトルの与え方は 1:10!などのようの i が1づつ増えるように書くことが多い。
j <- 0!for (i in 1:5) {! j <- j + i!}!print(j)
1から5までの数字を 足す処理 for 文で iは1から5まで 変化し、各i について!{}内の処理が行われる。
i 左辺のj 右辺のj i! i = 1 1 <- 0 + 1! i = 2 3 <- 1 + 2! i = 3 6 <- 3 + 3! i = 4 10 <- 6 + 4! i = 5 15 <- 10 + 5! 更新されたj 前のステップのj
R上で 1+2+3+4+5 を実行して同じになるか確認しよう
Rには様々な関数が容易されているが自分のデータの処理には足りない場合がある。
自分のオリジナル関数を作成しよう
Rでは、自分の関数は次のように作成する。!!関数名 <- function(引数1, 引数2, …) {!! 括弧内の引数を使った処理を記述!! return (戻り値)!}!!!例えば xとyの積を求める関数は次のように書ける。!!xy <- function(x, y) {! return (x*y)!}
※ 引数をx, yにする必然性はなく、他の変数名でも構わない!処理の記述部分には引数として与えられた変数名で記述
プログラムのファイルは拡張子をRとしておく。!ドキュメントフォルダ(Zドライブ)におく。!!xy.Rをsourceで、実行中のコンソール画面から読み込むと!オリジナル関数xyを利用できるようになる。!> source("Z:xy.R")!> xy(4,5)![1] 20!> xy(1.41421356, 1.41421356)![1] 2!
問題1!forループを使って、与えられた2つのベクトルの内積を!もとめるプログラムを作成してみる。!naiseki.Rを穴埋めする形で作成 naiseki <- function(a, b) {! len <-! j <- 0! for (i in 1:len) {! j <- j +! }! return (j)!}! 完成させたファイルをsource(“Z:¥nakseki.R”)でよみこんで!sampleR4.txt中のベクトルのペアをコピペで与えて内積を計算
ベクトルの形で与えられた数値データの 平均値を求めるプログラムを作成してみる。 forループを使用する。
heikin <- function(x) {! len <-!! j <- 0! for (i in ) {! j <- j +! }!! return (j/len)!}!
問題2
行列は1種類の型のみで構成される表形式のデータ
> x <- matrix(c(1,5,9,2),ncol=2)!> typeof(x)![1] "double”!> x <- matrix(c("a","b","c","d","ef","gde"), ncol=3)!> typeof(x)![1] "character”!> x! [,1] [,2] [,3] ![1,] "a" "c" "ef" ![2,] "b" "d" "gde"!
行列で数字と文字を混在させると、自動的に数字は文字型に される > x <- matrix(c("a","b","c","d",1,2), ncol=3)!> x! [,1] [,2] [,3]![1,] "a" "c" "1" ![2,] "b" "d" "2" !> typeof(x)![1] "character"! 行列は1種類のデータ型のみで構成される!! ------à 複数のデータ型を混在させることのできる表形式 のデータをRではデータフレームとよぶ
行列では文字型として 扱われる
> x[1,]! V1 V2 V3!1 1.95 3.3 RED!> x[,3]! [1] RED YELLOW YELLOW RED RED YELLOW RED YELLOW YELLOW YELLOW![11] RED !Levels: RED YELLOW!> x[1,3]![1] RED!Levels: RED YELLOW!> x[3,2]![1] 2.2!
データフレームも行列と同様に添字で要素を指定して 参照できる
!1.95 3.3 RED!1.55 2.1 YELLOW!1.45 2.2 YELLOW!2.01 3.4 RED!2.13 3.0 RED!1.54 1.9 YELLOW!1.98 2.9 RED!1.47 1.8 YELLOW!1.34 1.7 YELLOW!1.36 1.8 YELLOW!2.23 3.1 RED !
データフレーム x
x[,1] x[,2] x[,3]
それぞれ、xの1列、2列、3列をベクトルとして抽出
!1.95 3.3 RED!1.55 2.1 YELLOW!1.45 2.2 YELLOW!2.01 3.4 RED!2.13 3.0 RED!1.54 1.9 YELLOW!1.98 2.9 RED!1.47 1.8 YELLOW!1.34 1.7 YELLOW!1.36 1.8 YELLOW!2.23 3.1 RED !
データフレーム x
x[1,]!!!!x[5,]!!!!!!x[11,]!
xの1行、5行、11行をベクトルとして抽出
!1.95 3.3 RED!1.55 2.1 YELLOW!1.45 2.2 YELLOW!2.01 3.4 RED!2.13 3.0 RED!1.54 1.9 YELLOW!1.98 2.9 RED!1.47 1.8 YELLOW!1.34 1.7 YELLOW!1.36 1.8 YELLOW!2.23 3.1 RED !
データフレーム x
!!!x[5,3]!!!!!!
添字でxの要素を添字を指定して抽出
x[1,1]!
x[11,2]!
OUTLINE
1. 遺伝的アルゴリズムとは2. Rの基礎3. bio3dの使い方4. MolMolの使い方5. 演習に使用するプログラムとデータの説明 タンパク質立体構造の重ね合わせの説明
http://thegrantlab.org/bio3d/index.php
Bio3DisanRpackagecontaininguAliAesfortheanalysisofproteinstructure,sequenceandtrajectorydata.
bio3dパッケージのインストール
bio3dパッケージによるタンパク質立体構造データの処理の基本
OUTLINE
1. 遺伝的アルゴリズムとは2. Rの基礎3. bio3dの使い方4. MolMolの使い方5. 演習に使用するプログラムとデータの説明 タンパク質立体構造の重ね合わせの説明
• 網羅的に立体構造情報を収集しているもの
生体高分子の立体構造を扱ったデータベース
PDBj
ヨーロッパ欧州バイオインフォマティクス研究所(EBI)高分子構造データベース (MSD-EBI)
日本大阪大学蛋白質研究所
アメリカ構造バイオインフォマティクス研究共同体 (RCSB)
RSCB PDB PDBe
wwPDB
PDBj
ヨーロッパ欧州バイオインフォマティクス研究所(EBI)高分子構造データベース (MSD-EBI)
日本大阪大学蛋白質研究所
アメリカ構造バイオインフォマティクス研究共同体 (RCSB)
RSCB PDB PDBe
wwPDB
► 網羅的に立体構造情報を収集しているもの
生体高分子の立体構造を扱ったデータベース
• PDBファイルの中身
生体高分子の立体構造を扱ったデータベース
HEADERTRANSFERASE30-AUG-041XBBTITLECRYSTALSTRUCTUREOFTHESYKTYROSINEKINASEDOMAINWITHTITLE2GLEEVECCOMPNDMOL_ID:1;COMPND2MOLECULE:TYROSINE-PROTEINKINASESYK;COMPND3CHAIN:A;COMPND4SYNONYM:SPLEENTYROSINEKINASE;COMPND5EC:2.7.1.112;COMPND6ENGINEERED:YESSOURCEMOL_ID:1;SOURCE2ORGANISM_SCIENTIFIC:HOMOSAPIENS;SOURCE3ORGANISM_COMMON:HUMAN;SOURCE4ORGANISM_TAXID:9606;SOURCE5GENE:SYK;SOURCE6EXPRESSION_SYSTEM:SPODOPTERAFRUGIPERDA;SOURCE7EXPRESSION_SYSTEM_COMMON:FALLARMYWORM;SOURCE8EXPRESSION_SYSTEM_TAXID:7108;SOURCE9EXPRESSION_SYSTEM_CELL_LINE:SF9;SOURCE10EXPRESSION_SYSTEM_VECTOR_TYPE:BACULOVIRUSKEYWDSGLEEVEC,STI-571,IMATINIB,SYK,SPLEENTYPROSINEKINASE,KEYWDS2ACTIVECONFORMATION,STRUCTURALGENOMICS,STRUCTURALKEYWDS3GENOMIX,TRANSFERASEEXPDTAX-RAYDIFFRACTIONAUTHORV.L.NIENABER,S.ATWELL,J.M.ADAMS,J.BADGER,M.D.BUCHANAN,AUTHOR2I.K.FEIL,K.J.FRONING,X.GAO,J.HENDLE,K.KEEGAN,B.C.LEON,AUTHOR3H.J.MULLER-DEICKMANN,B.W.NOLAND,K.POST,K.R.RAJASHANKAR,AUTHOR4A.RAMOS,M.RUSSELL,S.K.BURLEY,S.G.BUCHANAN(省略)
HEADERTRANSFERASE30-AUG-041XBBTITLECRYSTALSTRUCTUREOFTHESYKTYROSINEKINASEDOMAINWITHTITLE2GLEEVECCOMPNDMOL_ID:1;COMPND2MOLECULE:TYROSINE-PROTEINKINASESYK;COMPND3CHAIN:A;COMPND4SYNONYM:SPLEENTYROSINEKINASE;COMPND5EC:2.7.1.112;COMPND6ENGINEERED:YESSOURCEMOL_ID:1;SOURCE2ORGANISM_SCIENTIFIC:HOMOSAPIENS;SOURCE3ORGANISM_COMMON:HUMAN;SOURCE4ORGANISM_TAXID:9606;SOURCE5GENE:SYK;SOURCE6EXPRESSION_SYSTEM:SPODOPTERAFRUGIPERDA;SOURCE7EXPRESSION_SYSTEM_COMMON:FALLARMYWORM;SOURCE8EXPRESSION_SYSTEM_TAXID:7108;SOURCE9EXPRESSION_SYSTEM_CELL_LINE:SF9;SOURCE10EXPRESSION_SYSTEM_VECTOR_TYPE:BACULOVIRUSKEYWDSGLEEVEC,STI-571,IMATINIB,SYK,SPLEENTYPROSINEKINASE,KEYWDS2ACTIVECONFORMATION,STRUCTURALGENOMICS,STRUCTURALKEYWDS3GENOMIX,TRANSFERASEEXPDTAX-RAYDIFFRACTIONAUTHORV.L.NIENABER,S.ATWELL,J.M.ADAMS,J.BADGER,M.D.BUCHANAN,AUTHOR2I.K.FEIL,K.J.FRONING,X.GAO,J.HENDLE,K.KEEGAN,B.C.LEON,AUTHOR3H.J.MULLER-DEICKMANN,B.W.NOLAND,K.POST,K.R.RAJASHANKAR,AUTHOR4A.RAMOS,M.RUSSELL,S.K.BURLEY,S.G.BUCHANAN(省略)
• PDBファイルの中身
生体高分子の立体構造を扱ったデータベース
ヘッダー ボディHEADER 物質の分類名、日付、ファイル名COMPND タンパク質名SOURCE 物質が由来する生物名AUTHOR 座標を作成した著者名REVDAT データが登録された日JRNL 文献情報REMARK 実験条件などに関する情報SEQRES アミノ酸配列HET アミノ酸以外の原子HELIX αーヘリックスに関する情報SHEET βーシートに関する情報TURN βーターンに関する情報SSBOND ジスルフィド結合に関する情報ATOM 個々のアミノ酸の原子の座標HETATM アミノ酸以外の原子の座標CONTACT 原子の結合に関する情報END ファイルの終了
ATOM1NVALA36322.741-1.39711.7291.0033.32NATOM2CAVALA36321.557-0.83111.0241.0032.13CATOM3CVALA36320.954-1.7579.9431.0031.73CATOM4OVALA36319.737-1.9069.8451.0030.94OATOM5CBVALA36321.8830.55210.3911.0033.45CATOM6NTYRA36421.798-2.3899.1351.0029.77NATOM7CATYRA36421.310-3.0357.9281.0027.96CATOM8CTYRA36420.929-4.4858.1571.0026.43CATOM9OTYRA36421.735-5.2748.6501.0029.31OATOM10CBTYRA36422.349-2.9016.8081.0028.13CATOM11CGTYRA36422.619-1.4616.4421.0028.30CATOM12CD1TYRA36421.725-0.7515.6381.0030.33CATOM13CD2TYRA36423.772-0.8156.8931.0030.80CATOM14CE1TYRA36421.9590.5885.2851.0031.59CATOM15CE2TYRA36424.0190.5236.5411.0032.22CATOM16CZTYRA36423.1011.2085.7331.0032.48CATOM17OHTYRA36423.3302.5245.3891.0036.29O
生体高分子の立体構造を扱ったデータベース
• 座標データ
1残基
1残基
原子の名前
アミノ酸の名前
チェインの名前 アミノ酸残基番号
x座標
y座標
z座標
占有率
温度因子 原子
1原子
座標データを見ていても何も情報が得られない。
立体構造の可視化ツールが必要
分子グラフィクスPyMol,jViewer,MolMoletc.
http://osdn.jp/projects/sfnet_molmol/downloads/Installation%20Files/Windows/Windows-MolMol-V1.0.7.zip/
MolMolWindowsバージョンの入手
実行ファイルのアイコンをクリックすると次のような画面が現れる
PDBファイルの読み込み[File]→[ReadMol]→[PDB...]
PDBファイルの読み込み[File]→[ReadMol]→[PDB...]
ここでファイルを指定
うまく読み込めると立体構造が表示されるマウスでドラッグして動かすことができる左ボタン :回転中ボタン :移動左+中ボタン:ズーム
リボン表示
リボンをクリック
Closeをクリック
一つの画面に2つ以上のタンパク質立体構造を表示
この状態で、[File]→[ReadMol]→[PDB...]で別のpdbファイルを読み込む
ribbonをクリック
分子の消去
[Edit]→[Molecule]→[Remove]
OUTLINE
1. 遺伝的アルゴリズムとは2. Rの基礎3. bio3dの使い方4. MolMolの使い方5. 演習に使用するプログラムとデータの説明 タンパク質立体構造の重ね合わせの説明
RMSD
rmsd (root mean square distance) =
€
1n
(dist(A(i),B(i))2∑
残基間対応が最初に与えられていると計算は容易�
構造比較の原点 -重ね合わせ(superposiAon)-
対応するCα原子間距離が最小になるように二つの鎖を重ね合わせる (平行移動と回転)�
McLachlan, A.D. (1972) Nature New Biol. 240, 83-85.
Cαの幾何重心を求め、それぞれ幾何重心の位置を原点とする
X軸
Y軸
Z軸
strovga2.Rを完成させて、相同な立体構造の遺伝的アルゴリズムで重ね合わせを行う。1jl9.pdbと、それを平行移動と回転で変形した1jl9m.pdbを、アラインメント 1jl9.aln.fastaに従い重ね合わせ (xyzの各軸についてπ/4回転させ、x、y、zの 各方向に6.5Å, 4.3Å, 4.5Å平行移動) 1jl9.pdbと、それに相同な構造である3c9a.pdbを、アラインメントseq.aln.fasta に従って重ね合わせ --------------------------------------------------------------- Rのエディタでstrovga2.Rを開き、空欄になっているところを埋めて、プログラムを完成 strovga2.Rを保存する。 source(“strova2.R”)で遺伝的アルゴリズムによる重ねあわせプログラムを読み込む strovga(1000, 100, "1jl9m.pdb","1jl9.pdb","1jl9.aln.fasta", 1.0, 1.0, "test3.pdb", "test4.pdb", "plot1.png") strovga(1000, 100, "3c9a.pdb","1jl9.pdb","seq.aln.fasta", 1.0, 1.0, "test5.pdb", "test6.pdb", "plot2.png") strovga(集団サイズ, 世代数, pdbファイル1, pdbファイル2, アラインメントファイル, 突然変異率, 組換え率, 変換したpdnファイル1, 変換したファイル2, 各世代の 小rmsdのプロットのpngファイル)
strovga <- function(popsize, genum, pdb1, pdb2, aln, mrate, rrate, out1, out2, out3) { print("-----> library bio3d is called") library(bio3d) print("-----> two pdb files and a fasta alignment file are read") p1 <- read.pdb(pdb1) p2 <- read.pdb(pdb2) align <- read.fasta(aln) print("-----> correspondece between alignment and pdb is made") size <- length(align$ali[1,]) pos <- matrix(rep(0, 2*size), ncol=size) for (i in 1:2) { site <- 1 for (j in 1:size) { if (align$ali[i, j] != '-') { pos[i, j] <- site site <- site + 1 } } } print(size) print(align$ali[1,]) print(pos[1,]) print(align$ali[2,]) print(pos[2,]) print("-----> CA coordinates are obtained from PDB data")
ca1 <- p1$atom[p1$atom[,3]=='CA',] ca2 <- p2$atom[p2$atom[,3]=='CA',] for (i in 1:length(pos[1,])) { if (pos[1, i] != 0 && pos[2, i] != 0) { cat(ca1$resid[pos[1,i]],":",ca2$resid[pos[2,i]],"\n") } else if (pos[1, i] != 0 && pos[2, i] == 0) { cat(ca1$resid[pos[1,i]],":","-","\n") } else if (pos[1, i] == 0 && pos[2, i] != 0) { cat("-",":",ca2$resid[pos[2,i]],"\n") } } print("-----> coordinates of the first three CA atoms for two pdb files ") print(ca1[1:3,]) print(ca2[1:3,]) print("-----> Calculation of geometric center of 1st PDB file") ca1gx <- mean(ca1$x) ca1gy <- mean(ca1$y) ca1gz <- mean(ca1$z) print("-----> Calculation of geometric center of 2nd PDB file") ca2gx <- mean(ca2$x) ca2gy <- mean(ca2$y) ca2gz <- mean(ca2$z)
print("-----> The geometric centers of the CA coordicates are set to the orign ") ca1$x <- ca1$x -ca1gx ca1$y <- ca1$y -ca1gy ca1$z <- ca1$z -ca1gz ca2$x <- ca2$x -ca2gx ca2$y <- ca2$y -ca2gy ca2$z <- ca2$z -ca2gz p1x <- p1 p1x$atom[,9] <- p1x$atom[,9] - ca1gx p1x$atom[,10] <- p1x$atom[,10] - ca1gy p1x$atom[,11] <- p1x$atom[,11] - ca1gz p2x <- p2 p2x$atom[,9] <- p2x$atom[,9] - ca2gx p2x$atom[,10] <- p2x$atom[,10] - ca2gy p2x$atom[,11] <- p2x$atom[,11] - ca2gz print("-----> Population is generated") population <- matrix(runif(popsize*3)*2*pi,ncol=3) recd <- rep(0, genum) cat("initial rmsd = ", (1/calcFitness(ca1, ca2, pos, size, c(0,0,0)))-0.01,"\n") count <- 0 rt <- 1.0
for (i in 1:genum) { cat("-----> Generation:", i, "\n") cat("-----> Mutation: ") mx <- runif(popsize) my <- runif(popsize) mz <- runif(popsize) mut <- data.frame(mx, my, mz) msize <- length(mut[mut$mx < mrate | mut$my < mrate | mut$mz < mrate, 1]) mutants <- matrix(rep(0.0, 3*msize), ncol=3) cat("No of mutants = ", msize, "\n") k <- 1 for (j in 1:popsize) { if (mut$mx[j] > mrate && mut$my[j] > mrate && mut$my[j] > mrate) next else { mutants[k, 1] <- modAngle(mut$mx[j], mrate, population[j, 1], rt) mutants[k, 2] <- modAngle(mut$my[j], mrate, population[j, 2], rt) mutants[k, 3] <- modAngle(mut$mz[j], mrate, population[j, 3], rt) k <- k + 1 } } cat("-----> Recombination: ") setp <- rbind(population, mutants) popsize2 <- length(setp[,1]) q <- runif(popsize2) rsize <- length(q[q < rrate])
cat("rsize = ", rsize, "\n") cat("No of Recombinants = ", rsize, "\n") mem1 <- ceiling(runif(rsize) * popsize2) mem2 <- ceiling(runif(rsize) * popsize2) rp <- ceiling(runif(rsize) *2 ) for (j in 1:rsize) recombinants <- matrix(runif(rsize*3), ncol=3) if (rsize != 0) { for (j in 1:rsize) { if (rp[j] == 1) { recombinants[j, 1] <- setp[mem1[j], 1] recombinants[j, 2] <- setp[mem2[j], 2] recombinants[j, 3] <- setp[mem2[j], 3] } else { recombinants[j, 1] <- setp[mem1[j], 1] recombinants[j, 2] <- setp[mem1[j], 2] recombinants[j, 3] <- setp[mem2[j], 3] } } } cat("-----> Calculation of Fitness\n") setp <- rbind(setp, recombinants) sizes <- length(setp[,1]) fitness <- runif(sizes) for (j in 1: sizes) { fitness[j] <- calcFitness(ca1, ca2, pos, size, setp[j,]) } ord <- order(fitness, decreasing=TRUE) # cat(sort(fitness, decreasing=TRUE))
cat("-----> Sampling Next Generation\n") wheel <- rep(0, sizes) for (j in 1: sizes) { if (j == 1) wheel[1] <- fitness[ord[1]] else wheel[j] <- wheel[j-1] + fitness[ord[j]] } rnd <- runif(popsize)*wheel[sizes] rnd <- sort(rnd) mem <- rep(0, sizes) for (j in 1:sizes) { if (j == 1) { mem[1] = length(rnd[rnd < wheel[1]]) } else { mem[j] <- length(rnd[rnd< wheel[j]]) - length(rnd[rnd < wheel[j-1]]) } } cat("-----> Elite Selection\n") if (mem[1] == 0) { mem[1] = 1 for (j in 2:sizes) { if (mem[j] != 0) { mem[j] = mem[j] - 1 break } } } # cat("mem:",mem,"\n")
cat("-----> Make Next Generation\n") l <- 1 for (j in 1:sizes) { if (mem[j] == 0) next else { for (k in 1:mem[j]) { population[l, 1] population[l, 2] population[l, 3] l <- l + 1 } } } recd[i] <- 1/(fitness[ord[1]]) - 0.01 if ( i > 1 && recd[i]==recd[i-1] ) { count <- count + 1 } if (count > 15) { count <- 0 rt <- rt * 0.5 } if (i > 1 && count != 0 && recd[i]!= recd[i-1]) { count <- 0 } cat("Min RMSD of Generation ",i," = ", recd[i],"\n") } png(out3) plot(1:genum, recd, type='l') dev.off() ax <- setp[ord[1], 1] ay <- setp[ord[1], 2] az <- setp[ord[1], 3] # cat(ax, ay, az)
rmtx <- rx(ax) rmtx <- rmtx %*% ry(ay) rmtx <- rmtx %*% rz(az) for (i in 1:length(p1x$atom[,1])) { cc <- rmtx %*% c(p1x$atom[i,9], p1x$atom[i,10], p1x$atom[i,11]) p1x$atom[i, 9] <- cc[1] p1x$atom[i, 10] <- cc[2] p1x$atom[i, 11] <- cc[3] } xx <- c() for (i in 1:length(p1x$atom[,1])) { xx <- c(xx, p1x$atom[i, 9:11]) } xx <- round(as.numeric(xx), 3) write.pdb(p1x, xyz = xx, file=out1) xx <- c() for (i in 1:length(p2x$atom[,1])) { xx <- c(xx, p2x$atom[i, 9:11]) } xx <- round(as.numeric(xx), 3) write.pdb(p2x, xyz = xx, file=out2) }
calcFitness <- function(ca1, ca2, pos, size, carts) { nst <- 0 rmsd <- 0.0 rmtx <- rx(carts[1]) rmtx <- rmtx %*% ry(carts[2]) rmtx <- rmtx %*% rz(carts[3])
for (i in 1:size ) { if (pos[1,i] != 0 && pos[2,i] != 0 ) { cc <- rmtx %*% c(ca1$x[pos[1,i]], ca1$y[pos[1,i]], ca1$z[pos[1,i]]) # dr <- 0.0 rmsd <- rmsd + (cc[1] - ca2$x[pos[2,i]])^2 rmsd <- rmsd + (cc[2] - ca2$y[pos[2,i]])^2 rmsd <- rmsd + (cc[3] - ca2$z[pos[2,i]])^2 # dr <- dr + (cc[1] - ca2$x[pos[2,i]])^2 # dr <- dr + (cc[2] - ca2$y[pos[2,i]])^2 # dr <- dr + (cc[3] - ca2$z[pos[2,i]])^2 # cat(ca1$resid[pos[1, i]], " ", ca2$resid[pos[2, i]], ":", sqrt(dr),"\n")
nst <- nst + 1 } } rmsd <- sqrt(rmsd/nst) return (1/(rmsd + 0.01)) } rx <- function(theta) { return (matrix(c(1, 0, 0, 0, cos(theta), sin(theta), 0, -sin(theta), cos(theta)), ncol=3)) } ry <- function(theta) { return (matrix(c(cos(theta), 0, -sin(theta), 0, 1, 0, sin(theta), 0, cos(theta)), ncol=3)) }
rx <- function(theta) { return (matrix(c(1, 0, 0, 0, cos(theta), sin(theta), 0, -sin(theta), cos(theta)), ncol=3)) } ry <- function(theta) { return (matrix(c(cos(theta), 0, -sin(theta), 0, 1, 0, sin(theta), 0, cos(theta)), ncol=3)) } rz <- function(theta) { return (matrix(c(cos(theta), sin(theta), 0, -sin(theta), cos(theta), 0, 0, 0, 1), ncol=3)) } modAngle <- function(rnd, mrate, theta, rt) { # delta <- 0.5 delta <- 2*pi*runif(1)*rt if (rnd > mrate) x <- theta else { if (runif(1) > 0.5) { x <- theta + delta if (x > 2*pi) x <- x - 2*pi } else { x <- theta -delta if (x < 0) x <- 2*pi + x } } return (x) }
rx, ry, rz は、それぞれx軸、y軸、z軸の周りで、引数として与えられた角度だけ回転させる回転行列を作成し、それを返り値とする関数
課題(1)プログラムstrovga2.Rには2箇所空白がある。 空白を埋め、プログラムを完成させなさい(2)集団を1000個体、世代数を100、突然変異率を1.0,組換え率を1.0として、重ね合わせを実行し、結果得られるpdb形式のファイルをMolMolで表示しなさい。また、重ね合わせ前のpdbファイルをMolMolで表示し、重ねあわせがうまくいっていることを確認しなさい。次の課題のため、100世代目の 小RMSDを記録しなさい。(3)集団サイズを10個体として、計算を行い、その結果を(2)の計算結果と比較し、その違いが何故生まれたかを考察しなさい。他の設定は、(2)と同じとする。(4)突然変異率を1.0,組換え率を1.0、他の設定は(2)と同じとして、計算を実行し、その結果を(2)と比較して、その違いが何故生まれたかを考察しなさい。(5)次の2つ質問のいづれかについて解答しなさい(5-1)今回、重ね合わせをする前処理として、全てのα炭素について幾何重心をもとめた。より重ね合わせの精度をあげる工夫として、幾何重心の計算に使用するα炭素に制限を設けることが考えられる。どのようなα炭素だけを使用すれば良いか考えなさい。 (次ページに続く)
(5-2)赤字で示されている部分は、何のためにif文以下の処理をしているのか?0.5を変数redxにして、関数strovgaの引数としてユーザが自由に変更できるように実装し,redxが1.0の場合、0.1の場合、それぞれで結果がどのように変化するかを観察し、その理由について考察しなさい。