アンサンブル
Online ISSN : 1884-5088
Print ISSN : 1884-6750
ISSN-L : 1884-6750
特集「モンテカルロ法の新展開」
動的モンテカルロ法のすゝめ
伊藤 篤史
著者情報
ジャーナル フリー HTML

2025 年 27 巻 2 号 p. 129-137

詳細
概要

粒子の運動を追跡するモンテカルロ法の一種である動的モンテカルロ法について紹介する.基礎的な観点から,動的モンテカルロ特有のアルゴリズムに起因して,移動イベントの失敗が発生しないために効率的な発展が期待できる点や,シミュレーションにおける経過時間を見積もれる点を挙げる.一方で,実践的な課題として,固体中での不純物拡散など限られた問題にしか現実的な適用が難しいという弱点もある.これらを踏まえた処方箋や発展的な課題についても紹介する.

1  はじめに

ミクロな計算からマクロな現象の説明へ繋げることは,分子シミュレーションの研究者にとって共通の目的であろう.ただし,原子・分子のような計算から,一足飛びに流体・連続体へと繋げるといった問題は少ない.現在取り組まれていることの多くは,ミクロな系の中から重要な情報は残しつつも,少しでも大きい時空間スケールの系へ拡張していく粗視化の手法が色々と考えられている.何が重要な情報となるかは扱う現象によって千差万別であり,汎用的な手法とはなりにくく,問題に応じて様々な粗視化があり得る.

本稿で取り扱う動的モンテカルロ法(KMC)は,時間方向の粗視化を行う手法といえる.空間スケールについてはむしろ分子動力学(MD)と同程度の数nmから数百nm程度で良く,計算で扱うオブジェクトも原子・分子で良いという問題に向いている.空間スケールはミクロのままで,時間スケールだけを拡大し,長時間の現象を追いかけたいというのが,少なくとも私がKMCを利用するモチベーションである[1].このような要請は特殊なことではなく,現在のナノ材料の形成では,空間サイズがnmスケールの物質を作るにあたって,その生成にかかる時間は数十分から数時間に及ぶことが少なくない.私の専門であるプラズマ-物質相互作用においては,例えば半導体加工などはプラズマからのイオン照射で素材をnmスケールに加工する.これに時間がかかる要因は,プラズマからイオン粒子が飛来する頻度がせいぜい10201022m2s1程度と小さいことにある.100 nm2程度の表面にとってはμsに1度しかイオン粒子が到達しない.また,もっと一般的には,nmスケールの材料だからこそ,ゆっくりと加工しないとエネルギーを散逸しきれず,すぐに壊れてしまうという側面もあろう.このような現象のシミュレーションでは,原子・分子の特徴は残したまま,何とかして生成にかかる時間を追いかけたいのである.

ところで,動的モンテカルロ(kinetic Monte-Carlo)という名前はあまりに一般的すぎる.実際に1990年代に名前が定着するまでは,dynamic Monte-Carloやtime-dependent Monte-Carloという呼ばれ方もされていたらしい[2].よって,何を最初の研究とするかは難しいが,VoterによればBeelerによる固体材料の放射線損傷時のアニーリングへの適用であるらしい[3].そのためか,核融合炉材料の研究現場では,KMCの利用は比較的多い印象がある.

さて,KMCを用いれば,もちろん条件によりけりだが,MDでは到達できなかったようなミリ秒や秒・分といった時間に到達できる可能性がある.また,KMC特有のアルゴリズムも,シミュレーション手法開発の観点からは非常に興味深い.モンテカルロ法にも関わらず,シミュレーションの経過時間が見積れるのである.それらKMCの魅力を共有することを目指し,基本的なアルゴリズムから,実践的な課題と処方箋,実用上の問題についても紹介する.

2  基本アルゴリズム

KMCの基本的なアルゴリズムについて紹介する.ここで分子シミュレーションにおいて代表的なモンテカルロ法であるメトロポリス法[4]と比較することで,KMCのアルゴリズムの特徴を分かりやすくする.

