監査役 古川正志
新年おめでとうございます.
今年は,例年と違いコロナ(COVID-19)の第3波の真只中の穏やかならぬ新年となりました.私の英国の友人からの新年のメッセージの中に
「You probably know that the UK has increasing numbers of Covid cases now due to a mutation which has accelerated the spreading.」とありました.すでに報道等で知られているように英国生まれの新型ウイルスは感染率がこれまでのものより1.7倍高いと報道されています.この英文の中にあるmutation が突然変異を示します.
この突然変異が新型としてどれくらいの影響を持つかを少し考えてみました.新しい最適化の理論の一つに遺伝的アルゴリズムと呼ばれるものがあります.この中のスキーマ理論をガイドとします.
遺伝的アルゴリズムは,1個体(生物)の遺伝子を0か1の文字(ビット)の並びで設定します.例えば,4種類の個体の遺伝子を6ビットで
s1=[011001], s2=[101100], s3=[110101], s4=[111000]
と設定します.この1と0の組み合わせが個体の環境への適応度(生存競争の強さ)を発現するとします.具体的には1であるとある形質(性質,機能など)が発現し,0だと発現しないを表し,それらの組み合わせによって環境に対する適応度が決まるとします.適応度をf(s)でし,
f(s1)=252=625, f(s2)=442=1936, f(s3)=552=2809, f(s4)=562=3136
と設定します.そうすると各遺伝子を持つ個体数の割合は,適応度の割合となりますからF=625+1936+2809+3136とすれば,s1が個体の占める割合は625/8506=7.35%となります.同等にして計算するとS2は22.76%,s3は33.02%,s4は36.87%となります.
ところで全ての遺伝子が適応度に貢献するわけではありません.そこでスキーマと呼ぶ概念を導入します.例えば4つのスキーマを次のように表します.
H1=[11****], H2=[1***0*], H3=[1*****], H4=[0****1]
ここで,1または0の文字はこのスキーマを持つ個体の適応度に影響するが,*は影響を与えない記号とします.*はドントケア記号(Don't care)と言われます.
このようにするとスキーマH1は,s1とs4の遺伝子を持つ個体に含まれることがわかります.同様に,H2はs2とs4,H3はs2,s3とs4,H4はS1に含まれます.各スキーマの適応度は含まれる個体の適応度の平均で計算します.各スキーマの適応度をf(H)で表せば,
f(H1)=(2809+3136)/2=2973, f(H2)=(1936+3136)/2,
f(H3)=(1936+2909+3136)/2=2627, f(H4)=625/1=625
と計算できます.
各スキーマにおいて*でない文字の個数を次数(order)と約束しo(H)で表現します.また,最初の*でない文字から最後の*でない文字迄の個数を遺伝子長(length)と約束し,δ(H)で表現します.各スキーマについてこれらを計算すると,次数は
o(H1)=2, o(H2)=2, o(H3)=1, o(H4)=1
遺伝子長は
δ(H1)=1,δ(H2)=4,δ(H3)=0,δ(H4)=5
となります.
遺伝的アルゴリズムは,1世代について(1)各個体の適応度に比例してそれぞれの子孫を作る再生と淘汰,(2)全個体の中で二つの個体をある確率で選択し,それらの遺伝子をある場所から切断して交叉(入れ替え)する操作,(3)一つの個体をある確率で選択しその個体が持つ遺伝子の一つをランダムに選択して1であれば0に,0であれば1に入れ替える突然変異,の3つの操作から構成され,これを各世代で繰り返します.淘汰は,適応度の高いものから決められた個体数までを生存させ,それ以外のものを死滅(消去)させる操作を意味します.この操作を繰り返すことにより,環境に最も適応した(生存競争に勝ち抜いた)個体をこのアルゴリズムは導きだします.この操作で交叉は似たような新種を個体のクラスターとして生成し,突然変異は単純に新種を生み出す役割を果たしています.
それではスキーマを用いて交叉および突然変異により個体数がどのように変化するかを考えてみます.
今,個体がM種類の遺伝子列を持つとし,これらの遺伝子列に1,2,...,Mと識別番号をつけます.jの識別番号を持つものを遺伝子列jと呼ぶことにします.従って,j=1,2,...,Mとなります.遺伝子列jを持つ個体の存在数をP(j)とします.また,遺伝子列jを持つ個体の適応度(生存競争力)をf(j)とします.
(再生)
再生から考えます.再生は子孫を作り出すことを意味します.世代を時刻tで表します.0世代から始めるとt=0,1,...となります.時刻tでの個体の全数をP(t)とします.P(t)に含まれるある(特定)スキーマHを含む遺伝子列の個体がm個あるとします.これをm(H,t)と表します.遺伝子列iを持つ個体の子孫数をP[i]とし,この個数は適応度の大きさによって比例分配されるとすれば,P[i]は確率
pi=fi/(f1+f2+...+fj+...+fM)=fi/Σjfj
によって決定されます.f(H)をスキーマHを持つ個体の平均適応度(最初の例で計算したもの)とすれば,スキーマHを表す次世代の個体数m(H,t+1)は,スキーマHを持つ個体一つにつきM・f(H)/Σjfj子孫を作るので,m(H,t)の個体数からは
m(H,t+1)=m(H,t)・M・ f(H)/Σjfj
と計算できます.全ての遺伝子列の適応度の平均をfaveとすれば
fave = Σjfj/M
となるので,これを上の式に代入すると
m(H,t+1)=m(H,t)・M・ f(H)/Σjfj
= m(H,t) ・f(H)/ fave
となります.これからあるスキーマHを持つ個体はスキーマの平均適応度f(H)の平均適応度faveに対する比率で増加数することが分かります.すなわちスキーマHの平均適応度がスキーマ全ての平均適応度より大きいほど子孫を多く得ることができるようになります.この時はf(H)>f faveが成立しています.スキーマHを持つ個体の平均適応度がfaveよりc%多いとすれば
f(H)= fave+c fave= fave(1+c)
となります.これを上の式に代入すると
m(H,t+1)= m(H,t) ・f(H)/ fave
= m(H,t) ・fave(1+c)・/ fave
= m(H,t) ・(1+c)
となります.これが時刻t=0から繰り返されると時刻tでは
m(H,t+1)= m(H,t) ・(1+c)t
となり,スキーマHの平均適応度が残隊の平均適応度より大きいものは指数的に子孫を増やし,小さいものは指数的に壊滅していくことが分かります.
字数が多くなりましたので,交叉および突然変異によりスキーマHを持つ個体の数がどのように推移するかを次回に考えたいと思います.