Optimizeモジュール
Optimizer
FIRELBFGS
matlantis_featuresにある FIRELBFGS をgrrmpyから呼び出せるようにした.
今後matlantis_featuresのアップデートによりFIRELBFGSの位置が変わった場合には修正する必要がある
引用 FIRELBFGSとは
ヒューリスティックにうまくいきそうな最適化アルゴリズムとして、
構造最適化の初期など、不安定な場所では、FIREを用いて勾配を下っていく。
ある程度安定点に達したら(Forceなどが小さな値になったら)LBFGS法を用いて高速に収束を試みる。
という方法がうまくいきそうです。
matlantis-features では、このようなアルゴリズムを FIRELBFGS Optimizer として実装をしています。
from grrmpy.optimize import FIRELBFGS
opt = FIRELBFGS(atoms,maxstep_fire=0.2,maxstep_lbfgs=0.2)
opt.run(fmax=0.001,steps=10000)
OptWithCond(STOP機能付きOptimizer)
from grrmpy.optimize import OptWithCond
from grrmpy.io import write_html
from ase.optimize import FIRE
from ase.neb import NEB
neb = NEB(images,climb=False,parallel=True)
opt = OptWithCond(FIRE,neb,maxstep=0.2) # FIREを継承しOptimizerをインスタンス化
opt.attach_stop(steep_peak(opt,300,30))
opt.attach_stop(lambda:same_energy_and_fmax(opt,10,2))
opt.attach(lambda:write_html("NEB.html",images))
- grrmpy.optimize.optimizer.OptWithCond(optimizer, atoms, **kwargs)[ソース]
- OptWithCond.stopがTrueになると計算が停止するOptimizerattach_stop()の引数にTrue,Falseを返す関数をアタッチできる.イタレーション毎にattach_stopで設定した関数が実行され,関数の返り値がTrueになればOptWithCond.stopがTureとなり,計算が停止する.
Parameters:
- optimizer: class
- 継承するoptimizer
- atoms: Atoms
- Atomsオブジェクト
- kwargs:
- optimizerの引数
- 戻り値
Stop機能を付けたOptimizer object
- 戻り値の型
class
attach
automate_maxstep
write_traj
- grrmpy.optimize.attach.write_traj(outfile, opt, dist=0.25, mic=None, method=0)[ソース]
最適化中の構造をある条件に従って保存する.
IRC Pathのようなものを作成することができるmethod=0 : TS構造からの距離がdistずつ離れるたびに記録method=1 : 緩和中の移動距離がdistずつ移動するたびに記録Parameters:
- outfile: str
保存先のtrajファイルパス.既に存在するファイルを設定するとエラー
- opt: Optimizer object
Optimizer
- dist: float
dist Å構造が変化する度に構造を保存する.
- mic:
- 周期境界条件で最小移動規則を適用し距離を算出する場合,TrueNoneの場合,計算する構造が周期境界を持っている場合は自動でTrueにする.
- method: Int
メソッド
注釈
他のattachとは異なりlambda文でのattachを行なわないことに注意する.Exampleを参照する.サンプル
>>> opt = LBFGS(atoms) >>> opt.attach(write_traj('forward_path.traj',opt))
optimize_eq
same_energy_and_fmax
- grrmpy.optimize.attach.same_energy_and_fmax(opt, times, row, force_digit=4, energy_digit=6)[ソース]
同じEnergyとfmaxを繰り返す場合に停止する.
OptWithCondと上で使用する.
Parameters:
- opt: optimizer
Optimizer(OptWithCond)
- times: int
times回連続で同じfmax,energy繰り返す事態がrow回あれば停止する.
- row: int
times回連続で同じfmax,energy繰り返す事態がrow回あれば停止する.
- force_digit: int
小数点以下force_digit桁が一致するか
- energy_digit: integer
小数点以下energy_digit桁が一致するか
サンプル
>>> from grrmpy.optimize import OptWithCond >>> opt = OptWithCond(FIRE,atoms,maxstep=0.2) >>> opt.attach_stop(same_energy_and_fmax(opt,10,2))
steep_peak
- grrmpy.optimize.attach.steep_peak(opt, max_ea, nsteps)[ソース]
- NEB計算中にあるイメージと隣のイメージとのエネルギー差がmax_ea(kJ/mol)以上になれば計算を停止する.計算初期はイメージが高く出るのでnsteps(回)イタレーションが終わった後から計測を始める.
Parameters:
- opt: optimizer
Optimizerオブジェクト
- max_ea: float
隣のイメージとのエネルギー差がmax_ea(kJ/mol)以上になれば計算を停止する
- nsteps (_type_):
始めのnsteps回のあとから計測を始める
サンプル
>>> from grrmpy.optimize import OptWithCond >>> neb = NEB(images,climb=False,parallel=True) >>> opt = OptWithCond(FIRE,neb,maxstep=0.2) >>> opt.attach_stop(lambda:steep_peak(opt,300,30))