まずはメトロポリス法について簡単に復習する.図1(a)に概念図を示すが,粒子集団の中で1ステップに1つの粒子が移動するようなシミュレーションを考える.メトロポリス法では,基本的に次のような手順で1ステップの更新を行う.

図1  (a)メトロポリス法の概念図.(b)格子系における動的モンテカルロ法の概念図.灰色の球は移動可能な粒子を,太い矢印は移動イベント候補を示す.

1.乱数を生成して移動対象となる粒子iを選ぶ.

2.乱数を生成して移動先となる候補地を選ぶ.

3.現在地から候補地への移動が成功する確率piを求める.一般的なMDのポテンシャルモデル関数などから粒子配置に応じたエネルギーを求め,詳細釣り合いの原理を満たすように確率を決める.よく用いられる方法としては,移動前の状態のエネルギーをUi,移動後の状態のエネルギーをUiとしたとき,pi=min[1,exp{β(UiUi})]とする.

4.区間[0,1)の乱数ξを生成し,ξpiであればイベント成功と見做して粒子を移動させる.そうでなければ,イベント失敗として粒子は移動させない.

5.次のステップへ進むため,手順1へ戻る.

メトロポリス法の強みはその汎用性の高さにある.粒子配置からエネルギーUiUiが評価できれば,この手順を繰り返すことで粒子集団の運動を追いかけることができる.ただし,問題となるのは,手順4でイベントが失敗し得ることである.エネルギー差が大きかったり,温度kBT=1/βが低かったりすると成功確率piが小さくなってしまい,粒子集団の運動が殆ど進まなくなることが現実的にあり得る.

イベント発生の効率という点に注目すると,KMCのアルゴリズムには原理的にイベントの失敗が起こらないという強みがある.すなわち,1ステップに1つの粒子が必ず移動する.KMCでも粒子集団の運動を考えることができるが,図1(b)のように,各々の粒子は決まった格子点上だけを動くものとしよう.簡単のため,1度に動ける距離は隣接点までとする.このような条件の下で,KMCのアルゴリズムは次の手順となる.

1.最初に全ての粒子に対して移動先とその発生確率pkをリストアップしておく.

2.全イベントの発生確率の和を求める.

3.乱数を生成して,イベントを選択する.選ばれたイベントは成功と見做し,粒子を移動させる.

4.乱数を生成してこのステップでの時間刻みτを求める.

5.移動した粒子,および,周辺の粒子について,移動イベントの発生確率のリストを更新する.

6.次のステップに進むため,手順2へ戻る.

それぞれの手順の詳細は以後に述べるが,まずは手順3においてイベントを必ず成功させているところに注目してほしい.発生確率pkの大小に関わらず,必ず何か1つの粒子が移動することになる.これによって効率的な発展が期待できる.

それでは,各手順における詳細について説明する.

手順1は最初に一度だけ行う処理であるが,全ての粒子に対して,全ての移動候補をリストアップする必要がある.図1(b)を例にとると,サイトf,c,nに3つの粒子が存在する.ここで1番の粒子の移動先の候補は隣接するサイトb,e,g,jである.同様に,2番の粒子の移動先はサイトb,d,gであり,3番の粒子の移動先はサイトk,m,oである.より一般的に,粒子iの今いるサイトをsiとし,そこからの移動先(すなわちsiの隣接サイト)をnN(si)とする.N(si)は全ての隣接サイトであり,そのうちのある一つをnと書くという意味である.このとき,粒子が移動イベントの発生確率をp(i,n)と書くことにする.ただし,後の議論を見やすくするため,粒子と隣接サイトのインデックスを纏めてk=(i,n)とし,pk=p(i,n)と略記するので注意されたし.

発生確率も手順1で全て求めておく必要がある.最も単純な方法は,メトロポリス法と同様に,移動前後のエネルギーU(si), U(n)の差から

  
p ( i , n ) = p 0 min [ 1 , exp { β ( U ( n ) U ( s i ) ) } ] (1)

とすることである.p0はプレファクターである.

手順2では,全てのイベントとその発生確率が列挙された状態から,発生確率の総和として全確率Pを求める.

  
P = i n N ( s i ) p ( i , n ) = k p k (2)

ここで第二式の1つ目の和の記号は全ての粒子についての和,2つ目の和の記号は粒子iのいるサイトsiから見た隣接サイトnについての和である.

手順3では一様乱数ηを範囲[0,P)から発生させる.範囲の上限を式(2)で求めた全確率とすることが重要である.そして,次の関係を満たすイベントk=(i,n)を選択する.

  
k = 1 k 1 p k η < k = 1 k p k (3)

すなわち,イベントの発生確率を順に積算していき,その和が乱数ηを初めて超えたところがk番目のイベントであるという意味である.そして,選ばれたk=(i,n)に相当する粒子iをサイトnへ実際に移動させる.

手順4ではこのステップのイベントの時間刻みτを見積もる.実はここまで発生確率と呼んできたpkは,KMCにおいては時間の逆数の次元をもっており,正確には発生頻度(英語ではratioではなくrate)と呼ぶ方が相応しい.詳細は後の節で記述するが,範囲[0,1)から生成した一様乱数ξを用いて,このステップの時間刻みは次のように与えられる[5].

  
τ = ln ( 1 ξ ) P (4)

時間刻みは毎ステップ異なる値となる.ともかく,これを積算していけばシミュレーション全体での経過時間が得られる.

手順5では,次のステップに進むためにイベントリストの更新を行う.手順1で列挙したイベントのうち,移動させた粒子iについては現在位置がsinと変更されたために,サイトsiを起点としたイベントは全て無効となりリストから外す.新たにサイトnを起点とした移動先を列挙し,それらについての移動確率p(i,m),ただし,mN(n)をリストに加えることになる.また,これ以外に,移動しなかった周辺粒子に対してもリストを更新する必要がある.例えば,粒子1がサイトfからgに移動したとすると,粒子2にとっても移動先の候補だったサイトgが埋まってしまうことになる.よって移動確率p(2,g)=0と更新してリストから外す必要がある.モデルを詳細にした場合には,周辺粒子の配置によってエネルギーUiが変わるので,それらに合わせて発生確率もpkpkへと再計算する必要がある.これで1ステップの処理はすべて終了し,手順2へ戻る.一部の発生確率が手順5で行使されたので,式(2)に従って全確率Pも更新する必要がある.

手順5の処理は一見すると入り組んでいて面倒だが,要は粒子配置の変化を発生確率に反映させたいのである.よって,手順1に戻って全ての洗い出しを行っても良いが,実際上は手順1の処理がKMCでは最も計算量の大きい処理である.そこで手順5では,イベントの更新対象を必要最低限に留めた結果,移動粒子とその周辺だけに限ることができ,無駄な計算が増えるのを抑えている.

ともかく,手順1および手順5によって,常に全てのイベント候補が列挙された状態にあり,全確率Pが分かっている.このことが,手順3において選んだ確率を必ず発生させられるというKMCの利点に繋がっている.

3  経過時間の見積もり

さて,ここまででKMCの1つ目の特徴であるイベントの失敗がない点について説明した.ここではKMCの2つ目の特徴である経過時間を見積もれる点について説明する.

KMCは広い意味でのマルコフ過程に従っており,経過時間をも積もる際にはポアソン過程に倣った議論が行われる[6].先に導入した全確率Pは,あらためて単位時間当たりのイベント発生回数である.ここで定常だと仮定すると時刻tからt+dtの間に少なくとも1つのイベントが起こる確率は

  
P d t + O ( d t ) (5)

で与えられる.このとき,O(dt)は時刻tからt+dtの間に2つ以上のイベントが起こる確率であり,これはdt0において第一項よりも早く0に収束するとする.Pはポアソン過程の用語で言えば推移確率に相当する.

あるイベントの発生直後,基準時刻t=0に系がある状態Ωに遷移したとする(ここまでの例では状態Ωは粒子配置).そこから時間tだけ経過した時に,まだ次のイベントが発生しておらず,系が状態Ωのままである確率をR(t)とする.微小時間dtの間のイベントの発生確率はPdt+O(dt)であったので,時間t+dtになっても次のイベントが発生していない確率R(t+dt)

  
R ( t + d t ) = ( 1 P d t O ( d t ) ) R ( t ) (6)

である.これより,次の微分方程式が得られる.

  
d R ( t ) d t = P R ( t ) (7)

この解は,

  
R ( t ) = exp ( P t ) (8)

である.ただし,初期値としてR(0)=1とした.数式の形からtR(t)0であることもわかり,直感に反しない.

ここで,1ステップあたりの時間刻みτを考えるために,発生時間の密度分布関数f(τ)を導入する.すなわち,経過時間がτからτ+dτの間にちょうど次のイベントが起こる確率をf(τ)dτとする.系が状態Ωのまま留まっている確率R(t)とは次の関係で結ばれる.

  
R ( t ) = 1 0 t f ( τ ) d τ = t f ( τ ) d τ (9)

ここにR(t)の解である式(8)を代入して両辺を微分すれば,発生時間に関する密度分布関数f(τ)が次のように得られる.

  
f ( τ ) = P exp ( P τ ) (10)

これは,ポアソン過程における待ち行列分布の密度関数に相当する.すなわちf(τ)は,あるイベントが起こってから次のイベントが起こるまでに掛かる時間τの分布である.

ここで念のため,イベントの全確率Pと発生確率密度分布関数f(τ)の関係を整理しておく.状態Ωにあった系が時刻t+dtの間に別の状態へ遷移する確率は,式(6)のように書くと(P+O(dt))R(t)dtである.一方で,発生時間の密度分布関数を使って書けば,f(t)dtである.dt0の極限で両者が一致することは,式(8)および式(10)からわかる.

次のイベントが起こるまでに必要な時間τの密度分布が分かったので,期待値τを計算することができる.

  
τ = 0 τ f ( τ ) d τ = 0 τ P exp ( P τ ) d τ = 1 P (11)

これは最初の乱数を使った定義の期待値と一致する.

続いて,式(4)のように乱数を用いて時間刻みτを決める方法を考える.一般論として,分布関数f(x)に従う乱数列xは,一様乱数ξ[0,1)から生成することが可能である.変数u[0,1)の範囲で一様分布g(u)=1に従うものとする.ここで変数がuからu+duの間の値を取る確率g(u)du=duと,変数xxからx+dxの間の値を取る確率f(x)dxが等しくなるような変換x=ϕ(u)を考える.すると,逆関数ϕ1を用いて,

  
d u = d ϕ 1 ( x ) d x d x = f ( x ) d x (12)

である.これより,分布関数f(x)の不定積分をF(x)=0xf(x)dxとすれば,

  
ϕ ( u ) = F 1 ( u ) (13)

である.すなわち,変数uの代わりに一様乱数ξ[0,1)の列を生成し,目的の分布関数f(x)の不定積分の逆関数を通して得た値x=F1(ξ)の列は,分布f(x)を成す乱数列となる.

これを応用すると,時間刻みτは式(10)の分布関数f(τ)に従うτ[0,)の範囲の乱数列と見做すことができる.すると,

  
F ( τ ) = 0 τ f ( τ ) d τ = [ exp ( P τ ) ] 0 τ = 1 exp ( P τ ) (14)

である.一様乱数ξ[0,1)に対してξ=F(τ)であることから,逆関数を考えると

  
τ = F 1 ( ξ ) = ln ( 1 ξ ) P (15)

となって式(4)に一致する.念のため,対数部分の発散は起こらないことは,一様乱数の範囲から明らかである.

このように,ポアソン過程に従うと仮定することで,KMCの経過時間を見積もることができる.ただし,ここまで1ステップの時間刻みに対してだけの議論を行った.複数ステップ経過した時の経過時間は,本当に各ステップで求めたτの積算で良いのかという点については,詳細は割愛するが,アーラン分布を考えてやればよい.全確率Pが殆ど変化しないと仮定できる場合には,sステップ後の経過時間の期待値tsは,

  
t s = s τ = s P (16)

となる.これより,複数ステップでの経過時間は,1ステップの時間刻みの積算で良さそうである.

4  実践的な課題

ここまでで,KMCのアルゴリズムの基本的な部分について述べた.ここからは実際のシミュレーションを行うための実践的な課題を挙げる.

4.1  適用可能な系

先にも述べたが,KMCのアルゴリズムの最大の特徴であると同時に最大の問題は,粒子の移動先を全て列挙できなけらばならないという点である.つまり,移動対象と移動先が有限でなければならない.この制限から,粒子の移動先を無限に考えられる気体や液体のような系には適さない.

歴史的にも適用例の多いのは,固体結晶中の不純物拡散であったり空孔拡散が多い.これらは,不純物原子の位置できる場所を格子間サイト(安定サイト)に限定したり,空孔の位置できる場所を原子サイトに限定することで,移動イベントの数を有限に抑え込むことができる.現実的な固体結晶では,粒子当たりの移動先はせいぜい10以下であり,粒子数Nに対してO(N)の列挙で済む.

同様の適用先として,固体結晶表面のアドアトム拡散にも応用される.

4.2  エネルギー差か障壁エネルギーか

次の問題は,粒子の移動イベントに対して,移動確率pkをどのように定めるかということである.先の例ではメトロポリス法と同様に移動前後のエネルギー差から確率を設定したが,そのエネルギーをどのように見積もるかが,KMCのモデル化において重要な差異を生む.

規則的な格子上での運動を条件にした最もシンプルなモデルは,粒子iごとにの隣接サイトに存在する粒子数(結合数)biを数えて,エネルギーをbiの関数としてU(bi)=c1bi+c2biのように定めてしまうことである.ここで係数c1c2は実験値や分子動力学(MD)のポテンシャル,密度汎関数理論(DFT)計算などと合うように決めてやる.結合数以外の変数を加えて,もう少し複雑な関数でモデル化することもある.

また,移動確率pkはエネルギー差以外から決めてもよい.詳細釣り合いの原理を満たすように設定すればよいので,より詳細な物理過程を反映するには障壁エネルギーΔEkによって,pk=p0exp(βΔEk)とすることができる.特に昨今では,DFTが普及したことから,Nudged Elastic Band(NEB)法[7]などによって,固体中の不純物粒子移動のエネルギー障壁を精度良く見積もることが容易になった.格子が規則的であることから原子配置とエネルギー障壁の間の関係をモデル化する.関数としてモデル化でき無い場合には,テーブル化・データベース化することになる.

一方で,ここのエネルギー算出に掛かる計算時間はKMCの計算の大部分を占めることになる.そのため,毎ステップMDのポテンシャルから算出するという方法を選択するには注意が必要である.

4.3  プレファクターの決定

さて,経過時間を見積もることができる根拠は,イベントの発生確率pkは,実際には単位時間当たりのイベント発生回数であるためであった.そのための時間の逆数の次元は,プレファクターp0に押し付けられている.そのため,プレファクターにどのような値を設定するかが,KMCの再現時間を決めるカギとなる.大別すると,実験から決める方法と,遷移状態理論を用いて第一原理的に決める方法の2つが挙げられる.

実験から決める方法としては,粒子の拡散係数から算出することができる.確率pkで発生する移動イベントにおいて,移動距離をlk,移動障壁エネルギーをΔEkとすると,単位時間当たりの移動距離の二乗平均は

  
l 2 τ = k ( l k ) 2 p 0 exp ( β Δ E k ) (17)

となる.一方で,拡散係数D(β)との間にアインシュタインの関係式

  
l 2 = 2 d D ( β ) τ (18)

を課す.ただし,dは空間の次元である.これらの比較から,lkΔEkの具体的な値が分かればp0が求まる.実践的には,基本的にプレファクターp0は系の状態や場所に依らず,一度定めたら常に共通の定数である.そこで,系の中で最もシンプルな状況で設定してやればよい.より単純化できる状況として,1粒子だけ存在するものとし,規則正しい格子上の移動とすればlkおよびΔEkも共通の値lΔEとできるだろう.各サイトの隣接数をnとすれば,p0=2dD(β)/nl2exp(βΔE)と簡単に見積もることができる.具体的な例として,タングステンの(110)表面のアドアトム拡散を取り上げると,lは格子定数となり,隣接数はn=4,次元はd=2となる.アドアトム拡散の実験値は,例えばD(β)=D0exp(βΔE)という形式で報告されており,D0=2.6×107[m2/s]ΔE=0.92[eV]である[8].

注意点として,原子レベルの実験値として複数の報告がある場合,それらは桁で違ってくることが多い.また,表面拡散からプレファクターを決めた場合と,内部の空孔拡散から決めた場合とでは,異なる値になってしまうこともしばしばある.この辺りは見たい現象に合わせて塩梅を決める必要も出てくる.

また,実験から報告される拡散係数は,アレニウスプロットされた温度の関数として報告されるため,プレファクターも温度の関数になる.それを嫌って,KMCのモデル中で採用するΔEと,実験値として報告されるΔEを一致させてやればよいかと言えば,必ずしもそう単純ではない.実験で測定される量は,多体効果や自由エネルギーの効果を含んだエフェクティブな量であるため,ミクロからモデル化したKMCの設定値と一致しないのは当然という考え方もできる.

より第一原理的な観点でプレファクターを決める方法として,遷移状態理論(TST)を用いる方法がある.基本的な考え方として,KMCで粒子が位置するサイトは,ミクロにはポテンシャル極小点に対応し,粒子は極小点付近のポテンシャル場の上で振動している.近似のレベルに応じていくつかの手法が提案されているが[914],この振動の振動数がプレファクターに対応する.

4.4  計算上のボトルネックと二分木探索

今度は,コード開発の観点から,実践的な処方箋を紹介する.

先に述べたKMCの手順1から6のアルゴリズムのうち,シミュレーションにおける計算時間のボトルネックになるのは,以外にも確率の総和を取る手順2とイベントを選択する手順3である.他の部分が非常に高速に処理できるために,式(3)に従ってイベントの発生確率の足し算と比較処理を行う部分に相対的に時間が掛かる.

手順1は初回に一度だけ行えばよいので,手順2から手順5の計算量を簡単に見積もってみる.各々の粒子の移動先はせいぜい数か所であるので,粒子数Nに対してイベント数は比例する.手順2では式(2)の総和を取るために単純な逐次処理を行うと,足し算の回数はイベント数に比例したO(N)となる.さらに手順3の式(3)の処理でも,逐次的にpkを積算しつつ乱数ηとの比較を行う.この足し算と比較の回数もO(N)となる.手順4は乱数から時間を見積もるだけでありO(1)である.手順5では,エネルギーUiや移動障壁エネルギーΔEkを算出しなおす必要がある.この計算は,モデル関数やテーブル参照となり,計算量は実装次第ではあるものの,算出しなおす対象となる粒子は,移動した粒子とその周辺の粒子だけであってせいぜい数個である.よってエネルギー算出の計算量はO(1)と言える.

このように,粒子数が増えるほど,式(2)や式(3)といった単純な計算が大きな負荷となる.これを解決する大変有効な方法として,足し算や比較の回数をO(log2N)で抑える方法がBlue[15]らによって提案されている.その方法をさらに効率よくするため,二分木探索を応用した方法をここで紹介する[16].

図2のような二分木を考える.各ノードはKMCの1つのイベントを指す.さらに,各ノードは左右に計2つの子ノードを持つ.このノードの親子関係は,あくまでデータ構造の話であり,イベント自体に優劣はない.また,ステップが進むにつれてイベントの追加や削除が起こると親子関係は入れ替わることがある.左右片方だけのノードを持つこともあるし,末端となる子ノードはそれ以上子ノードを持たない.さて,各ノードは情報としてイベントを指すインデックスkと,そのイベントの発生確率pkを保持する.加えて,自身を含めて子ノード以下にぶら下がる全ての発生確率の和qkを持つ.あるノードkの左右の子ノードをそれぞれkL,kRとしたとき,qkは次の関係を満たす.

図2  二分木を用いたKMCのイベント選択の概念図.この場合ノード1がルートであり,直接の子はノード2およびノード8である.各々のノードは発生確率pkと自分以下の子ノード全ての発生確率の和qkを保持する.矢印はイベント選択時の探索経路であり,発生確率の更新時はその逆の経路を辿る.
  
q k = p k + q k L + q k R (19)

ただし,左右のノードを持たないときは,qkLqkRを0とみなす.

このような二分木構造を構築すると,最上位の親(ルート)k=rの持つ総和qrは,KMCの全確率Pに等しい.つまり二分木の構築によって自然と,式(2)の全確率の計算が完了する.手順5において,あるノードkのイベント確率pkが更新されたときは,すぐにqkも更新する.このとき子ノード以下の再計算は不要である.そしてqkの更新を親ノードkに伝える.更新の伝えられた親ノードkは自身のqkを更新して,さらに親に伝える.これをルートrに到着するまで繰り返せば,ルートの持つ全確率qrが更新される.ルートに到着するまでの処理回数はO(log2N)となっている.イベントのノードを追加したり削除したりした時も,同様にqkを更新しながら親に向かって遡るだけで良く,処理回数はO(log2N)ですむ.

続いて,この二分木を使って手順3のイベント選択を行う.乱数ηが与えられたとき,まず最初にルートのノードk=rを起点とする.ここで,(i)そのノードの発生確率pkと比較し,η<pkならばイベントkを選択して完了する.(ii)これを満たさない場合,η<pk+qkLならば,ηηpkと更新してから左の子ノードkLへ移り,(i)へ戻る.(iii)これも満たさない場合は,ηηpkqkLと更新してから右の子ノードkRへ移り,(i)へ戻る.これを繰り返すことで,やがて条件を満たすイベントが見つかる.この時の比較回数はせいぜいO(log2N)となっている.

こうして,単純な逐次処理ではO(N)となった計算回数をO(log2N)に削減することができる.ただし,これは理想値である.実用的には,二分木構造がどのノードから見ても左右に連なる子ノードの個数がバランスが取れている必要がある.もしバランスが取れておらず,例えばルートノード以下が全て右の子ノードしか持っていない一次元鎖状になったとすると,全ての処理は最悪のO(N)となる.左右のバランスをとるために,ノードの追加や削除に応じて,定期的に親子関係の入れ替えを行うなどの対策が講じられる.我々のコードでは二分木構造のアルゴリズムのうちAVL木[17,18]を用いた実装を行っている.

この二分木探索の効果は非常に大きく,エネルギー計算のモデルが簡単であれば現在の計算機において1コアで1011 steps/dayの計算が可能である.

4.5  MDと比べて本当に速いか

さて,KMCの1ステップ当たりの計算速度はO(log2N)と非常に速くなった.比較対象としてMDを取り上げるならば,固体のような短距離相互作用だけの計算であっても,1ステップ当たりの計算量はO(N)である.これだけ見るとKMCは速いように見える.しかしながら,状況によってはMDを下回ることがあることも注意しておかなければならない.

今行った比較は実はフェアではない.KMCの場合,1ステップ当たりの経過時間は粒子数や温度に応じて小さくなる.式(11)にあるように1ステップ当たりの時間刻みτは全確率Pに反比例するが,ここで全確率Pは粒子数Nに比例する.つまり,粒子数が増加すると,目標時間ttgtに達するのに必要なステップ数が粒子数に比例して増加することになる(ttgt/τN).すると,ttgtに達するまでに必要な計算量はO(Nlog2N)となってしまう.

また,温度が上がると,確率pkは指数関数的に1に近づくが,逆に時間刻みτは指数関数的に減少することになる.よって高温になると時間が進みにくくなる.

一方でMDの場合には,タイムステップは粒子数や温度に依存しない.KMCの計算量O(Nlog2N)とMDの計算量O(N)を比べれば,粒子数を増やしていくとKMCとMDで計算時間が逆転することになる.また,MDの場合には領域分割法により粒子数の増加をカバーできるが,KMCの場合はアルゴリズムが逐次的ゆえに並列化が難しいという欠点もある.もちろん,KMCならば,トラップサイト内での粒子の長時間の振動を無視して,1ステップで別のサイトへ移動できるので,これだけでMDと比べて時間的にかなり有利ではあるが,粒子数が多い場合や高温の場合にはMDと比べて本当に早いか検討してから利用した方が良い.全てKMCにしようとせず,MDや他の手法とのハイブリッド化[19,20]を検討することも良い選択肢である.

4.6  On-the-fly KMC

さて,KMCのアルゴリズムでは系の中の全イベントを事前に列挙出来る必要があり,そのために規則的な格子状のモデルが好まれる.固体結晶で構造が大きく変わらない現象を扱っているときはこれでも良い.しかし,固体であっても結晶粒界やアモルファス構造の場合には,規則的な格子を組むことができない.ましてや,不規則な格子において,サイト間のエネルギー差や障壁エネルギーをシンプルにモデル化するのは困難である.そこで,不規則な格子に対してもKMCを適用するための幾つかの方法が提案されている.

我々が開発した手法もその一つで,不規則な格子中の不純物拡散現象を対象として,手順1での移動サイトの探索を自動的に行い,合わせて障壁エネルギーも算出するものである[21].移動サイトを探すには,系の中から半径1~数nm程度の局所的な領域を切り出してきて,不純物原子を配置し,MDによる構造緩和を行ってやればよい.続いて,見つかったサイトの中から距離の近い2つを選び,再び局所的に切り出した領域でのMDでNEB法を行えば,サイト間の移動障壁エネルギーも算出できる.この計算を系全体に対して網羅的に行えば,原理的には全てのイベント見つかる.ここで,各々のMD計算は場所ごとに独立に行うことができるので,マルチプロセス環境での並列化(MPMD[22])が可能である.

さらに進んで,手順5においても粒子の移動に伴うイベントの再計算をMDで行えばよい.このとき,移動させる粒子を選択された粒子に限らず,それに伴って周辺の粒子の構造緩和もMD行ってやれば,母材の構造が変わっていく様子も扱えるようになる.そのような手法をOn-the-fly KMCと呼ぶ.代表的なコードとしては,kART[23]やSEAKMC[24]が存在する.

我々も上述の方法を拡張してFlyAMというコードを開発しているが,それゆえに課題も見えてきた.On-the-fly KMCは汎用的なフレームワークではあるものの,MDのポテンシャルモデルに強く依存する.そして,固体系のMDのポテンシャルモデルは十分な精度で汎用的なものがあるとは言い難い状況である.ただし,最近流行りの機械学習ポテンシャルがより使いやすくなれば(ユーザーが自前のコードと結合しやすくなれば),On-the-fly KMCが真の意味で活躍する日が来るであろう.

5  まとめ

本稿ではKMCの基本的なアルゴリズムを紹介するところから始まり,実践的な高速化の方法や,実用上の課題を紹介した.分子シミュレーション分野のメトロポリス法から始まる多くのモンテカルロ法と比べると,KMCではアルゴリズムの違いに起因する異なる課題に出会えて興味深い.開発者や利用者も相対的に多くないために,まだまだ新しいKMCの発展や応用があり得るだろう.ぜひ一度,現在の研究対象にKMCを利用できないか検討してみて欲しい.より詳しい解説としてVoterによるレビュー[2]が大変参考になる.また,上記で紹介したAVL木を用いたKMCのサンプルコードをGithub[16]に公開しているので,興味のある方はぜひご覧いただきたい.

 謝辞

筆者がKMCの研究を立ち上げるにあたり,核融合研(当時)のCOE研究員であった小田泰丈博士に基本的なアルゴリズムから応用例まで,多くのことをご教授いただきました.また,MDとのハイブリッド化やプレファクターの設定などでは東北大の村島隆浩博士のご助言に助けられました.この場を借りてお礼申し上げます.本研究はJSPS科研費JP23K17679,24K00617,JP24H02251,JP24H02246の助成を受けたものです.

参考文献
著者紹介

伊藤 篤史(博士(理学))

〔経歴〕2009年名古屋大学大学院理学研究科博士課程修了,2010年核融合科学研究所に入所(現所属).〔専門〕プラズマ-物質相互作用.〔趣味〕ガンダム,木工,F1鑑賞.

 
© 2025 分子シミュレーション学会
feedback
Top