CrySPY documentのサブセクション
バージョン情報のサブセクション
Version 1.5.0
Important change
EA-vcにおける組成制限
min_compとmax_compで,各原子種の組成比の下限・上限を指定できるようになった.電荷中性条件との併用も可能.- 機能 > 組成制限
入力ファイル
- 描画用のパラメータを[EA]セクションから,新設した[visual]セクションへ移動.
cgenは非推奨となり,描画対象の世代はplot_min_gen・plot_max_gen,基準となる世代はref_genで指定する.- 形成エネルギーの基準エネルギーは,
end_pointからref_energiesへ名称変更.end_pointも後方互換性のために使用可能. targetとtimeout_molを廃止.- 入力ファイル > [EA] Section,入力ファイル > [visual] Section,入力ファイル > [structure] Section
Common
- 必要なPythonのバージョンを3.10以上,PyXtalのバージョンを1.0.7以上に変更.
- ランダム構造生成と進化的アルゴリズムによる構造生成を,単独のライブラリとして使用する機能を廃止.
Added
Subcommand
- cryspy-print:pickleファイルの内容や要約を表示する.
rslt_data.pklでは表示行数の指定,組成による絞り込み,テキスト結果ファイルの再出力も可能. - cryspy-extract-struc:構造データから構造を抽出し,cifファイルとして保存,または構造情報を画面に表示する.
- CrySPY Utilityの
print_pkl.pyとextract_struc.pyに代わるコマンドとしてCrySPYに組み込んだ.
描画・再描画
cryspy-EplotでRS・EAのエネルギープロットにも対応.- EA・EA-vcで,描画対象の世代範囲と基準となる世代を分けて指定できるようになった.
- EA-vcで,
axis_orderによる原子種の配置変更と,許容組成範囲の表示に対応. cryspy-Eplot -cで,探索前でも入力した組成制限の許容範囲を確認できる.terminalsで化合物を基準とした凸包を描画できるようになった.- コマンド > cryspy-Eplot,入力ファイル > [visual] Section
入力パラメータ
seed:乱数生成器のシードを指定.入力ファイル > [option] Sectionmax_parent_attempts:EAで子個体1つを生成する際の親選択の試行回数の上限を指定.デフォルトは50.入力ファイル > [EA] Section
Niggli reduction
- crossoverで生成した構造に対してNiggli reductionを適用するようになった.
- 探索アルゴリズム > EA > Crossover
結果・画像の出力
rslt_outでcryspy_rsltとcryspy_rslt_energy_ascの出力タイミングを指定できるようになった.デフォルトはalways.energy_output_intervalで,EAのエネルギープロット,EA-vcの凸包の図とhull distanceのファイルの出力間隔を指定可能.デフォルトは1(毎世代),0で自動出力を無効化する.- EA-vcの凸包とhull distanceの計算自体は,出力間隔によらず毎世代行う.
- 入力ファイル > [option] Section
電荷中性条件
- 電荷中性条件を満たす原子数の組合せの計算手法を改良.
- 多価の原子種(multivalent species)に対応.例:
charge = (2 3) -2. cn_modeで原子数の組合せの列挙・サンプリングを選択可能.autoでは,max_cn_grid_pointsに応じて切り替える.- 機能 > 電荷中性条件
バックアップ
backup_intervalで自動バックアップの間隔を指定できるようになった.- バックアップディレクトリ名に進行番号と単位を付加.手動バックアップにはさらに
manualを付加する. - 機能 > バックアップ
Changed
EA-vcのデフォルト値
add_maxとelim_maxを3から5へ変更.subs_maxは3のまま.- [visual]セクションの
show_maxはNone,bottom_marginは0.04へ変更. - 入力ファイル > [EA] Section,入力ファイル > [visual] Section
初期構造の読み込み
load_struc_flag = Trueで読み込むデータのチェックを強化.構造ID,構造数,原子種・原子数に加え,EA-vcでは組成制限や電荷中性条件も確認する.- 必要な構造数に満たない場合は,不足分をランダム生成で補完する.
- 機能 > 初期構造の読み込み
Fixed
- EAの親選択で,同じ親が繰り返し選ばれ,異なる2個体を選ぶ処理が無限ループになる問題を修正.
- ルーレット選択で,全候補のfitnessが同じ場合にも選択確率を正しく計算するように修正.
- EA-vcで,原子数・組成制限や
n_eliteを変更した後に,過去の結果からエリートを選び直すように修正. - EA-vcで,凸包計算から除外された構造をエリートや親候補として扱う際にエラーになる問題を修正.
- crossoverの原子追加処理に指定した乱数生成器が渡されず,再現性が損なわれる問題を修正.
- インタラクティブモードで,入力エラー時に
lock_cryspyが残る問題を修正.
Version 1.4.3
Fixed
- Elimintion in EA-vc: 途中で原子数がゼロを下回る問題を修正
- Substitution in EA-vc: 原子数が下限を下回るバグを修正
Version 1.4.2
Important change
- EA-vcでVASP, QEに対応
- チュートリアル > 組成可変型進化的アルゴリズム(EA-vc) > VASP(Fe-Al)
- チュートリアル > 組成可変型進化的アルゴリズム(EA-vc) > QE(Fe-Al)
Added
- ASEでのcheck_optに対応
- サブコマンド(参考:機能 > 計算のスキップ)
- cryspy-skip
- cryspy-calc-convex-hull
Changed
ジョブファイルの自動書き換え
- ジョブファイル末尾のsedコマンドはCrySPYが自動で追記
- 機能 > ジョブファイルの自動書き換え
構造最適化入力ファイル名の優先順位
xはステージ数.
x_ase_in.pyase_in.py_xase_in.py
以前のバージョンでは2番目のase_in.py_xのスタイル.
Fixed
- 構造最適化後のmindistのチェック時のバグ修正(構造データがうまく取れない時)
Version 1.4.1
Important change
EA-vc
- addition, eliminationおよびsubstitutionで操作する原子数が変更可能になった.デフォルトは3個以下でランダム(1.4.0では1個のみ).
Added
Charge neutral condition
- EA-vcにおける構造生成時に電荷中性条件を課すことが可能になった.
Subcommand
- cryspy-Eplot: (CrySPY > 機能 > エネルギープロット )
Version 1.4.0
Important change
New algorithm: EA-vc
- 現在,インターフェースはASEのみに対応.VASPなど順次対応予定.CrySPY > インターフェース
- CrySPY > チュートリアル > 組成可変型進化的アルゴリズム(EA-VC)
- CrySPY > 探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-VC)
インタラクティブモード
- Jupyter環境からRS, EA, EA-vcが利用可能
- インターフェースはASEのみに対応
- CrySPY > チュートリアル > インタラクティブモード (Jupyter Notebook)
- CrySPY > 機能 > Interactive mode
EA
- EAでは
tot_strucを不使用にした.第1世代の構造数もn_popを利用するように変更
構造最適化後の原子間距離チェック
- cryspy.inの[option]セクションに
check_mindist_optを追加. - デフォルトで
check_mindist_opt = True. - 構造最適化後に最小原子間距離の制限を満たしているかチェックする.
Common
cryspy.inのnatotを廃止- Ctrl_extの廃止
Fixed
- BOで
scoreにTSを使うときのバグを修正 - その他いくつかマイナー修正
Version 1.3.0
Important change
Common
- workingディレクトリ名の変更
work000000 –> work0 - いくつかのデータをタプルにまとめてpickle化して保存していたが,それぞれ個別にデータをpickle化するように変更
For example, rs_id_data.pkl –> id_queueing.pkl and id_running.pkl
BO
- cal_fingerprintプログラムの使用を廃止.代わりにdscribeが必要.
- cryspy.inの
fppathとfp_rminも合わせて廃止.
- cryspy.inの
- ベイズ最適化のライブラリをCOMBOから後継のPHYSBOへ変更
- See Installation > CrySPY > CrySPY 1.3.0 or later
Fixed
soiap
- 最近のpymatgenで動くように修正
Added
ランダム構造生成と進化的アルゴリズムによる構造生成はライブラリとして使用可能に.(version 1.5.0で廃止)
for developer
- グローバル変数を廃止 (rin), 入力変数にはdataclassを採用
- リストとして使っていた入力変数の多くはタプルに変更
Version 1.2.5
Bug fix
- simple bug fix
Version 1.2.4
バグ修正
- ASE interface:
e.args[0]–>str(e.args[0]) - ext mode: noprint
- njob ( see also FAQ > シミュレーションの途中でnjobを変えることはできますか? )
EA
- default value of
cls_lat:equal–>random
EA-vc
- test version of variable composition EA (EA-vc). only binary system for now.
Version 1.2.3
MPI
- バグ修正
- MPIを使うときは
-pオプションが必要
See also
Version 1.2.2
エンタルピー
VASPとQEでは全エネルギーの代わりにエンタルピーが利用可能.
See also
Version 1.2.1
ASE interface
Bug fixed for multiple stages.
Version 1.2.0
ASE interface
ASEインターフェースが利用可能.
See also
Adoption of logging
CrySPYのログは画面とファイル (log_cryspy and err_cryspy)の両方に出力
See also
Version 1.1.1
spg_errorのバグ修正
ランダム構造生成時,ある空間群で構造生成ができない時にsgp_errorという変数にその空間群番号を記録し,以降その番号はスキップするようにしていたが,ごく稀に間違って登録されてしまうバグが見つかった.よってこのspg_errorという機能は削除した.
Version 1.1.0
MPI並列
MPIを用いたランダム構造生成が利用可能.
詳細は下記を参照.
- Tutorial > Random structure generation with MPI
- Features > Structure generation with MPI parallelization
LAQA
ストレス項を考慮に入れたスコアが利用できるように更新 (T. Yamashita and H. Sekine, Sci. Technol. Adv. Mater. Meth. 2, 84 (2022).).
詳細は下記を参照.
Backup
日付でディレクトリを作ることでバックアップの履歴が残るように変更. 詳細はfeatures/backup.
Version 1.0.0
Install and run
CrySPY is now available in PyPI. You can install by
The executable script, cryspy is automatically installed in your PATH.
To run CrySPY, just type cryspy:
CrySPY stops once before going to next selection (BO, LAQA) or next generation (EA). For example, EA case:
[old version]
- cryspy run
- check jobs (finish current generation?)
- structure generation by EA automatically starts
[CrySPY 1.0.0]
- cryspy run
- check jobs (finish current generation?)
- stop
- cryspy run
- auto backup
- structure generation by EA automatically starts
Auto and manual backup
Automatically backup:
- before going to next selection or next generation
- structure generation
To manually back up:
See features/backup in detail.
Clean
See features/clean in detail.
Directory tree
Changed the directory tree.
- genstruc/RS –> RS/
- genstruc/EA –> EA/
- genstruc/struc_util.py –> util/
- utility.py –> util/
IO
- Fixed standard output file and standard error file:
log_cryspyanderr_cryspy cryspy.outis obsoleted
Moved to CrySPY Utility
With the change in installation method, examples and cal_fingerprint have been moved to the CrySPY Utility.
COMBO
The python library COMBO is now optional in CrySPY. If you do not use Bayesian optimizaion, you do not need to install it.
New calc_code
- ext: Deprecated in version 1.4.0.
cryspy.in
fppath
New input variable for cal_fingerprint. See Instllation/cryspy/cryspy_1.0
fwpath
New input variable for find_wy. See Instllation/requirements/find_wy
mindist
mindistcan be omitted incryspy.inmindist_eais obsoleted- added
mindist_mol_bsandmindist_mol_bs_factorincryspy.in
Version 0.10.3 or earlier
- [2022 May 17] version 0.10.3 released
- Bug fixed: LAMMPS IO.
- [2022 January 24] version 0.10.2 released
- Added nrot: maximum number of times to rotate molecules in mol_bs
- [2021 September 30] version 0.10.1 released
- Fixed the problem of numpy.random.seed in multiprocessing
- [2021 July 25] version 0.10.0 released
- Support PyXtal 0.2.9 or later
- LAQA can be used with QE
- Upper and lower limits of energy for EA and BO
- [2021 July 13] paper published
- Our paper on CrySPY software has been published in STAM:Methods
- [2021 March 18] version 0.9.2 released
- Support pymatgen v2022.
- [2021 February 7] version 0.9.0 released
- Interfaced with OpenMX
- Employ PyXtal library to generate initial structures
- If you use PyXtal (default), find_wy program is not required
- LAQA can be used with soiap
- Change the name: [lattice] section –> [structure] section
- Several input variables move to [structure] section
- natot: [basic] –> [structure]
- atype: [basic] –> [structure]
- nat: [basic] –> [structure]
- maxcnt: [option] –> [structure]
- symprec: [option] –> [structure]
- spgnum: [option] –> [structure]
- New features
- Molecular crystal structure generation
- Scale volume
- [2020 March 19] paper published
- Our paper on adjusting the descriptor for CSP Bayesian optimization has been published in Physical Review Materials
- [2020 February 16] version 0.8.0 released
- Migrate to Python 3
- CrySPY logo created
- Change several variable names and data formats
- Change style of output for energy: eV/cell –> eV/atom
- IDs of working directories corresponds to structure IDs
- New features
- recalculation
- manual select in BO
- [2018 December 5] version 0.7.0 released
- New features
- Evolutionary algorithm
- New features
- [2018 August 20] version 0.6.4 released
- [2018 July 2] version 0.6.3 released
- [2018 June 26] Version 0.6.2 released
- [2018 March 1] Version 0.6.1 released
- [2018 January 9] paper published
- Our paper on CrySPY has been published in Physical Review Materials
インストール
メモ
ワークステーションやスーパーコンピュータなどに (CrySPY + Python環境 + 構造最適化ソフト) が必要.
動作環境
CrySPY
CrySPYユーティリティ
インストールのサブセクション
Python
最終更新日:2026年10月17日
Python
CrySPY 1.5.0 or Later
- Python >= 3.10
pipでcsp-cryspyをインストールすると,必須ライブラリのPyXtal,pymatgen,ASEなどは自動的にインストールされる. 詳細はインストール > CrySPY 1.3.0 or Laterを参照.
CrySPY 1.3.0 – 1.4.3
- Python >= 3.9
pipでcsp-cryspyをインストールすると,必須ライブラリのPyXtal,pymatgen,ASEなどは自動的にインストールされる. インストールの詳細はこちら Installation > CrySPY.
2025/06/17 以下の環境で動作確認済み(pip install csp-cryspyでインストールされるもの)
- python 3.13.5
- CrySPY 1.4.0
- numpy 1.26.4 (with physbo) and 2.3.0(without physbo. physbo requires numpy < 2.0)
- pandas 2.3.0
- pymatgen 2025.6.14
- pyxtal 1.0.9
- scipy 1.15.3
Quick Install
BOを使う場合は追加で
CrySPY 1.1.0 or 1.2.5
If you install cryspy with pip, necessary libraries such as PyXtal will be installed automatically. Go to Installation > CrySPY. Manual installation of COMBO is required when using Bayesian optimization.
CrySPY 1.0.0
情報
[2023 April 22] PyXtal (pyshtools)をarm64のMacOSにインストールする方法がわかった.Arm64 on MacOS (without Rosseta 2)を参照.
[2023 March 15]
MacOSのarm64環境でのpyxtalのインストールが難しいので,Rosetta 2を使用してx86_64環境での利用が推奨.
CrySPY 0.10.0 – 0.10.3
Tested with Homebrew Python 3.8.x and 3.9.x on Mac and Python 3.8.x on Linux.
CrySPY 0.9.2
Tested with Homebrew Python 3.8.x and 3.9.x on Mac and Python 3.8.x on Linux.
情報
[2021 July 15] PyXtal 0.2.9以上を使う場合は,CrySPYを0.10.0以上にアップデートすること.
情報
[2021 March 18] pymatgen 2022.x.x.でbreaking changeがあって,importの書き方等が変わった. CrySPY 0.9.2とPyXtal 0.2.2はpymatgen 2022をサポート.
情報
[2021 Feb. 5]
PyXtalを使うにはnumbaが必要だが,numbaは現在のところPython 3.9に対応していないのでしばらくはPython 3.9ではなくPython 3.8を利用する.
[2021 March 18]
numbaがPython 3.9.xをサポート.CrySPYもPython 3.9で動作可能
情報
[2021 Feb. 7]
PyXtalではSciPyが使われているが, 最新のSciPy(v1.6.0)ではdeepcopyを使うとバグが出る.
SciPyはv1.5.4を利用する.
[2021 March 18] 上記バグはSciPy 1.6.1で修正された.
CrySPY 0.9.0 – 0.9.1
- Python 3.8.x
- COMBO
- pymatgen (<= 2021.x.x)
- PyXtal 0.1.6 - 0.2.1
CrySPY 0.8.0 or Earlier
CrySPY本体に同梱されている古いドキュメントを見ること.
CrySPY 1.3.0 or Later
最終更新日:2026年7月9日
CrySPY
pip
PyPIではcryspyではなく,csp-cryspyという名前なので注意.
pipでインストールすると,メインコマンドのcryspyが自動的にPATHが通ったところにインストールされる.
下記コマンドでチェックできる.
バージョン1.4.1からは,他にもサブコマンドがいくつかインストールされる.
編集可能モード
CrySPYのソースコードを編集して使用したい時は,pipの編集可能モード(-e オプション)を使うのが便利. GitHubのメインブランチは開発版としてリリース版とは異なる場合があるので release pageからリリース版の圧縮ファイルをダウンロードしてソースを取得する.圧縮ファイルを展開してから下記コマンドでインストール.
PHYSBO and DScribe (Optional)
ベイズ最適化を使う場合は, PHYSBOと DScribeが必要.
情報
cal_fingerprint program and COMBO are obsolete.
mpi4py (Optional)
MPI並列化を用いたランダム構造生成を行う場合は,mpi4pyが必要.
Jupyter and nglview (Optional)
ローカルPCでの解析やインタラクティブモードにはJupyterが必要. インタラクティブモードで結晶構造を可視化する時にnglviewを使いたい場合はインストールしておく.
CrySPY 1.0.0 -- 1.2.5
CrySPY
pip
CrySPY 1.0.0以降はpipを使ってインストール可能になった.
pipでインストールすると,実行スクリプトのcryspyが自動的にPATHが通ったところにインストールされる.
下記コマンドでチェックできる.
編集可能モード
CrySPYのソースコードを編集したい時は,pipの編集可能モード(-e オプション)を使うのが便利.
git cloneの代わりに,release pageから圧縮ファイルをダウンロードしてもよい.
cal_fingerprint (Optional)
cal_fingerprintプログラムは構造記述子を計算するためのもので,アルゴリズにベイズ最適化を使う場合は必須. CrySPY 1.0.0からはcal_fingerprintプログラムはCrySPY utilityに含まれている. コンパイルについてはこちらを参照:Instllation/CrySPY_utility/Compile cal_fingerprint.
実行ファイルcal_fingerprintをPATHが通ったところに置く,もしくは下記のようにcryspy.inで実行ファイルのpathを指定する.
Arm64 on MacOS (Without Rosseta 2)
情報
PyXtalではversion 0.6.3からpyshtoolsが必須ではなくなったので,最近のバージョンのpyxtalを使う場合は以下に書いてあることは無視して良い
- miniforge3をインストール(homebrew pythonでpyshtoolsをインストールする方法が今のところ不明)
- condaでpymatgen,pyshtoolsをインストール(最近のバージョンのpyshtoolsはconda-forgeからインストール可能になった)
- CrySPYをインストール
構造最適化ソフト
構造最適化ソフト
少なくとも1つは必要.
CrySPY 0.10.3 or Earlier
CrySPYのインストールはシンプルで,ダウンロードするだけで良い.
ダウンロード
CrySPYは任意の場所に置いて良い.ここでは例として~/CrySPY_root/CrySPY-x.x.x (x.x.x はバージョン番号)にダウンロードすることにする.
gitコマンドを使うか,リリースページから圧縮ファイルをダウンロードする.
Git
ZIP or tar.gz File
zip または tar.gz ファイルをここからダウンロードする..
ダウンロードして展開したソースを~/CrySPY_root/CrySPY-x.x.xに置く.
ディレクトリ構成
~/CrySPY_root/CrySPY-x.x.x/のディレクトリ構成:
情報
cryspy.pyがメインスクリプト.
セットアップ (オプション)
find_wy (オプション)
find_wyを使う時は,find_wyの実行ファイルを(例えば)~/CrySPY_root/CrySPY-x.x.x/CrySPY/find_wy/以下に置く必要がある.
つまり~/CrySPY_root/CrySPY-x.x.x/CrySPY/find_wy/find_wy.
cal_fingerprintのコンパイル (オプション)
ベイズ最適化を使う場合は,構造の記述子を計算するためのプログラムであるcal_fingerpirntをコンパイルする必要がある.
cal_fingerprintの実行ファイルが例えば~/CrySPY_root/x.x.x/CrySPY/f-fingerprint/以下にあるようにする.
コンパイルすれば自動的にそうなるはず.
find_wy (オプション)
CrySPYではこれまで,任意の空間群(対称性)持つ構造を生成するためにfind_wyを利用してきた.しかし,CrySPY 0.9.0からはデフォルトではPyXtalライブラリを採用している. CrySPY 0.9.0 以上で構造生成にPyXtalを使う場合は,find_wyのインストールはスキップできる. 従来通りfind_wyを利用することももちろん可能である. CrySPY 0.8.0 以前のものでは,空間群を考慮した構造生成にはfind_wyのインストールが必要となる.
情報
CrySPY 0.9.0 以上ではfind_wyのインストールはスキップできる.
find_wyのインストール
m_tspace
find_wyをコンパイルするためには,まずはm_tspaceをコンパイルして,ライブラリを生成する必要がある.詳細は以下のm_tspaceのサイトを参照すること.
m_tspace のソースをgitでダウンロードしてくる.ダウンロード先は例えば
m_tspace のコンパイルにはさらに二つのファイルが必要となる.
TSPASE
から下記ファイルを~/local/m_tspaceにダウンロードする:
makefileをコンパイラに合わせて編集して,makeする.
コンパイラにifortを使う場合は,-check allオプションを消さないとうまく動かない.また-O2オプションを設定する.
gfortranを使う場合は,以下のようなエラーに遭遇するかもしれない.
その時はtsp98.fを以下のように書き換える(9925行目):
Before:
After:
コンパイルに成功すればm_tsp.aというライブラリができる.
find_wy
詳細はfind_wyのサイトをチェックすること:
find_wyのソースをgitでクローンしてくる.例えば:
make.incを編集して,先ほど用意したm_tsp.aのパスを設定する.
ここでも-check allを削除して-O2オプションを付けた方が良い.
準備できたらmakeする.
コンパイルできてfind_wyの実行ファイルが得られたら,実行してテストする.
問題なければPOS_WY_SKEL_ALL.jsonなどのファイルが生成される.
find_wyの実行ファイル
CrySPY 1.0.0 or Later
PATHが通ったところにfind_wyの実行ファイルを置く.もしくは下記のようにcryspy.inで実行ファイルのpathを指定する.
CrySPY 0.10.3 or Earlier
CrySPYでfind_wyを構造生成に用いる場合は所定の位置にfind_wyの実行ファイルを置いておく必要がるので,CrySPY本体をダウンロード後にfind_wyの実行ファイルをコピーしておく.CrySPYは任意のディレクトリに設置できるので,例えば~/CrySPY_root/CrySPY-x.x.x/CrySPY/find_wy/find_wy.
CrySPYユーティリティ (オプション)
ローカルPCにPython環境を構築しておくと,計算結果の解析および可視化を行うのに便利である. jupyter notebookやPythonスクリプトなどのユーティリティツールが利用できる. 入力ファイルのexamplesもCrySPYユーティリティに含まれている.
情報
See also cryspy_utility
ユーティリティツールを使うには以下のライブラリ等が必要になる.
ユーティリティツールのダウンロード
Git
ZIP
CrySPY utilityへ飛んで,緑のCodeと書かれたボタンをクリック,Download ZIPを選んでダウンロード.
コマンド
メインコマンド
- cryspy
サブコマンド
- cryspy-Eplot(v1.4.1以降)
- cryspy-calc-convex-hull(v1.4.2以降)
- cryspy-skip(v1.4.2以降)
- cryspy-print(v1.5.0以降)
- cryspy-extract-struc(v1.5.0以降)
コマンドのサブセクション
cryspy-Eplot
最終更新日:2026年10月16日
cryspy-Eplot コマンド
CrySPY version 1.4.1以降では,cryspy-Eplotコマンドがインストールされる.
EA-vcでは,デフォルトで各世代の計算終了時に凸包図が自動的に生成・保存される.出力間隔の変更や自動出力の無効化は,[option]セクションのenergy_output_intervalで指定する(入力ファイル > [option] Sectionを参照).
後から描画パラメータを変更したい場合は,cryspy-Eplotコマンドを用いて再描画できる.
変更できる入力パラメーターは以下のページを参考.
実行方法とオプション
cryspy.inがあるディレクトリで,下記コマンドを実行.
| Option | Description |
|---|---|
-c, --composition-window | cryspy.inで指定された組成範囲を描画した図を保存する.詳細は組成範囲の確認を参照. |
エネルギープロット(RS,EA)
凸包プロット(EA-vc)
通常プロット(2元系,3元系)
世代を指定した再描画
凸包は第3世代,表示する構造は第2世代を指定した例.
組成制限がある場合の描画
組成制限を設定した2元系・3元系の描画例.青色の領域が組成の許容範囲を表す.
組成範囲の確認(-c)
version 1.5.0以降では,組成制限が設定されている場合に,-cオプションを用いて許容される組成範囲をプロットできる.
EA-vcでmin_compまたはmax_compを指定している場合,次のコマンドで,現在のcryspy.inに設定された組成の許容範囲を描画できる.
探索結果のデータを必要としないため,探索を開始する前でも入力した組成制限を確認できる.
通常の2元系・3元系では,図は./data/convex_hull/composition_window_input.<fig_format>に保存される.
fig_formatのデフォルトはsvgであり,[visual]セクションでpngやpdfにも変更できる.
原子種の配置は,同じく[visual]セクションのaxis_orderで指定する.
ファイル名のinputは,世代番号によらず,実行時の入力に基づく図であることを表す.
以下は2元系・3元系の描画例.
この図はmin_compとmax_compから求めた連続的な組成領域を表す.
ll_nat・ul_natによる整数の原子数の制約や,chargeによる電荷中性条件は反映されない.
入力例や図の見方は組成制限を参照.
-cを指定した場合は組成範囲の図を出力して終了する.
探索結果のエネルギーや凸包を再描画する場合は,-cを付けずにcryspy-Eplotを実行する.
軸の配置変更
cryspy.inの[visual]セクションでaxis_orderを変更し,cryspy-Eplotを実行すると,原子種の配置を変更して再描画できる.
設定の詳細はチュートリアル > EA-vc > 解析と可視化および入力ファイル > [visual]セクションを参照.
2元系では,atypeの順にl(左)とr(右)を指定する.
左はaxis_order = lr,右はaxis_order = rlの例.
3元系では,atypeの順にt(上),l(左),r(右)を指定する.
左はaxis_order = tlr,右はaxis_order = ltrの例.
化合物を基準とした凸包(terminals)
cryspy.inの[visual]セクションでterminalsに2つまたは3つの化合物組成を指定すると,それらを基準とした凸包を描画できる.
この処理にはpymatgenのCompoundPhaseDiagramを使用している.
基準となる化合物組成の選び方により,3元系を擬3元系として,4元系を擬3元系として描画することもできる.ここでは,3元系を擬2元系として描画する例を示す.
この設定はcryspy-Eplotによる事後解析用であり,探索中の凸包計算や自然選択には影響しない.
以下は,3元系のLi–Al–Oに電荷中性条件を課し,第30世代まで探索した例.[structure]セクションでは次のように設定している.
この電荷中性条件を満たす組成は,3元系の組成図ではLi2OとAl2O3を結ぶ直線上にある.そのため,これらの化合物組成を基準にすることで,Li2O–Al2O3の擬2元系として凸包を描画できる.電荷中性条件の設定については,機能 > 電荷中性条件を参照.
左は元素を基準とした3元系の凸包,右はLi2OとAl2O3を基準とした擬2元系の凸包.
右の図は,[visual]セクションを以下のように設定してcryspy-Eplotを実行すると得られる.
出力ファイル名には,基準とした化合物組成を表す_terminals_Li2O-Al2O3が付く.この例では,デフォルトのsvg形式で./data/convex_hull/conv_hull_gen_30_terminals_Li2O-Al2O3.svgに保存される.
化合物組成を2つ指定した場合,terminal_axis_orderを省略するとデフォルトのlrが使われ,terminalsの指定順にLi2Oが左,Al2O3が右に配置される.
指定した各化合物組成のデータが,描画に用いる相図データに含まれている必要がある.
パラメータの詳細は入力ファイル > [visual]セクションを参照.
cryspy-calc-convex-hull
最終更新日:2026年10月16日
cryspy-calc-convex-hull コマンド
EA-vcの指定世代までの結果を使って,凸包と各構造のhull distanceを再計算するコマンド.
cryspy-skipで不適切な構造を除外した後や,emin_ea・emax_eaでエネルギーの除外条件を変更した後に使用する.
CrySPYの計算ディレクトリで,世代番号を指定して実行する.
この例では,第1〜10世代の結果を使って,第10世代時点の凸包とhull distanceを再計算する.
pd_data.pklとhdist_data.pklの該当世代のデータ,hull distanceの一覧を更新し,2元系・3元系では凸包の図も出力する.
詳しい手順は機能 > 計算のスキップを参照.
cryspy-skip
最終更新日:2026年10月16日
cryspy-skip コマンド
rslt_data.pklに記録済みの計算結果を取り消し,指定した構造をskip扱いにするコマンド.
正しくない電子状態などにより,異常なエネルギーが記録された場合に使用する.
CrySPYの計算ディレクトリで,構造IDを指定して実行する.複数のIDも指定できる.
この例では,ID 198と157の最適化構造とエネルギーを無効化し,計算結果のOptをskipに更新する.
EA・EA-vcでは,エリートに登録されている場合はそのデータからも取り除く.
EA-vcでは,必要に応じてcryspy-calc-convex-hullで凸包を再計算する.
詳しい手順や,計算途中でスキップする方法は機能 > 計算のスキップを参照.
cryspy-print
最終更新日:2026年10月16日
cryspy-print コマンド
v1.5.0以降では,cryspy-printコマンドでdata/pkl_data/にあるpickleファイルの内容を確認できる.
CrySPY Utilityのprint_pkl.pyに代わるコマンドで,ファイルの種類に応じて内容や要約を表示する.
rslt_data.pklでは,エネルギー順の表示,表示行数の指定,組成による絞り込み,結果ファイルの再出力もできる.
実行方法とオプション
入力ファイルは相対パスまたは絶対パスで指定できる.gzip圧縮したファイルも読み込み可能.
ファイルの種類はファイル名で判別するため,rslt_data.pklなどの名前を変更せずに指定する.
| 引数・オプション | 説明 |
|---|---|
infile | 表示するpickleファイル.gzip圧縮したファイル(例:rslt_data.pkl.gz)も指定可能. |
--no-sort | rslt_data.pklをソートせず,保存されている行順で表示する. |
--head N | 絞り込み・ソート後の先頭N行を表示する.Nは正の整数. |
--tail N | 絞り込み・ソート後の末尾N行を表示する.Nは正の整数. |
--all | 絞り込み・ソート後の全行を表示する. |
-c N [N ...], --composition N [N ...] | EA-vcのrslt_data.pklを,atypeの順に指定した組成比で絞り込む. |
--write | rslt_data.pklから./data/cryspy_rsltと./data/cryspy_rslt_energy_ascを再出力する. |
-h, --help | ヘルプを表示する. |
--no-sort,--head,--tail,--all,--composition,--writeはrslt_data.pkl用のオプション.
--head,--tail,--allは併用できない.--writeは表示用オプションと併用できない.
対応ファイルと表示内容
| ファイル | 表示内容 |
|---|---|
input_data.pkl | セクションごとの入力設定.値がNoneの項目は表示しない. |
init_struc_data.pkl,opt_struc_data.pkl,struc_step_data.pkl,elite_struc.pkl,init_dscrpt_data.pkl,opt_dscrpt_data.pkl | 保存されているデータの件数(Number of structures).構造ID一覧は表示しない. |
rslt_data.pkl | 計算結果の表.デフォルトはエネルギーが低い順. |
hdist_data.pkl | 最新世代と,その世代の構造数.空の場合はNo hull distance data. |
pd_data.pkl | 最新世代と,その世代の安定エントリー数・全エントリー数.空の場合はNo phase diagram data. |
cn_comb_data.pkl | 電荷中性条件の設定と,電荷中性を満たす組み合わせの数.cn_combがNoneの場合はその旨を表示する. |
以下のファイルは内容を整形して表示する.
- 共通:
id_queueing.pkl,id_running.pkl,energy_step_data.pkl,force_step_data.pkl,stress_step_data.pkl,kpt_data.pkl,rng_state_data.pkl - EA:
gen.pkl,ea_info.pkl,ea_origin.pkl,elite_fitness.pkl - EA-vc:
nat_data.pkl - BO:
n_selection.pkl,id_select_hist.pkl,bo_mean.pkl,bo_var.pkl,bo_score.pkl - LAQA:
tot_step_select.pkl,laqa_energy.pkl,laqa_bias.pkl,laqa_score.pkl,laqa_step.pkl,laqa_struc.pkl
対応していないファイル名を指定するとエラーになる.
使用例
構造数・入力設定・fitnessの確認
10件のデータが保存されている場合の表示:
opt_struc_data.pklやelite_struc.pklも同様に構造数を表示する.
個々の構造を確認するには,cryspy-extract-strucの-pオプションを使用する.
input_data.pklは[basic],[structure]などのセクションごとに設定を表示する.
elite_fitness.pklは構造IDとfitnessの辞書を表示する.
計算結果の表示
Ef_eV_atom列がある場合はその値,ない場合はE_eV_atomの昇順で表示する.
100行以下なら全行を表示する.100行を超える場合は件数とソート条件を表示し,先頭100行を表示する.
それぞれ,エネルギーが低い順に並べた表の先頭10行,末尾5行,全行を表示する.
保存されている行順で表示する場合は--no-sortを指定する.表示行数の指定とも併用できる.
EA-vcの結果を組成で絞り込み
atypeの順で組成比が1:2の構造に絞り込み,エネルギーが低い順に先頭10行を表示する.
原子数が(1, 2),(2, 4)など,比が等しい構造が対象となる.
元素数と同じ数の非負整数を指定し,少なくとも1つは正の整数にする.
このオプションには,Num_atom列を持つEA-vcの結果が必要.該当する構造がない場合はその旨を表示する.
具体的な表示結果は,チュートリアル > EA-vc > 結果の確認 > 組成を指定して結果を確認を参照.
gzip圧縮したファイルの確認
展開せずに読み込める.他の対応ファイルも同様にgzip圧縮したまま指定できる.
結果ファイルの再出力
cryspy.inがある実行ディレクトリで,次のように実行する.
以下のファイルを再出力する.既存のファイルは上書きされる.
./data/cryspy_rslt:保存されている行順の結果表../data/cryspy_rslt_energy_asc:Ef_eV_atom(列がなければE_eV_atom)の昇順の結果表.
出力先はコマンドを実行したディレクトリのdata/で,このディレクトリが必要.
実行内容はlog_cryspyにも記録される.
cryspy-extract-struc
最終更新日:2026年10月16日
cryspy-extract-struc コマンド
v1.5.0以降では,cryspy-extract-strucコマンドでinit_struc_data.pklやopt_struc_data.pklから構造を抽出し,cifファイルとして保存できる.
CrySPY Utilityのextract_struc.pyをCrySPYに組み込んだコマンド.ファイル出力せず,構造情報を画面に表示することもできる.
実行方法とオプション
入力ファイルは相対パスまたは絶対パスで指定できる.cifファイルはコマンドを実行したディレクトリに保存される.
-i,-a,-tのいずれか1つを指定する.これらは併用できない.
| 引数・オプション | 説明 |
|---|---|
infile | 構造データのpickleファイル.init_struc_data.pkl,opt_struc_data.pklなど.gzip圧縮したファイルも読み込み可能. |
-i INDEX [INDEX ...], --index INDEX [INDEX ...] | 抽出する構造IDを指定する.複数指定可能. |
-a, --all_id | 入力ファイル内の全構造を抽出する. |
-t TOP, --top TOP | rslt_data.pklのE_eV_atomが低い順に,指定した構造数を抽出する. |
-p, --print | cifを出力せず,構造情報を画面に表示する. |
-r, --rank | -tと併用し,出力ファイル名の先頭に順位を付ける. |
-s, --symmetrized | 対称性情報付きのcifを出力する. |
--tolerance TOLERANCE | -sで対称性を判定する際の許容値.デフォルトは0.01. |
-h, --help | ヘルプを表示する. |
使用例
構造IDを指定して抽出
構造IDが0,1の構造を,カレントディレクトリの0.cif,1.cifに保存する.存在しないIDは警告を出してスキップする.
構造情報を表示
-pを付けると,cifファイルを作成せず,構造IDと構造情報を画面に表示する.
エネルギー上位の構造を抽出
エネルギーが低い順に3構造を抽出する.入力ファイルと同じディレクトリにrslt_data.pklが必要.
出力ファイル名は{ID}.cifとなる.
-rも指定すると,順位を含む{rank}_{ID}.cifとなる.順位は1から始まる.
全構造を抽出
全初期構造を{ID}.cifとして保存する.
対称性情報付きで出力
-sを付けると,空間群などの対称性情報を含むcifを出力する.--toleranceは省略可能.
対称性情報を付ける際に,セルの表現や原子数が変わる場合がある.
gzip圧縮したファイルから抽出
gzip圧縮した構造データは,展開せずに読み込める.-a,-t,-p,-sなども同様に使用できる.
-tを使う場合は,圧縮した入力ファイルと同じディレクトリにrslt_data.pklを置く.
チュートリアル
情報
初心者の方はランダムサーチから始めると良い.Exampleファイルはこちら –> cryspy_utility.
目次
チュートリアルのサブセクション
ランダムサーチ (RS)
情報
ASE は初心者にとって始めやすいツールである. CrySPYのインストール時に,ASEも自動的にインストールされるためである. 高い精度はないが,非常に軽量で高速な原子間ポテンシャルを備えており,ノートPCなどの低スペックな環境でも動作確認に適している.
入力ファイルの準備
下記のどれか一つに従い,その後CrySPY実行のセクションに移ること.
CrySPY実行
ランダムサーチ (RS)のサブセクション
ASE on Your Local PC
最終更新日:2026年10月16日
ASEは様々なコードのインターフェースを提供しているPythonライブラリであり, Pure Python EMT calculatorというシンプルなEMTの計算も実行できる.CrySPYさえインストールしてあれば,精度はともかく簡単に計算できるので,CrySPYのテストにちょうど良い.
このチュートリアルでは,MacやLinuxなどのOSのローカルPCを用いてCu 8原子の構造探索を試す.
Assumption
ここでは次のような条件を想定している:
- CrySPY 1.2.0 or later in your local PC
- CrySPY job filename:
job_cryspy - ase input filename:
ase_in.py
Input Files
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
- Download from CrySPY_utility/examples/ase_Cu8_RS
- Copy from CrySPY utility that you installed
cryspy.in
cryspy.inはCrySPYの入力ファイル.
[basic] セクションのjobcmd = zshは環境に合わせてjobcmd = shやjobcmd = bash等に変更する.
CrySPYは内部でバックグラウンドジョブとしてzsh job_cryspyを実行する.
ASEを使う場合は,[ASE]セクションが必要.
下記の二つのファイル名は好きなように変えても良い.
jobfile:job_cryspyase_python:ase_in.py
他の入力変数については後で説明を行う.
calc_in Directory
ASEのジョブファイルや入力ファイルはこのディレクトリに準備する.
Job File
ジョブファイルの名前はcryspy.inのjobfileに一致させる必要がある.
ジョブファイルの例は下記の通り.
ase_in.pyというファイル名も自由に変えられるが, cryspy.inのase_pythonの値と一致させておく必要がある.
CrySPYではジョブファイルの最後の行はsed -i -e ‘3 s/^.*$/done/’ stat_jobとしておくルールになっている.
バージョン1.4.2からCrySPYがジョブファイルの末尾に自動的に下記を追記するようになった.(参考:機能 > ジョブファイルの自動書き換え)
メモ
1.4.2より古いバージョンでは,ジョブファイルの最後の行はsed -i -e '3s/^sub.*/done/' stat_jobと書いておくルールになっている.自分でsedコマンド文を書いたジョブファイルを1.4.2以上のバージョンで使用しても2回実行されるだけなので問題はない.
上記sedコマンドの意味は,stat_jobというファイルの3行目のsubから始まる部分をdoneに変える処理.
ヒント
(詳細:機能 > ジョブファイルの自動書き換え)
CrySPYのジョブファイルのCrySPY_IDという文字列は自動的に構造IDに置き換わるようになっている.
PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_IDと書いておくとどの構造のジョブなのかが分かり便利である.
例えば,PBSでは#PBS -N Si_CrySPY_IDのように書いておくと,ジョブをサブミットする際,#PBS -N Si_10のように置き換わる.
注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_のように何か文字列を頭につけておくこと.
Input for ASE
ステージ数(nstage in cryspy.in)に応じた数のインプットファイルが必要となる.
インプットファイル名の先頭にx_,または語尾に_xをつけて準備する.
ここでxはステージ数.
CrySPYが探すインプットファイル名の優先順位は以下の通り.
x_ase_in.pyase_in.py_xase_in.py
各ステージで共通のインプットを使用するのであればx_や_xを省略できる.
このASEのチュートリアルではnstage = 1を用いるので,ASEのインプットファイルはase_in.pyの一つだけでよい.x_や_xを省略したファイルを準備している.
ase_in.pyは例えば下記の通り(ASEの使い方の詳細は公式のドキュメントを見ること).
ASEはVASPやQEなどと違って,入力ファイル(python script)は自分で書くことになるので自由度がある. CrySPYでは3つのルールを設けている.
- エネルギーはeV/cellの単位で
log.toteというファイルに出力する.CrySPYはこのファイルの最後の行を読む. - 最適化後の構造データは
CONTCARというファイルにVASPフォーマットで出力する. - 最適化の収束判定結果を
out_check_optというファイルにdoneかnot_yetで書き込む.CrySPYはこのファイルの最後の行を読む.
CrySPY実行
ここまで準備ができたらCrySPY実行へ進む.
soiap on Your Local PC
情報
ここに書いてある内容は少し古いので,最近のチュートリアルはチュートリアル > ランダムサーチ(RS) > ASE on your local PCを見ること.このページの内容も動作には問題ないはず.
最終更新日:2026年10月16日
soiapは原子間ポテンシャルを使用した計算ができるソフトウェアであり,計算が軽いのでCrySPYのテストにちょうど良い. soiapのインストールや詳細はinstructionsを参照.
このチュートリアルでは,MacやLinuxのローカルPC上でCrySPYを試す. テストシステムはSi 8原子.
Assumption
ここでは次のような条件を想定している:
- (only version 0.10.3 or earlier) CrySPY main script:
~/CrySPY_root/CrySPY-0.9.0/cryspy.py - CrySPY job filename:
job_cryspy - soiap executable file:
~/local/soiap-0.3.0/src/soiap - soiap input filename:
soiap.in - soiap output filename:
soiap.out - soiap input structure filename:
initial.cif
Input Files
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
- Download from Cryspy_utility/examples/soiap_Si8_RS
- Copy from CrySPY utility that you installed
- (only version 0.10.3 or earlier)
cp -r ~/CrySPY_root/CrySPY-0.9.0/example/v0.9.0/soiap_RS_Si8 .
cryspy.in
cryspy.inがCrySPYの入力ファイル.
[basic] セクションのjobcmd = zshは環境に合わせてjobcmd = shやjobcmd = bash等に変更する. CrySPYは内部でバックグラウンドジョブとしてzsh job_cryspyを実行する.
soiapを使う場合は[soiap]セクションが必要となる.下記のファイル名は好きなように変えても良い.
jobfilesoiap_infilesoiap_outfilesoiap_cif
他の入力変数については後で説明を行う.
calc_in Directory
soiapのジョブファイルや入力ファイルはこのディレクトリに準備する.
Job File
ジョブファイルの名前はcryspy.inのjobfileに一致させる必要がある.
ジョブファイルの例は下記の通り.
/path/to/soiapはsoiapの実行ファイルのpathに変えること.
入力ファイル(soiap.in)と出力ファイル(soiap.out)はcryspy.inで指定したsoiap_infileとsoiap_outfileに合わせること.
最後の行以外は普段使っているようなジョブスクリプトで良いが,
CrySPYではジョブファイルの最後の行はsed -i -e '3 s/^.*$/done/' stat_jobとしておくルールになっている.
メモ
ジョブファイルの最後の行はsed -i -e '3 s/^.*$/done/' stat_jobと書いておく.
ヒント
CrySPYのジョブファイルのCrySPY_IDという文字列は自動的に構造IDに置き換わるようになっている.
PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_IDと書いておくとどの構造のジョブなのかが分かり便利である.
例えば,PBSでは#PBS -N Si_CrySPY_IDのように書いておくと,ジョブをサブミットする際,#PBS -N Si_10のように置き換わる.
注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_のように何か文字列を頭につけておくこと.
Input for soiap
ステージ数(nstage in cryspy.in)に応じた数のインプットファイルが必要となる.
インプットファイル名の語尾に_xをつけて準備する.
ここでxはステージ数.
soiapのチュートリアルではnstage = 1を用いるので,インプットファイルはsoiap.in_1の一つだけが必要.
soiap.in_1は例えば下記の通り.
1行目に書く初期構造ファイル(initial.cif)はcryspy.inのsoiap_cifの値と揃える.
CrySPY実行
ここまで準備ができたらCrySPY実行へ進む.
VASP
最終更新日:2026年10月16日
このチュートリアルでは,PBSなどのジョブスケジューラーを備えたPCクラスターを想定してCrySPYを試す.第一原理計算のVASPを用いて,Na8Cl8(16原子)の構造探索を行う.
Assumption
ここでは次のような条件を想定している:
- CrySPY 1.2.0 or later in your PC cluster
- CrySPY job command:
qsub - CrySPY job filename:
job_cryspy - executable file, vasp_std in your PC cluster
Input Files
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
- Download from Cryspy_utility/examples/vasp_Na8Cl8_RS
- Copy from CrySPY utility that you installed
cryspy.in
cryspy.inはCrySPYの入力ファイル.
[basic] セクションのjobcmd = qsubは環境に合わせて変更する.
CrySPYは内部でバックグラウンドジョブとしてqsub job_cryspyを実行する.
下記のファイル名は好きなように変えても良い.
jobfile
構造最適化計算はステージ制を採用しており,ここではnstage = 2を用いている.
例えば,最初のステージでは,セルを固定し内部座標だけ緩和する設定で,k点も少ない計算を実行し,2ステージ目でセルも含めてフルに構造緩和して,精度も高めるようなことが可能となっている.
VASPを使う場合は,[VASP]セクションが必要.
ここでは各ステージにおけるk点のグリッド密度(Å^-3)をkppvolに指定する必要がある.
情報
kppvolの詳細はこちら –> Input file > Kpoint
他のインプット変数に関しては後ほど説明する.
calc_in Directory
ジョブファイルやVASPのインプットをこのディレクトリに置く.
Job File
ジョブファイルの名前はcryspy.inのjobfileに一致させる必要がある.
ジョブファイルの例は下記の通り.
VASPROOTは環境に合わせて変更する.普段VASPのジョブを流しているジョブファイルを使えば良い.
CrySPYではジョブファイルの最後の行はsed -i -e ‘3 s/^.*$/done/’ stat_jobとしておくルールになっている.
バージョン1.4.2からCrySPYがジョブファイルの末尾に自動的に下記を追記するようになった.(参考:機能 > ジョブファイルの自動書き換え)
メモ
1.4.2より古いバージョンでは,ジョブファイルの最後の行はsed -i -e '3s/^sub.*/done/' stat_jobと書いておくルールになっている.自分でsedコマンド文を書いたジョブファイルを1.4.2以上のバージョンで使用しても2回実行されるだけなので問題はない.
上記sedコマンドの意味は,stat_jobというファイルの3行目のsubから始まる部分をdoneに変える処理.
ヒント
(詳細:機能 > ジョブファイルの自動書き換え)
CrySPYのジョブファイルのCrySPY_IDという文字列は自動的に構造IDに置き換わるようになっている.
PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_IDと書いておくとどの構造のジョブなのかが分かり便利である.
例えば,PBSでは#PBS -N Si_CrySPY_IDのように書いておくと,ジョブをサブミットする際,#PBS -N Si_10のように置き換わる.
注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_のように何か文字列を頭につけておくこと.
Input for VASP
ステージ数(nstage in cryspy.in)に応じた数のインプットファイルが必要となる.
インプットファイル名の先頭にx_,または語尾に_xをつけて準備する.
ここでxはステージ数.
CrySPYが探すインプットファイル名の優先順位は以下の通り.
x_INCARINCAR_xINCAR
各ステージで共通のインプットを使用するのであればx_や_xを省略できる.
今はnstage = 2を用いているので,1_INCAR_1と2_INCARが必要となる.
ここでは,1_INCARはセルを固定して内部座標だけ緩和する設定,2_INCARはセルも含めてフルに緩和する設定になっている.
1_INCAR
2_INCAR
CrySPYはPOSCARとKPOINTSファイルを自動生成する.
POTCARファイルはユーザーが準備する必要がある.
このexampleに含まれているPOTCARは空のファイルなので,各自で準備すること.
警告
exampleに含まれているPOTCARは空のファイル.配布できない.
CrySPY実行
ここまで準備ができたらCrySPY実行に進む.
QE
最終更新日:2026年10月16日
このチュートリアルでは,PBSなどのジョブスケジューラーを備えたPCクラスターを想定してCrySPYを試す.第一原理計算のQUANTUM ESPRESSOを用いて,Si 8原子の構造探索を行う.
Assumption
ここでは次のような条件を想定している:
- CrySPY job command:
qsub - CrySPY job filename:
job_cryspy - QE executable file:
/usr/local/qe-6.5/bin/pw.x - QE input filename:
pwscf.in - QE output filename:
pwscf.out
Input Files
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピーしてきても良い.
- Download from CrySPY_utility/examples/qe_Si8_RS
- Copy from CrySPY utility that you installed
cryspy.in
cryspy.inはCrySPYの入力ファイル.
[basic] セクションのjobcmd = qsubは環境に合わせて変更する.
CrySPYは内部でバックグラウンドジョブとしてqsub job_cryspyを実行する.
構造最適化計算はステージ制を採用しており,ここではnstage = 2を用いている.
例えば,最初のステージでは,セルを固定し内部座標だけ緩和する設定で,k点も少ない計算を実行し,2ステージ目でセルも含めてフルに構造緩和して,精度も高めるようなことが可能となっている.
QEを使う場合は,[QE]セクションが必要.
ここでは各ステージにおけるk点のグリッド密度(Å^-3)をkppvolに指定する必要がある.
情報
kppvolの詳細はこちら –> Input file > Kpoint
下記のファイル名は好きなように変えても良い.
jobfileqe_infileqe_outfile
他のインプット変数に関しては後ほど説明する.
calc_in Directory
ジョブファイルやQEのインプットをこのディレクトリに置く.
Job File
ジョブファイルの名前はcryspy.inのjobfileに一致させる必要がある.
ジョブファイルの例は下記の通り.
/path/to/pw.xは環境に合わせて変更する.
入力(pwscf.in)出力(pwscf.out)ファイルの名前は好きに変えて良いが,cryspy.inのqe_infileとqe_outfileに合わせる必要がある.
普段QEのジョブを流しているジョブファイルを使えば良い.
CrySPYではジョブファイルの最後の行はsed -i -e ‘3 s/^.*$/done/’ stat_jobとしておくルールになっている.
バージョン1.4.2からCrySPYがジョブファイルの末尾に自動的に下記を追記するようになった.(参考:機能 > ジョブファイルの自動書き換え)
メモ
1.4.2より古いバージョンでは,ジョブファイルの最後の行はsed -i -e '3s/^sub.*/done/' stat_jobと書いておくルールになっている.自分でsedコマンド文を書いたジョブファイルを1.4.2以上のバージョンで使用しても2回実行されるだけなので問題はない.
上記sedコマンドの意味は,stat_jobというファイルの3行目のsubから始まる部分をdoneに変える処理.
ヒント
(詳細:機能 > ジョブファイルの自動書き換え)
CrySPYのジョブファイルのCrySPY_IDという文字列は自動的に構造IDに置き換わるようになっている.
PBSやSLURMといったジョブスケジューラーを使う場合,ジョブ名にCrySPY_IDと書いておくとどの構造のジョブなのかが分かり便利である.
例えば,PBSでは#PBS -N Si_CrySPY_IDのように書いておくと,ジョブをサブミットする際,#PBS -N Si_10のように置き換わる.
注意点として,ジョブ名を数字から始めるとエラーとなることが多いので,Si_のように何か文字列を頭につけておくこと.
Input for QE
ステージ数(nstage in cryspy.in)に応じた数のインプットファイルが必要となる.
インプットファイル名の先頭にx_,または語尾に_xをつけて準備する.
ここでxはステージ数.
CrySPYが探すインプットファイル名の優先順位は以下の通り.
x_pwscf.inpwscf.in_xpwscf.in
各ステージで共通のインプットを使用するのであればx_や_xを省略できる.
今はnstage = 2を用いているので,1_pwscf.inと2_pwscf.inが必要となる.
ここでは,1_pwscf.inはセルを固定して内部座標だけ緩和する設定,2_pwscf.inはセルも含めてフルに緩和する設定になっている.
1_pwscf.in
2_pwscf.in
pseudo_dirは各自の環境に合わせて変更する.
Inputs for structure data and k-point such as インプットファイルのATOMIC_POSITIONSとK_POINTSはCrySPYがpymatgenを用いて自動生成するのでユーザーが書く必要はない.
CrySPY実行
ここまで準備ができたらCrySPY実行に進む.
OpenMX
Coming soon.
LAMMPS
Coming soon.
Check cryspy.in
最終更新日:2026年10月16日
詳細は 入力ファイルのページも見ること.
cryspy.inをもう一度チェックしてみよう.ここでの例は選んだcalc_codeに応じて,準備したものと少し異なるかもしれない.
[basic] Section
algo: アルゴリズム.ランダムサーチの場合はRSを使う.calc_code: 構造最適化のコード.VASP,QE,OMX,soiap,LAMMPS,ASEから選択.tot_struc: 構造数.この場合初回実行で5構造ランダムに生成される.nstage: ステージ数njob: 同時にサブミットするジョブの数.この例では2つのスロットを設定,言い換えると,2構造ずつ最適化を行う.jobcmd: ジョブを実行または投入するコマンド.bash,zsh,qsubなどjobfile: ジョブファイルのファイル名
[structure] Section
atype: Atom type. Na8Cl8の例:atype = Na Cl.nat: atypeに応じた原子数. Na8Cl8の例:nat = 8 8
Script to Run
メモ
For version 1.0.0 or later, skip this page. The executable script is automatically installed.
Assumption
Here, we assume the following condition:
- CrySPY main script:
~/CrySPY_root/CrySPY-0.9.0/cryspy.py
Make Script
Let’s make a convenient shell script to avoid typing long commands over and over again.
Here, we create the script, cryspy (any file name will do).
-u option (unbuffered option) can be omitted.
You can put this script in your $PATH, or just use like bash ./cryspy.
First Run
2025 March 6, updated
Make sure you have the following in your working directory.
- calc_in/
- (cryspy)
- cryspy.in
Then, run CyrSPY!
If you use old version (0.10.3 or earlier):
At the first run, CrySPY goes into structure generation mode. CrySPY stops after 5 structure generation.
If it worked properly, the following output appears on the screen:
Several output files are also generated.
- (
cryspy.out): Short log. only version 0.10.3 or earlier. cryspy.stat: Status file.data/init_POSCARS: Initial struture file in POSCAR format. You can open this file using VESTAdata/pkl_data: Directory to save pickled data.log_cryspy: log.err_cryspy: error and warning.
Let’s take a look at cryspy.stat file.
Structure ID 0 – 4 are queueing because we just generated structures, and have not submitted yet.
ヒント
Check the initial structures, if the distance between atoms is too close, you should set the mindist in cryspy.in.
Submit Job
2024年4月21日更新,日本語化
計算再開
CrySPYはcryspy.statファイルがあれば自動的に計算を再開する.
ヒント
crypy.statがあれば続きから再開.
はじめから計算をしたければcryspy.statを削除する.
ジョブの投入
cryspyをもう一度実行する.
画面かlog_cryspyファイルに下記のように出力される.
cryspy.statでステータスが確認できる.
cryspy.inでnjob = 2に設定されているので,CrySPYは構造ID 0と1の二つのジョブをサブミットした.
計算はworkディレクトリの中で行われる.各構造IDのディレクトリが作られる.
二つのジョブが終了したら,もう一度cryspyを実行する.
もしnstage = 2のようにnstageを2以上に設定していれば,ID 0と1のstage 2のジョブがサブミットされる.
今回はnstage = 1なので,ID 0と1の計算データを収集して,次のIDのジョブをサブミットする.
計算が終わった構造のディレクトリはfinディレクトリに移動される.
5構造全ての計算が終わるまでcryspyを繰り返し実行する.
すべての計算が終わって,計算結果の詳細が必要なければworkディレクトリを削除しても良い.
何度も何度もcryspyを繰り返し実行する時は,自動スクリプト(repeat_cryspy)が役に立つ.
Check Results
最終更新日:2026年10月16日
Move to data directory. There should be a few more files.
cryspy_rslt: Result file.cryspy_rslt_energy_asc: Result file sorted in energy ascending order.init_POSCARS: Initial struture file in POSCAR format.opt_POSCARS: Optimized structure file in POSCAR format.pkl_data/: Directory to save pickled data.
The results are written to text files, cryspy_rslt and cryspy_rslt_energy_asc (and also saved in pickle data in pkl_data directory).
v1.5.0以降は,[option]セクションのrslt_outでcryspy_rsltとcryspy_rslt_energy_ascの出力タイミングを変更できる.デフォルトはalways.詳細は入力ファイル > [option] Sectionを参照.
Each result appends to cryspy_rslt file in the order in which one finished earlier.
情報
Not ID order in cryspy_rslt
In cryspy_rslt_energy_asc file, the results are sorted in energy ascending order.
Spg_num and Spg_sym show space group information on initial structures.
Spg_num_opt and Spg_sym_opt are those of optimized structures.
The last column Opt indicates whether or not optimization reached required accuracy.
Append Structures
最終更新日:2026年10月16日
Of course only 5 structures are not enough to find stable structures. You can append structures whenever you want. Here let’s append more 5 structures.
For Si-Si mindist, the default value of 1.11 Å is used in the first structure generation (see log_cryspy), which is a little too close.
Let us try to set the mindist to 2.0 Å.
情報
For mindist, see also Features > Restriction on interatomic distances.
Edit cryspy.in and change the value of tot_struc into 10, and add mindist_1 = 2.0
Then run cryspy, and check log_cryspy file.
Remember that CrySPY goes into structure generation mode whenever you change the value of tot_struc.
In this mode, CrySPY does not do any other action such as collecting data, submitting jobs, and so on.
メモ
Structure generation mode whenever you change the value of tot_struc.
From version 1.0.0, CrySPY automatically backs up when adding structures.
See features/backup.
Repeat cryspy & several times until all appended structures are done.
The auto script may help you.
解析と可視化
Last updated: February 9, 2026
エネルギープロット
バージョン1.4.4からは,下記のように cryspy-Eplot を実行することで簡単に結果が出力できるようになった.
ファイルは./data/energy_plot/energy_RS_{tot_struc}.{fig_fotmat}に出力される.
cryspy.inの[visual]セクションで,下記入力変数を指定することもできる.
CrySPY > 入力ファイル > [visual] sectionも参考のこと.
より詳細なデータ解析や,図の編集がしたければ,次に書いてあるようにファイルをダウンロードしてJupyter notebookを使うと良い.
データのダウンロード
ここでは,CrySPYのデータをローカルPCで解析・可視化することを前提としている.
CrySPYをスーパーコンピュータやワークステーションで使用している場合は,データをローカルPCにダウンロードすること.
work や backup ディレクトリは,ファイルサイズが非常に大きくなる可能性があるため,不要であれば削除してよい.
Jupyter Notebook
先ほどダウンロードした結果の中にある data/ ディレクトリに移動する.
その後,CrySPY utilityがローカルにダウンロード してある場合は cryspy_analyzer_RS.ipynb をコピーする.
またはGitHubから直接ダウンロードしてくる(CrySPY_utility/notebook/).
Jupyter を起動し(VScode,Jupyter Lab,Jupyter Notebook など),
セルを順番に実行するだけで,以下のような図を得ることができる.
進化的アルゴリズム(EA)
情報
- CrySPYの基本的な使い方に関しては,はじめにチュートリアル > ランダムサーチ(RS)を見ること.
- アルゴリズム詳細については,探索アルゴリズム > 進化的アルゴリズム(EA)を参照すること.
入力ファイルの準備
下記のどれか一つに従い,その後CrySPY実行のセクションに移ること.
CrySPY実行
進化的アルゴリズム(EA)のサブセクション
ASE on Your Local PC
最終更新日:2026年10月16日
ここで利用しているファイルはCrySPY_utility/examples/ase_Cu8Au8_EAからダウンロードできる. このチュートリアルでは,計算が軽いASEのPure Python EMT calculatorを用いてローカルPCで動作確認を行う.対象となるシステムはCu8Au8.
cryspy.in
cryspy.inの例.
algo = EAを使用.- v1.5.0以降は,[option]セクションの
energy_output_intervalでエネルギープロットの出力間隔(世代数)を指定できる.デフォルトは1(毎世代),0で自動出力を無効化. - v1.5.0以降は,[option]セクションの
backup_intervalで自動バックアップの間隔(世代数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップを参照. - bash環境では
jobcmdをbashに変更. - EAでは
tot_strucは使用しない.構造数はn_popで決まる. n_pop=n_crsov+n_perm+n_strain+n_rand- [EA]セクションのパラメータについては,入力ファイル > [EA] sectionおよび探索アルゴリズム > 進化的アルゴリズム(EA)を見ること.
calc_in/
calc_in/以下はチュートリアル > ランダムサーチ(RS) > ASE in your local PCと同様
calc_in/ase_in.py
calc_in/job_cryspy
次世代の生成
最終更新日:2026年10月16日
初回実行
cryspyを実行すると,構造生成モードになり,第一世代のランダム構造が生成されて,一旦プログラムは終了する.
出力
cryspy.statを見ると,EAでは現在の世代の情報が追加されている.
構造最適化
何度かcryspyを実行して,第一世代の構造最適化を終わらせると,下記のように出力される.
次世代生成
準備ができた状態でもう一度cryspyを実行すると,次世代構造の生成が始まる.
デフォルト(backup_interval = 1)では,次世代構造を生成する直前に自動バックアップが実行される.
v1.5.0以降は,[option]セクションのbackup_intervalで間隔(世代数)を変更でき,0で自動バックアップを無効にする.詳細は機能 > バックアップを参照.
あとはcryspyの実行を繰り返せば,探索が進む.
結果の確認
最終更新日:2026年10月16日
cryspy_rslt
以下は第3世代まで計算を終えたcryspy_rsltの例である.EAでは世代の情報(Gen)も追加される.
v1.5.0以降は,[option]セクションのrslt_outでcryspy_rsltとcryspy_rslt_energy_ascの出力タイミングを変更できる.デフォルトはalways.詳細は入力ファイル > [option] Sectionを参照.
ea_info
各世代ごとに用いたEAのパラメーターがea_infoに出力される.
ea_origin
構造生成手法や親個体の情報が,ea_originに出力される.
解析と可視化
最終更新日:2026年10月16日
自動エネルギープロット
バージョン1.4.4からは,デフォルトで各世代の計算終了時に自動的にエネルギープロットが行われ, ファイルは下記に保存される.
./data/energy_plot/energy_EA_gen_{gen}.{fig_fotmat}.
バージョン1.5.0以降は,[option]セクションのenergy_output_intervalで出力間隔(世代数)を変更できる.デフォルトは1(毎世代)で,0なら自動出力を無効にする.詳細は入力ファイル > [option] Sectionを参照.
cryspy.inの[visual]セクションで以下の入力変数が指定可能となっている.
入力変数の詳細はこちら CrySPY > Input file > [visual] section.
cryspy-Eplotを用いた再プロット
もしプロットされた図を調整して再プロットしたい場合は,cryspy-Eplotコマンドを使えば簡単に実行できる.
cryspy-Eplotコマンドを用いる場合は,専用の以下の入力変数も利用可能となっている.
plot_min_genplot_max_genref_gen
例えば,2世代目における図を再プロットするには,[visual]セクションを下記のように書く.
cryspy-Eplotを実行すると
この場合,CrysPYは ./data/energy_plot/energy_EA_gen_{gen}.{fig_fotmat}にファイルを上書き保存する.
plot_min_genとplot_max_genを用いることで,プロットする世代の範囲を指定することも可能である.
plot_min_genに値が設定された場合,たとえそれが1であっても普段と異なる次のファイルに図が保存される.
./data/energy_plot/energy_EA_gen_{plot_min_gen}-{plot_max_gen}.{fig_fotmat}.
例えば,第2世代時点での結果から,2世代目だけの結果を抜き出すには下記のように行う.
どの時点での世代の結果を用いるか(x軸の最大値に関係)は,ref_genで指定できる.
例えば,ページ最上部の図にあるように,第3世代までの結果から,第2世代目の結果だけ抜き出すには,以下のように設定する.
ref_genが指定されている場合は,ファイル名は以下のようになる.
energy_EA_gen_{plot_min_gen}-{plot_max_gen}_ref_{ref_gen}.{fig_format}.
より詳細なデータ解析や,図の編集がしたければ,次に書いてあるようにファイルをダウンロードしてJupyter notebookを使うと良い.
データのダウンロード
ここでは,CrySPYのデータをローカルPCで解析・可視化することを前提としている.
CrySPYをスーパーコンピュータやワークステーションで使用している場合は,データをローカルPCにダウンロードすること.
work や backup ディレクトリは,ファイルサイズが非常に大きくなる可能性があるため,不要であれば削除してよい.
Jupyter Notebook
先ほどダウンロードした結果の中にある data/ ディレクトリに移動する.
その後,CrySPY utilityがローカルにダウンロード してある場合は cryspy_analyzer_EA.ipynb をコピーする.
またはGitHubから直接ダウンロードしてくる(CrySPY_utility/notebook/).
Jupyter を起動し(VScode,Jupyter Lab,Jupyter Notebook など),
セルを順番に実行するだけで,以下のような図を得ることができる.
組成可変型進化的アルゴリズム(EA-vc)
情報
- CrySPYの基本的な使い方に関しては,はじめにCrySPY > チュートリアル > ランダムサーチ(RS)を見ること.
- 進化的アルゴリズムの基本については,CrySPY > チュートリアル > 進化的アルゴリズム(RS)を見ること.
- アルゴリズム詳細については,CrySPY > 探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-vc)を参照すること.
情報
動作環境
- CrySPY 1.4.0以上
- インターフェースとの互換性はCrySPY > Interfaceを見ること
入力ファイルの準備
下記のどれか一つに従い,その後CrySPY実行のセクションに移ること.
電荷中性条件を課す場合は,cryspy.inの[structure]セクションでchargeを指定する.詳細は機能 > 電荷中性条件を参照.
探索する組成範囲を制限する場合は,cryspy.inの[structure]セクションでmin_compとmax_compを指定する(バージョン1.5.0以降).電荷中性条件との併用も可能.詳細は機能 > 組成制限を参照.
CrySPY実行
組成可変型進化的アルゴリズム(EA-vc)のサブセクション
ASE on Your Local PC (Cu-Ag-Au)
最終更新日:2026年10月16日
ここで利用しているファイルはCrySPY_utility/examples/ase_Cu-Ag-Au_EA-vcからダウンロードできる. このチュートリアルでは,計算が軽いASEのPure Python EMT calculatorを用いてローカルPCで動作確認を行う.対象となるシステムは3元系のCu-Ag-Au.
cryspy.in
cryspy.inの例.
algo = EA-vcを使用.- v1.5.0以降は,[option]セクションの
energy_output_intervalで凸包の図と凸包からの距離のファイルの出力間隔(世代数)を指定できる.デフォルトは1(毎世代),0で自動出力を無効化. - v1.5.0以降は,[option]セクションの
backup_intervalで自動バックアップの間隔(世代数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップを参照. - bash環境では
jobcmdをbashに変更. - [structure]セクションでは,
ll_natで各元素の原子数の最小値,ul_natで最大値を指定. n_pop=n_crsov+n_perm+n_strain+n_rand+n_add+n_elim+n_subsref_energies(ver. 1.4.3以下ではend_point)にはCu, Ag, Auにおける各単体の1原子当たりのエネルギー(eV/atom)を入力.ASEのPure Python EMT calculatorは単体のエネルギーが0になるので今回は0.0.(CHGNetを使う場合の例はASE-CHGNet(Cu-Au))- [EA]セクションのパラメータについては,CrySPY > 入力ファイル > [EA] sectionおよびCrySPY > 探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-vc)を見ること.
- 自動的にプロットされる凸包グラフのパラメータはチュートリアル > 組成可変型進化的アルゴリズム(EA-VC) > 解析と可視化も参考にすること.
calc_in/
calc_in/以下はチュートリアル > ランダムサーチ(RS) > ASE in your local PCと同様
calc_in/ase_in.py
calc_in/job_cryspy
MLIP(Cu-Au)
最終更新日:2026年10月16日
情報
- ASEのCalculatorとして利用可能な機械学習原子間ポテンシャル(MLIP)のインストールが必要
- ここでは例として,CHGNetを用いる
ここで利用しているファイルはCrySPY_utility/examples/chgnet_Cu-Au_EA-vcからダウンロードできる. このチュートリアルでは,機械学習原子間ポテンシャル(MLIP)のCHGNetを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している. Calculatorの部分を変更すれば,様々なMLIPを用いることができる. 手持ちのPCでも十分動作するので,そうしたい場合は入力を適宜変更すること. 対象となるシステムは2元系のCu-Au.
事前計算
EA-vcではcryspy.inでref_energies(ver. 1.4.3以下ではend_point)として,各元素単体の1原子当たりのエネルギーを基準として用いるため,事前に計算する必要がある.
exampleファイルの中に二つのディレクトリがあるはず.
結晶構造データ(POSCAR)とその構造最適化を行いエネルギーを求めるpythonスクリプト(chgnet_in.py)およびジョブスクリプト(job_cryspy)があるので適宜使用する計算機の環境に合わせて編集すること.
ジョブを実行する(ジョブサブミットのコマンドは適宜読み替えること).
計算が無事に終わったら,それぞれのディレクトリにref_energiesというファイルができており,ここに構造最適化後の1原子あたりのエネルギー(eV/atom)が出力されている.
これらをcryspy.inでの入力に用いる.
cryspy.in
cryspy.inの例.
algo = EA-vcを使用.- v1.5.0以降は,[option]セクションの
energy_output_intervalで凸包の図と凸包からの距離のファイルの出力間隔(世代数)を指定できる.デフォルトは1(毎世代),0で自動出力を無効化. - v1.5.0以降は,[option]セクションの
backup_intervalで自動バックアップの間隔(世代数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップを参照. - MLIPではASEのCalculatorを用いるので,
calc_code = ASEを使う. jobcmdは計算機環境に合わせて変更すること.- [structure]セクションでは,
ll_natで各元素の原子数の最小値,ul_natで最大値を指定. n_pop=n_crsov+n_perm+n_strain+n_rand+n_add+n_elim+n_subsref_energies(ver. 1.4.3以下ではend_point)には事前計算しておいたCu, Auにおける各単体の1原子当たりのエネルギー(eV/atom)を入力.atypeの順番.- [EA]セクションのパラメータについては,入力ファイル > [EA] sectionおよび探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-vc)を見ること.
- 自動的にプロットされる凸包グラフのパラメータはチュートリアル > 組成可変型進化的アルゴリズム(EA-VC) > 解析と可視化も参考にすること.
calc_in/
calc_in/以下はチュートリアル > ランダムサーチ(RS) > ASE in your local PCと同様であるが,少しだけCHGNet用に変更している. ジョブスクリプトのpython本体のpathも計算機環境に合わせること.
calc_in/chgnet_in.py
calc_in/job_cryspy
VASP(Fe-Al)
最終更新日:2026年10月16日
バージョン1.4.2でEA-vcはVASPに対応.
ここで利用しているファイルはCrySPY_utility/examples/vasp_Fe-Al_EA-vcからダウンロードできる. このチュートリアルでは,VASPを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している. 対象となるシステムは2元系のFe-Alで,強磁性を仮定した計算を行う.
事前計算
EA-vcではcryspy.inでref_energies(ver. 1.4.3以下ではend_point)として,各元素単体の1原子当たりのエネルギーを基準として用いるため,事前に計算する必要がある.
exampleファイルの中に二つのディレクトリがあるはず.
結晶構造データ(POSCAR)とその構造最適化を行いエネルギーを求めるインプットファイル(INCAR)およびジョブスクリプト(job_cryspy)があるので適宜使用する計算機の環境に合わせて編集すること.
また,POTCARファイルは配布できないので各自で準備すること.
INCARファイルでは,最終的に使用するカットオフなどの値を単体の計算でも利用しなければならないので注意すること.
ジョブを実行する(ジョブサブミットのコマンドは適宜読み替えること).
計算が終わったら1原子あたりのエネルギーを計算しておく. 今回はBCCやFCCなので,ユニットセルは1原子で構成されており,全エネルギーの値をそのまま使えばよい. 通常はユニットセルの原子数でセルあたりのエネルギーを割って計算する.
cryspy.in
cryspy.inの例.
algo = EA-vcを使用.- v1.5.0以降は,[option]セクションの
energy_output_intervalで凸包の図と凸包からの距離のファイルの出力間隔(世代数)を指定できる.デフォルトは1(毎世代),0で自動出力を無効化. - v1.5.0以降は,[option]セクションの
backup_intervalで自動バックアップの間隔(世代数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップを参照. jobcmdは計算機環境に合わせて変更すること.- [structure]セクションでは,
ll_natで各元素の原子数の最小値,ul_natで最大値を指定. n_pop=n_crsov+n_perm+n_strain+n_rand+n_add+n_elim+n_subsref_energies(ver. 1.4.3以下ではend_point)には事前計算しておいた,FeおよびAlにおける各単体の1原子当たりのエネルギー(eV/atom)を入力.atypeの順番.- [EA]セクションのパラメータについては,入力ファイル > [EA] sectionおよび探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-vc)を見ること.
- 自動的にプロットされる凸包グラフのパラメータはチュートリアル > 組成可変型進化的アルゴリズム(EA-VC) > 解析と可視化も参考にすること.
For VASP
[VASP]セクションのvasp_MAGMOMにはatypeに対応する元素のMAGMOMの値を入れる.
CrySPYは./work/xxx/INCAR(xxxは構造ID)にINCARをコピーする際に,n*vasp_MAGMOM(nは原子数)を追記する.
例えば, atype = (‘Fe’, ‘Al’),nat = (5, 3),vasp_MAGMOM = (4.0 0.0)の場合,下記のように追記する.
このチュートリアルでは使用していないが,他にもINCARのLDAUL,LDAUUおよびLDAUJに対応している.cryspy.inではvasp_をつけて下記のように使う.
nat = (5, 0)のように2元系から単体に次元が落ちる場合,CrySPYは./work/xxx/INCARに下記のように追記する.
原子数がゼロの元素に関しては何もしない.
calc_in/
POTCAR
EA-vcでは各元素に対応するPOTCARファイルをそれぞれ準備する. ファイル名は
POTCAR_FePOTCAR_Al
のように末尾にatypeに書いた元素名をつける.
CrySPYは計算する構造の原子数に合わせて,./work/xxx/POTCARを準備する.
つまり,nat = (5, 0)のようにFeだけから構成される構造の場合はPOTCAR_Fe,
nat = (4, 4)のようにFe-Al系の場合はPOTCAR_FeとPOTCAR_Alを繋げてPOTCARにする.
job_cryspy
INCAR
1_INCAR
2_INCAR
QE(Fe-Al)
最終更新日:2026年10月16日
バージョン1.4.2でEA-vcはQEに対応.
ここで利用しているファイルはCrySPY_utility/examples/qe_Fe-Al_EA-vcからダウンロードできる. このチュートリアルでは,QEを用いてジョブスケジューラーを備えた計算機クラスタで行うことを想定している. 対象となるシステムは2元系のFe-Alで,強磁性を仮定した計算を行う.
事前計算
EA-vcではcryspy.inでref_energies(ver. 1.4.3以下ではend_point)として,各元素単体の1原子当たりのエネルギーを基準として用いるため,事前に計算する必要がある.
exampleファイルの中に二つのディレクトリがあるはず.
インプットファイル(pwscf.in)およびジョブスクリプト(job_cryspy)があるので適宜使用する計算機の環境に合わせて編集すること.
pwscf.inファイルでは,最終的に使用するカットオフなどの値を単体の計算でも利用しなければならないので注意すること.
ジョブを実行する(ジョブサブミットのコマンドは適宜読み替えること).
計算が終わったら1原子あたりのエネルギーをeV単位に変換しておくこと. 今回はBCCやFCCなので,ユニットセルは1原子で構成されているが, 通常はユニットセルの原子数でセルあたりのエネルギーを割って計算する.
cryspy.in
cryspy.inの例.
algo = EA-vcを使用.- v1.5.0以降は,[option]セクションの
energy_output_intervalで凸包の図と凸包からの距離のファイルの出力間隔(世代数)を指定できる.デフォルトは1(毎世代),0で自動出力を無効化. - v1.5.0以降は,[option]セクションの
backup_intervalで自動バックアップの間隔(世代数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップを参照. jobcmdは計算機環境に合わせて変更すること.- [structure]セクションでは,
ll_natで各元素の原子数の最小値,ul_natで最大値を指定. n_pop=n_crsov+n_perm+n_strain+n_rand+n_add+n_elim+n_subsref_energies(ver. 1.4.3以下ではend_point)には事前計算しておいた,FeおよびAlにおける各単体の1原子当たりのエネルギー(eV/atom)を入力.atypeの順番.- [EA]セクションのパラメータについては,入力ファイル > [EA] sectionおよび探索アルゴリズム > 組成可変型進化的アルゴリズム(EA-vc)を見ること.
- 自動的にプロットされる凸包グラフのパラメータはチュートリアル > 組成可変型進化的アルゴリズム(EA-VC) > 解析と可視化も参考にすること.
For QE
VASPと違ってQEでは組成可変型への対応は簡単で,2元系の探索の場合は常に2元系のインプット,3元系なら常に3元系のインプットを./calc_inに準備すればよい.
ただしnatだけは変更の必要があるので,CrySPYが自動で書き換える.
準備する際は下記のように何か適当な数字でnatを書いておく.
CrySPYは./work/xxx/において,先頭の空白を除いてnatから始まる行を
に自動的に書き換える.
calc_in/
job_cryspy
pwscf.in
1_pwscf.in
2_pwscf.in
次世代の生成
最終更新日:2026年10月16日
初回実行
cryspyを実行すると,構造生成モードになり,第一世代のランダム構造が生成されて,一旦プログラムは終了する.
出力をみると,ll_natとul_natの範囲の原子数で構造が生成されているのが確認できる.
cryspy.statを見ると,EAでは現在の世代の情報が追加されている.
構造最適化
何度かcryspyを実行して,第一世代の構造最適化を終わらせると,下記のように出力される.
凸包
この時点で,./data/convex_hull/にhull distanceの情報とconvex hullのグラフが出力されている.
- hull_dist_all_gen_1
次世代生成
準備ができた状態でもう一度cryspyを実行すると,次世代構造の生成が始まる.
デフォルト(backup_interval = 1)では,次世代構造を生成する直前に自動バックアップが実行される.
v1.5.0以降は,[option]セクションのbackup_intervalで間隔(世代数)を変更でき,0で自動バックアップを無効にする.詳細は機能 > バックアップを参照.
あとはcryspyの実行を繰り返せば,探索が進む.
結果の確認
最終更新日:2026年10月16日
ここでは,EAと異なるところを中心に述べる.
cryspy_rslt
以下は第3世代まで計算を終えたcryspy_rsltの例である.EA-vcでは,形成エネルギー(Ef_eV_atom)と原子数(Num_atom)も追加される.
v1.5.0以降は,[option]セクションのrslt_outでcryspy_rsltとcryspy_rslt_energy_ascの出力タイミングを変更できる.デフォルトはalways.詳細は入力ファイル > [option] Sectionを参照.
組成を指定して結果を確認
v1.5.0以降では,cryspy-printの-c(--composition)オプションで,rslt_data.pklから特定の組成比の結果だけを表示できる.
組成比はatypeの順に指定する.この例ではatype = Cu Ag Auなので,Cuを含まずAgとAuが1:1の構造を確認するには,次のように実行する.
組成比は約分して比較されるため,上の表ではNum_atomが(0, 4, 4)のID 7と(0, 3, 3)のID 8が該当する.
該当する結果を形成エネルギー(Ef_eV_atom)の昇順で表示する.--allは該当する全行を表示する指定で,エネルギーが低い先頭10件だけを確認したい場合は--head 10に置き換える.
上の表のデータに対する表示結果:
nat_data
原子数,組成の情報はnat_dataにも出力される.
hull_dist_all_gen_x
デフォルト設定では,例えば第3世代終了時点のhull distanceのデータは./data/convex_hull/hull_dist_all_gen_3というファイルに出力される.
出力間隔は[option]セクションのenergy_output_intervalで指定する.デフォルトは1(毎世代),0でファイルの自動出力を無効化.詳細は入力ファイル > [option] Sectionを参照.
conv_hull_gen_x.svg
デフォルト設定では,例えば第3世代終了時点の凸包プロットの画像データは./data/convex_hull/conv_hull_gen_3.svgに出力される.
凸包図の自動出力も同じenergy_output_intervalの設定に従う.
デフォルトはsvg形式であるが,入力ファイルでfig_formatを変更していればpdfやpngで出力される.
解析と可視化
最終更新日:2026年10月16日
自動凸包プロット
EA-vcでは2元系および3元系の探索シミュレーションの場合,デフォルトで各世代の計算終了時に凸包のグラフが自動プロットされる.
画像は ./data/convex_hull/conv_hull_gen_{gen}.{fig_fotmat}に保存される。
バージョン1.5.0以降は,[option]セクションのenergy_output_intervalで出力間隔(世代数)を変更できる.デフォルトは1(毎世代)で,0なら凸包の図と凸包からの距離のファイルの自動出力を無効にする.凸包と凸包からの距離の計算自体は毎世代行われる.詳細は入力ファイル > [option] Sectionを参照.
2元系
上の図は第3世代まで探索した時の例であり,cryspy.inの[visual]セクションで,下記のような入力変数を設定できる.
詳細は CrySPY > Input file > [visual] section.
ここで,vmaxはhull distanceのカラーバーの最大値,bottom_marginは形成エネルギーの最小値とy軸の最小値の間のマージンを表す.
左の図に示すように,axis_order = lr(デフォルト設定)としたとき,atype[0]が左端,aypte[1]が右端になるように描画される.
右の図はaxis_order = rlにしたもの,つまり,atype = Cu Auの場合, 純Cu結晶がグラフの右端,純Au結晶が左端に配置される.
3元系
上の図は3元系の例であり,cryspy.inの[visual]セクションで,下記のような入力変数を設定できる.
詳細は CrySPY > Input file > [visual] section.
ここで,show_maxはプロットするhull distanceの最大値であり,上記の例ではコメントアウトしてあるので
デフォルト値のNoneが適用されている.
左の図に示すように,axis_order = tlr(デフォルト設定)としたとき,atype[0]が上,aypte[1]が左,atype[2]が右のendpointになる.
trlやltrなど配置したい順番で指定できる.
右の図は axis_order = ltrのとした時の例で,
atype = Cu Ag Auの場合だと,Cuが左,Agが上,Auが右のendpointに配置される.
電荷中性条件
chargeを指定して電荷中性条件を課した場合の凸包プロットを以下に示す.
入力例や電荷の指定方法は機能 > 電荷中性条件を参照.
2元系(左:single-valence,右:multi-valence).
- single-valence:
(Cu, Au) = (+1, -1) - multi-valence:
(Cu, Au) = ((+2, +3), -2)
3元系(左:single-valence,右:multi-valence).
- single-valence:
(Cu, Ag, Au) = (+1, +2, -1) - multi-valence:
(Cu, Ag, Au) = (+1, (+2, +3), -2)
組成制限
バージョン1.5.0以降では,min_compとmax_compで探索する組成範囲を制限できる.
組成制限を設定した場合,凸包プロットでは組成の許容範囲が青色の領域で示される.
入力例や図の見方は機能 > 組成制限を参照.
2元系(左)と3元系(右)の第3世代までの探索結果の例.
探索結果を使わずに入力した組成範囲を確認するには,cryspy-Eplotの-cオプションを利用できる.
電荷中性条件と組成制限の併用
組成制限はchargeによる電荷中性条件とも併用できる.
その場合,青色の領域は組成制限のみを表し,生成される構造はその領域内で電荷中性条件も満たすものに限られる.
入力例は機能 > 組成制限を参照.
両方の条件を課した3元系の第3世代までの探索結果の例.
cryspy-Eplotを用いた再プロット
もしプロットされた図を調整して再プロットしたい場合は,cryspy-Eplotコマンドを使えば簡単に実行できる.
世代を指定した再プロット
cryspy-Eplotコマンドを用いる場合は,専用の以下の入力変数も利用可能となっている.
plot_min_genplot_max_genref_gen
例えば,2世代目における図を再プロットするには,[visual]セクションを下記のように書く.
cryspy-Eplotを実行すると
この場合,CrysPYは ./data/convex_hull/conv_hull_gen_{gen}.{fig_fotmat}にファイルを上書き保存する.
plot_min_genとplot_max_genを用いることで,プロットする世代の範囲を指定することも可能である.
plot_min_genに値が設定された場合,たとえそれが1であっても普段と異なる次のファイルに図が保存される.
./data/convex_hull/conv_hull_gen_{plot_min_gen}-{plot_max_gen}.{fig_fotmat}.
例えば上の図は左から,第1世代.第2世代,第3世代の構造だけを抜き出してきたものである.
ただし,ref_gen = 3を使って,凸包(実線)は第3世代ものを常に用いて描いている.
ref_genの値はplot_max_gen以上に設定する必要がある.
中央の図のように第2世代だけ抜き出したい場合は,[visual]セクションで下記のように設定する.
もしref_genが指定された場合は,出力されるファイル名は次のようになる.
conv_hull_gen_{plot_min_gen}-{plot_max_gen}_ref_{ref_gen}.{fig_format}.
化合物を基準とした凸包
[visual]セクションのterminalsで基準となる化合物組成を指定すると,化合物を基準とした凸包も描画できる.設定例はコマンド > cryspy-Eplot > 化合物を基準とした凸包を参照.
以下は,電荷中性条件を課したLi–Al–O系の第30世代までの探索結果の例.左は元素を基準とした3元系の凸包,右はLi2OとAl2O3を基準とした擬2元系の凸包.
データのダウンロード
ここでは,CrySPYのデータをローカルPCで解析・可視化することを前提としている.
CrySPYをスーパーコンピュータやワークステーションで使用している場合は,データをローカルPCにダウンロードすること.
work や backup ディレクトリは,ファイルサイズが非常に大きくなる可能性があるため,不要であれば削除してよい.
Jupyter Notebook
先ほどダウンロードした結果の中にある data/ ディレクトリに移動する.
その後,CrySPY utilityがローカルにダウンロード してある場合は cryspy_analyzer_EA-vc.ipynb をコピーする.
またはGitHubから直接ダウンロードしてくる(CrySPY_utility/notebook/).
Jupyter notebookファイルには,CrySPYのコードと同じ関数が書かれており,自由に凸包のプロットをカスタマイズできる. 適宜順番に実行していき,下記のどちらかを選ぶと自動プロットと同じものが得られる
- Binary system, matplotlib
- Ternary system, matplotlib
途中にある
- Interactive plot using Plotly
では,2元系,3元系および4元系において,Plotlyを用いたインタラクティブプロットができる.
Bayesian Optimization (BO)
BO
LAQA
最終更新日:2026年10月16日
情報
CrySPYの基本的な使い方に関してははじめにTutorial > Random Search (RS)を見ること.
ここではCrySPY 1.1.0以上を想定している.
ここで利用しているファイルはCrySPY_utility/examples/qe_Si16_LAQAからダウンロードできる. このチュートリアルでは,50個だけ初期構造を生成しているが,本来LAQAでは,もっと多くの構造を生成しておいてそこから良い候補を選択することでシミュレーションを進める.
Input
cryspy.in
cryspy.inの例.
- LAQAでは
nstageは1にする必要がある. - v1.5.0以降は,[option]セクションの
backup_intervalで自動バックアップの間隔(選択回数)を指定できる.デフォルトは1,0で自動バックアップを無効化.詳細は機能 > バックアップを参照. - [LAQA]セクションの
nselect_laqaだけ新しく設定する必要がある.nselect_laqaは一回の選択で選ばれる候補の数.
下記のようにwfやwsを指定すれば,LAQAのスコアにおける重みも変えられる.
省略した場合,デフォルトでは0.1と10.0がそれぞれ使われる.
スコアの詳細についてはSearch algorithms > LAQAを見ること.
calc_in/pwscf.in_1
nstepで1回の選択で何ステップ構造最適化を進めるかをコントロールする.(VASPではNSW)
calc_in/job_cryspy
- ジョブスクリプトはいつも使っているものと同じ
Run
ヒント
自動化スクリプトも用意してある.このページの最下部参照.
cryspyと打って1回目の実行.
この入力ファイルではまず50構造生成されるのでlog_cryspyを見て確認する.
LAQAでは,はじめに全ての初期構造の最適化ジョブを実行する.
完全に最適化を終わらせるわけではなく,ここではnstep = 10にしているので,10ステップだけ実行される.
cryspyコマンドを繰り返して,初期構造全てについて10ステップの最適化を完了させる.
必要であれば,njobの値を上げておけば一度に多くのジョブがサブミットされる.
初めの最適化が全て終わると, log_cryspyの最後にLAQA is readyと表示される.
この状態でcryspy を実行すると,最初の選択が始まる.
nselect_laqaで設定された構造の数だけ選択される.
cryspyをもう一度実行するとそれらのジョブ(次の10ステップ)がサブミットされる.
あとはこれを何度も繰り返し行うことでスコアに応じて選択された構造の最適化が10ステップずつ進行する. ある程度の構造の最適化が完全に完了するまで進めて,止めたいタイミングでストップする.
Status
シミュレーションの途中でスコアの確認がしたければ次のファイルを見ると良い:
- ./data/LAQA_status
他にもLAQAに関数ファイルがいくつか出力される:
- ./data_LAQA_bias
- ./data_LAQA_energy
- ./data_LAQA_score
- ./data_LAQA_selected_id
- ./data_LAQA_step
Analysis and Visualization
ここではCrySPYのデータをローカルPCで解析する.
スパコンやワークステーションで計算を行ったら,ローカルPCにデータをダウンロードしておく.
今後必要なければ,ファイルサイズが大きいworkとbackupディレクトリは削除しておいて良い.
pklデータはgzipしておくとファイルサイズを減らすことができる.
Jupyter Notebook
ダウンロードした結果のdata/ディレクトリに移動して,cryspy_analyzer_LAQA.ipynbをCrySPY utilityからコピーする.
このjupyter notebookを順番に実行していけば下記のようなグラフとgif画像が作成できる. この例では,アニメーションのために全ての構造の最適化を完全に完了させた. (全て最適化を完了させるとランダムサーチと計算量が変わらないのでLAQAの優位性はない)
このグラフはエネルギーを最適化ステップの関数として示している. 赤い線は最終的にエネルギーが低かった3つの構造を表しており,中でも一番安定だった構造はダイアモンド構造に到達している. 安定になる構造はかなり早い段階で選択されて構造最適化が完了していることがわかる.
情報
algo = LAQAでは[option]セクションの下記の二つは自動的にTrueになる.
- force_step_flag = True
- stress_step_flag = True
原子に働く力とストレスのデータは1ステップごとに収集される. エネルギーと構造データは1ステップごとではなく,選択ごとに収集される. つまり,この場合は10ステップおきにエネルギーと構造データは保存される. もし1ステップごとのデータが欲しいのであれば,手動で下記の設定を追加すること.
Auto Script
何度も繰り返しcryspyを実行するのは面倒に感じたかもしれない. 下記のようなスクリプトを使えば自動化できる.
初期構造の読み込み
最終更新日:2026年10月16日
ここでは,cifファイル3つからinit_struc_data.pklを作成し,初期構造として読み込む.
RSによるCu 8原子の探索を例に,3構造を読み込み,不足する2構造をランダム生成して,合計5構造で探索を開始する.
読み込み時のチェックの詳細は,機能 > 初期構造の読み込みを参照.
準備
チュートリアル > ランダムサーチ(RS) > ASE on Your Local PCと同様に,cryspy.inとcalc_in/を新しい作業ディレクトリに用意する.
calc_in/のase_in.pyとjob_cryspyは,そのチュートリアルと同じものを使用する.まだcryspyは実行しない.
変換にはCrySPY Utilityのpos2pkl.pyを用いる.以下では,pos2pkl.pyにPATHが通っていることを想定する.設定方法はインストール > CrySPY Utilityを参照.
動作確認用のcifファイルをダウンロードし,作業ディレクトリに置く.いずれもCuを8原子含む構造.
構造データの変換
作業ディレクトリで次のコマンドを実行する.cifのように1ファイルに1構造を保存したデータには,-sを付ける.
カレントディレクトリにinit_struc_data.pklが作成される.入力順に構造IDが割り振られ,Cu8_1.cif,Cu8_2.cif,Cu8_3.cifのIDはそれぞれ0,1,2となる.
変換方法の詳細はCrySPY Utility > pos2pkl.pyを参照.
cryspy.in
cryspy.inを次のように設定する.
atype = Cu,nat = 8は,読み込む3構造の原子種と原子数に合わせている.tot_struc = 5とし,読み込んだ3構造にランダム生成した2構造を加える.load_struc_flag = Trueで初期構造の読み込みを有効にする.jobcmdは計算機環境に合わせて変更する.
データの配置と実行
初回のcryspy実行前に,作成した構造データを配置する.
3構造が読み込まれ,不足する2構造がランダム生成される.初期構造の準備が完了すると,一旦終了する.
以降は通常のRSと同様に,再びcryspyを実行して構造最適化を進める.
読み込み結果の確認
./data/init_POSCARSに,読み込んだ構造とランダム生成した構造を合わせた5構造が保存される.
| 構造ID | 初期構造 |
|---|---|
0 | Cu8_1.cifから読み込んだ構造 |
1 | Cu8_2.cifから読み込んだ構造 |
2 | Cu8_3.cifから読み込んだ構造 |
3,4 | ランダム生成した構造 |
./data/pkl_data/init_struc_data.pklも,この5構造を含む内容に更新される.
構造数や原子種・組成などの条件を満たさない場合はエラーになる.詳細は機能 > 初期構造の読み込み > 読み込み時のチェックを参照.
分子結晶の構造予測
最終更新日:2026年10月16日
情報
CrySPYの基本的な使い方については,はじめにチュートリアル > ランダムサーチ(RS)を参照.
ここでは,分子結晶の構造生成のみを扱う. 本ページでは,構造生成の際に分子や原子団をユニットとして配置する結晶を「分子結晶」と呼ぶ.Li3PS4の例のように,単原子や多原子イオンをユニットとして扱う場合も含む.
バージョン0.9.0以降では,PyXtalを用いた分子結晶のランダム構造生成が可能.
PyXtalのデータベースに登録された分子を使用するか,分子構造を定義したファイルを用意する. PyXtalの分子データについては,PyXtalのドキュメントを参照.
登録済みの分子
PyXtalに登録された分子には,C60,H2O,CH4,NH3,benzene,naphthalene,anthracene,tetracene,pentacene,coumarin,resorcinol,benzamide,aspirin,ddt,lindane,glycine,glucose,ROYがある.
ここでは,ベンゼン分子2個からなる分子結晶の構造を生成する.
作業ディレクトリに移動し,以下のいずれかの方法で入力ファイルの例を用意する.
- CrySPY Utility > examples > qe_benzene_2_RS_molからダウンロードする.
- インストール済みのCrySPY Utilityからコピーする.
- (バージョン0.10.3以前のみ)
cp -r ~/CrySPY_root/CrySPY-0.9.0/example/QE_benzene_2_RS_mol .
cryspy.inを確認する.
分子結晶の構造生成では,[structure]セクションでstruc_mode = molを指定する.
使用する分子と分子数は,以下のように指定する.
mol_file = benzenenmol = 2
v1.5.0でtimeout_molは削除された.
CrySPYを実行し,初期構造(./data/init_POSCARS)を確認する.
ユーザー定義の分子
作業ディレクトリに移動し,Li3PS4の2化学式単位分の入力ファイルの例をコピーする.
- バージョン1.0.0以降
- CrySPY Utilityからコピーする.
- バージョン0.10.3以前
cp -r ~/CrySPY_root/CrySPY-0.9.0/example/QE_Li3PS4_2fu_RS_mol .
LiとPS4の分子ファイルが含まれている.PyXtalでは,.xyz,.gjf,.g03,.g09,.com,.inp,.out形式,およびpymatgenの分子データをJSON形式で保存したファイルを使用できる.
cryspy.inを確認する.
分子結晶の構造生成モードでは,単一の原子(この例ではLi原子)も1つの分子として扱う. この例では,以下の指定により,Li原子6個とPS4分子2個からなる分子結晶のランダム構造を生成する.
mol_file = ./Li.xyz ./PS4.xyznmol = 6 2
mol_fileには,cryspy.inがあるディレクトリからの相対パスを指定する.
この例では,分子ファイルをcryspy.inと同じディレクトリに置いている.
CrySPYを実行し,初期構造(./data/init_POSCARS)を確認する.
セル体積
cryspy.inのvol_factorで体積スケーリング係数を指定できる.
デフォルトは1.1.正の数値を1つ指定する.
例えば,係数を1.5にする場合は以下のように記述する.
Random Structure Generation with MPI
最終更新日:2026年10月16日
情報
CrySPYの基本的な使い方に関してはチュートリアル > Random Search (RS)を見ること.
動作環境: 1.1.0 <= CrySPY <=1.2.2ではバグがあった.
MPIを使ったジョブをbashやzshで実行するとき(e.g.,
情報
1.1.0 1.2.3 or later
警告
jobcmd = zsh, jobfile = job_cryspy),MPIのジョブが流れない.
qsubやsbatchでジョブスケジューラーを使う場合は問題ない。
このバグはバージョン1.2.3で修正.
mpi4py
mpi4pyのインストールがまだであればインストールする.
入力ファイル
cryspy.inはいつもと同じで変更する必要はない.ここでは下記の設定でMPIを使った構造生成を行う.
tot_struc,atype,nat以外の変数は構造生成に関係がないのでここでは無視して良い.
実行
4並列で実行する場合,mpiexec -nを使う.-pオプションも必要.
In 1.1.0 <= CrySPY <= 1.2.2では下記のコマンド (-pオプションは使用しない)
ジョブスケジューラーなどにサブミットするときは自分でジョブファイルを作る.下記は一例.
実行スクリプトcryspyのpathなどは適宜編集すること.
結果
CrySPYはシンプルに構造生成タスクをプロセス数で分割している.
- Rank 0: IDs 0 – 24
- Rank 1: IDs 25 – 49
- Rank 2: IDs 50 – 74
- Rank 3: IDs 75 – 99
構造が生成された順番でログが出力される.
しかし,init_POSCARSでは,構造生成が全て終わった後に出力しているのでID順になっている.
メモ
ランダム構造生成以外の部分はMPIを使っても並列化されていないので意味はない.
インタラクティブモード (Jupyter Notebook)
最終更新日:2026年10月16日
準備
CrySPYをインストールすればASEは自動的にインストールされている. ワークステーションやローカルPCでJupyterを使えるようにしておく. このチュートリアルでは,構造最適化にPure Python EMT calculatorを用いる.このEMTポテンシャルの精度は悪く,デモ用のものなので注意.
exampleのノートブックには汎用機械学習ポテンシャルのCHGNetを使用するコードも書いてあるので,CHGNetを試したい場合は事前にpipでインストールしておく.
入力ファイル
どこか適当なワーキングディレクトリに移動して,まずはexampleをコピーしてくる.下記のどちらからコピー してきても良い.
- CrySPY_utility/examples/interactiveからダウンロード
- インストールしておいたCrySPY utilityからコピーする
インタラクティブモードでも,cryspy.inを入力ファイルとして使用する.
インタラクティブモードではcalc_inディレクトリは使用しない.
input_examplesディレクトリの中に,いくつかの入力ファイル例が入っているので参考にしてほしい.
ここではEA-vcを用いた下記のcryspy.inを使用する.EA-vcについてはEA-vcのチュートリアルを見ること.
ノートブック
cryspy_interactive.ipynbを開いて,上から実行していく.
Check Current Working Directory
最初のセルはファイルやcryspy.inの中身を確認しているだけ.
Import
コメントアウトされているものは今回は無視して,CrySPYのインタラクティブモードで核となるライブラリをインポートするセルを実行する.
Initialize CrySPY
このセルは通常の初回実行に対応している.cryspy.inを読み込んで初期構造が生成される.
Set Calculator
このセルでASEのcalculatorをセットする.ここではASEのEMTを用いる.
Restart CrySPY
このセルを実行すると,先ほど生成した初期構造の最適化が始まる. インタラクティブモードでは一つ一つ順番に構造最適化計算を行う.その際に進捗バーも表示される.
- njob: 一度の実行で最適化計算を行う構造数.0の場合は
cryspy.inに書いてある値が使用される. - calculator: 先に設定したcalculatorを代入
- optimizer:
FIRE,BFGS,LBFGSから選択.文字列で指定する. - symmetry: Trueなら対称性を維持した構造最適化を行う
- fmax: 収束判定に使われる原子に働く力の最大値(eV/Å)
- steps: 最大最適化ステップ数
njobの値を小さくしている場合は,何度かこのセルを実行して,全ての初期構造の最適化を終了させる.
EA-vcを用いている場合,すべて終わると以下のように表示される.
もう一度このセルを実行すると世代交代が行われるので,次世代の構造生成が終了したら,あとは同様にこのセルの実行を繰り返す.
Show Results
このセルを実行すると,cryspy_rslt_energy_ascなどのファイルを表示できる.
Structure Visualization
初期構造や最適化済みの構造をインタラクティブに可視化できる.
action.get_atoms('opt', cid=0)のところでoptをinitに変えると,初期構造が確認できる.
cidで構造IDを指定する.
ASEの機能を使用しているのでviewerにはngl, ase, x3dが利用できる.
nglを使うにはnglviewのインストールが必要なのでpipでインストールしておく.
Energy Plot for RS, EA
ランダムサーチ(RS)や進化的アルゴリズム(EA)の場合,下記画像のようなエネルギーグラフを表示できる. EA-vcの場合は原子数が異なるので単純にエネルギーを比較できないので,後述のconvex hullプロットを使う.
Convex Hull Plot for EA-vc
Interactive Plot Using Plotly
EA-vcの場合はPlotlyを用いたconvex hullのインタラクティブプロットが利用できる. CrySPYをインストールすればPlotlyは自動的にインストールされている. このconvex hullプロットはpymatgenの機能を用いている.
- cgen: どの世代までプロットするかを指定.Noneであれば最新の世代までプロットされる.
- show_unstable: 描画するhull distanceの最大値.
- ternary_style
- 2元系: ternary_style = ‘2d’
- 3元系: ternary_style = ‘2d’, ‘3d’
- 4元系: ternary_style = ‘3d’
2元系ではなく,3元系や4元系で計算しているときは下記のようなインタラクティブプロットが得られる. 左から順に,3元系(ternary_style = ‘2d’),3元系(ternary_style = ‘3d’),4元系(ternary_style = ‘3d’)のプロット
Binary System Using matplotlib
このセルを実行すると,matplotlibを用いて2元系のconvex hullをプロットできる.
- cgen: どの世代までプロットするかを指定.Noneであれば最新の世代までプロットされる.
- show_max: 描画するhull distanceの最大値.
- label_stable: 安定相のラベルを表示するかどうか.
- vmax: カラーバーのhull distaceの最大値.
- bottom_margin: y軸の下部のマージン.
Ternary System Using matplotlib
もし3元系の探索をしている場合は,このセルを実行することでmatplotlibを使ったconvex hullのプロットができる.
- cgen: どの世代までプロットするかを指定.Noneであれば最新の世代までプロットされる.
- show_max: 描画するhull distanceの最大値.
- label_stable: 安定相のラベルを表示するかどうか.
- vmax: カラーバーのhull distaceの最大値.
例えば以下のようなプロットが得られる.
インターフェース
2025年7月12日 更新
CrySPYはエネルギー計算や構造最適化に外部のソフトウェアを利用する. 以下のソフトウェアを利用可能:
- 第一原理計算
- VASP
- Quantum Espresso
- OpenMX (CrySPY 0.9.0 or later)
- 原子間ポテンシャル
- その他(ASEに対応している機械学習ポテンシャルやその他ソフトが利用可能)
- ASE (CrySPY 1.2.0 or later)
- インタラクティブモード(ASE)(CrySPY 1.4.0 or later)
少なくともいずれか一つは必要.
アルゴリズム互換性
- 1.4.2: EA-vc supports VASP
| RS | EA | EA-vc | BO | LAQA | |
|---|---|---|---|---|---|
| VASP | ✓ | ✓ | ✓ | ✓ | ✓ |
| Quantum Espresso | ✓ | ✓ | ✓ | ✓ | ✓ |
| OpenMX | ✓ | ✓ | × | ✓ | × |
| soiap | ✓ | ✓ | × | ✓ | ✓ |
| LAMMPS | ✓ | ✓ | × | ✓ | × |
| ASE | ✓ | ✓ | ✓ | ✓ | × |
| Interactive (ASE) | ✓ | ✓ | ✓ | × | × |
オプション互換性
| energy_step_flag | struc_step_flag | force_step_flag | stress_step_flag | |
|---|---|---|---|---|
| VASP | ✓ | ✓ | ✓ | ✓ |
| Quantum Espresso | ✓ | ✓ | ✓ | ✓ |
| OpenMX | × | × | × | × |
| soiap | ✓ | ✓ | ✓ | ✓ |
| LAMMPS | × | × | × | × |
| ASE | × | × | × | × |
探索アルゴリズム
目次
探索アルゴリズムのサブセクション
Random Search (RS)
under construction
進化的アルゴリズム (EA)
2025 April 2
背景
進化的アルゴリズム(EA)は,進化論に着想を得たメタヒューリスティックな手法である. EA は,これまでに探索された安定構造(親構造)の局所環境を受け継ぐことで,新たな構造(子個体)を効果的に生成することができる. Oganov グループの USPEX はよく知られたソフトウェアであり,そのほかにも XtalOpt などがある. 先行研究の例は以下の通り.
- T. S. Bush, C. R. A. Catlow, and P. D. Battle, J. Mater. Chem. 5, 1269 (1995).
- A. R. Oganov and C. W. Glass, J. Chem. Phys. 124, 244704 (2006).
- A. R. Oganov, A. O. Lyakhov, and M. Valle, Acc. Chem. Res. 44, 227 (2011).
- A. O. Lyakhov, A. R. Oganov, H. T. Stokes, and Q. Zhu, Comput. Phys. Commun. 184, 1172 (2013).
手順
- 個体群(population)の初期化
- 適応度(fitness)の評価
- 自然選択
- 親個体の選択
- 次世代の生成
- ステップ2(適応度の評価)に戻り繰り返す
個体群(population)の初期化
第一世代では,n_pop で指定された数のランダム構造が生成される.
EAおよびEA-vcにおいては,tot_struc は使用されない.
適応度(fitness)の評価
現在,CrySPYにおいて適応度として使用できるのはエネルギーのみである.
fit_reverse = False に設定することで,最小値探索モードになるよう構成されている.
この fit_reverse の設定は,将来的にエネルギー以外の物性を適応度として用いる場合に備えて用意されている.
自然選択
DFT計算では,まれに失敗して極端に不合理なエネルギー値が得られることがある.
emax_ea および emin_ea を用いることで,極端に高い(または低い)エネルギーを持つ構造を除外することができる:
$$ \mathrm{emin\_ea} \le E \ (\mathrm{eV/atom}) \le \mathrm{emax\_ea} $$
たとえば,emin_ea を設定すると,その値よりも低いエネルギーを持つ構造は無視される.
自然選択では,まず現在の個体群と,過去の世代から保持されたエリート個体が,適応度に基づいてランク付けされる.
ここで使用されるエリート個体の数は,n_eliteで指定される.
現在の個体群とエリート個体の中から,適応度の高い順に n_fittestの数の個体が選択され,それ以外は淘汰される.
自然選択の過程では,pymatgen のStructureMatcher クラスにより重複を除去し,上位n_fittestの数の個体を選択している.
n_fittest は,n_pop(個体群サイズ)の約半分に設定されることが多い.
現在の実装では,n_fittest = 0 の場合,すべての個体が保持される仕様になっている.
下の図はn_fittest = 5の場合の自然選択の例を示している.
親個体の選択
親候補の個体の中から1つの親個体を選択するために,CrySPYでは2種類の選択手法が実装されている.
いずれの手法も,適応度の高い個体がより高い確率で選ばれるように設計されている.
slct_func = TNMを設定するとトーナメント選択が,slct_func = RLTを設定するとルーレット選択が使用される.
トーナメント選択はパラメータが少なく,簡単に使用できる点が利点である.
次世代の生成
次世代は,親候補の個体に対して進化的操作を適用して生成された子個体と,一部のランダム構造から構成される. ランダム構造は,多様性を維持し,局所的最小からの脱出を促すために各世代で追加される.
進化的操作
ここでは,CrySPYに実装されている,組成固定型EAの進化的操作を紹介する.
個体群の数
crossover, permutation, strainおよびランダムに生成された構造数の合計がn_popと等しくなければならない.
n_pop=n_crsov+n_perm+n_strain+n_rand
進化的アルゴリズム (EA)のサブセクション
Crossover
最終更新日:2026年10月16日
概要
交叉(cross over)は,2つの親構造のスライスされた領域を交換することで,新たな構造(子個体)を生成する進化的操作である. この操作により,構造の多様性が促進され,局所的に安定な特徴が遺伝することが可能となる. 構造探索において低エネルギー構造を効率的に探索するための主要な手法のひとつである.
手順
- 親候補から異なる個体を2つ選択
- ランダムに並進操作
- 格子ベクトルをランダムに選択
- 中央付近で親構造を切断
- 切断された半分を交換
- 原子数の多い子構造を選択
- ボーダー付近で原子数の調整
- 最小原子間距離のチェック
- Niggli簡約
4. 中央付近で親構造を切断
切断ポイントは中央付近で,下記のように毎回少し変化させる.
以降のステップで失敗した場合,このステップ4に戻って再開する場合がある.
ただし,再開可能な回数はmaxcnt_eaで上限が決められており,それを過ぎた場合は親の選択からやり直す.
5. 切断された半分を交換
crs_latがrandomの時,子構造の格子ベクトルは2つの親構造のうちのどちらか一方をそのまま引き継ぐ.
crs_latがequalの場合は,親構造の格子ベクトルの平均を使う.
デフォルトはrandom.
6. 原子数の多い子構造を選択
親構造を入れ替えると,通常二つの原子数の異なる構造が得られる. とりあえず,原子数の多い構造を採用する.
ただし,原子数が元の構造のものと大きく違う場合はステップ4(中央付近で親構造を切断)からやり直す.
その許容量はnat_diff_toleで決める.
デフォルト値は4で,その場合それぞれの元素において原子数の差が±4まで許容される.
上の図の場合,元の構造と比較すると,青の原子は-1で,緑の原子は+2になっている.
7. ボーダー付近で原子数の調整
削除
原子数を調整する際,まずは原子の削除から行う.
下の図に示すように,mindistで定義される最小原子間距離を満たしていない原子から優先的に削除される.
以下のように,もし原子の削除が完了しても最小原子間距離の制限にかかる原子がある場合,ステップ4(中央付近で親構造を切断)からやり直す.
最小原子間距離の制限にかかる原子が無く,さらに原子を削除する必要がある場合は,下の図に示すようにボーダーから近い原子から削除する.切断ポイントに加えて内部座標が0のところもボーダーであることに注意.
追加
原子が不足しているときは,その原子をボーダー付近に追加する. 選択されている軸に沿った内部座標は下記のように決める. ここでmeanは切断ポイントの座標か0である.
座標の残りの二つの成分はランダムに決められる. 最小原子間距離のチェックを行いながら,元の組成と一致するまで原子を追加する.
9. Niggli簡約
原子数の調整と最小原子間距離のチェックを終えた子構造に,Niggli簡約を適用してから保存する.
pymatgenのStructure.get_reduced_structure(reduction_algo="niggli")を使用する.
Permutation
最終更新日:2026年7月7日
概要
置換(permutation)は,単一の構造内における異なる元素同士の配置を入れ替えることで,新たな構造(子個体)を生成する進化的操作である. この操作により,格子および全体の組成を変えることなく,異なる構造配置の探索が可能となる.
手順
異なる元素の原子の位置を入れ替える.
原子の入れ替えの回数はntimesで指定する.デフォルトは1回.
ntimes回の入れ替え後,親と同じ構造に戻ってしまった場合はやり直す.
最後に最小原子間距離をチェックする.
Strain
概要
歪み(strain)は,親構造の格子に対して小さなランダムな変形を加えることで,新たな構造(子個体)を生成する進化的操作である. この操作により,原子の接続関係や組成を保持しつつ,構造空間の近傍領域を探索することが可能となる. 構造候補の微調整や,局所的な最小値からの脱出にも有効である.
手順
以下の歪み行列を用いて,格子ベクトル$ \mathbf{a} $を変形させる.
$$ \mathbf{a}' = \begin{pmatrix} 1 + \eta_1 & \frac{1}{2} \eta_6 & \frac{1}{2} \eta_5 \\ \frac{1}{2} \eta_6 & 1 + \eta_2 & \frac{1}{2} \eta_4 \\ \frac{1}{2} \eta_5 & \frac{1}{2} \eta_4 & 1 + \eta_3 \end{pmatrix} \mathbf{a}. $$ここで,$ \eta_i $はガウス分布$ \mathcal{N}\left( 0, \ \sigma_{\mathrm{st}}^2 \right) $から決まる値で,$ \sigma_{\mathrm{st}} $は入力パラメーターsigma_stで指定できる(デフォルトはsigma_st = 0.5).
下の図に示すように,格子を変形させた後は,元の体積に戻す.
最後に最小原子間距離の制限をチェックする.
トーナメント選択
概要
トーナメント選択は,適応度に基づいて候補の中から親個体を選ぶための手法である.
この手法は,個体群内の選択圧と多様性のバランスをとるように設計されている.
下の図は,n_fittest = 10,t_size = 3の場合の例を示す.
手順
- 親個体候補から,所定の数(
t_size)の個体をランダムに選択 - その中で,最も適応度の高い(すなわち,エネルギーが最も低い)個体が親として選ばれる
- この処理を繰り返し,必要な数の親個体が選ばれるまで続ける
利点
- シンプルで効率的
- パラメータは1つだけ (
t_size) t_sizeを変えることで選択圧を調整可能
注意
t_sizeはデフォルトで3t_sizeが小さいと,多様性が促進されるt_sizeが大きいと,選択圧が増して,選択確率がより適応度に依存する- ルーレット選択とは異なり,トーナメント選択では下位の(
t_size- 1)個の個体が選択されることはない
ルーレット選択
概要
ルーレット選択は,適応度に基づいて親候補の個体の中から親個体を選ぶための確率的手法である. ルーレット選択においては,各個体の選ばれる確率はその適応度に比例する.
手順
fit_reverseがFalse(デフォルト)に設定されている場合,これはエネルギーを適応度として用いる最小化モードに対応しており,親候補の適応度には –1 が掛けられる.- 適応度 $ f_i $ は,以下の式により線形スケーリングされて $ f'_i $ に変換される.ここで,$ a $ および $ b $ は,それぞれ
a_rltおよびb_rltで指定されるパラメータであり,$ a > b $ でなければならない.
$$ f_i' = \frac{a - b}{f_{\mathrm{max}} - f_{\mathrm{min}}} f_i + \frac{b f_{\mathrm{max}} - a f_{\mathrm{min}}}{f_{\mathrm{max}} - f_{\mathrm{min}}} $$ - スケーリング後の適応度 $ f'_i $ は,次式により選択確率に変換される:
$$ p_i = \frac{f_i'}{\sum_k f_k'} $$
各 $ p_i $ は,$ i $ 番目の個体が選ばれる確率を表す. - 親個体は,$ p_i $ に基づいてルーレット選択により1つずつ選ばれ,必要な数に達するまで繰り返される.
利点
- すべての個体が非ゼロの確率で選ばれる可能性がある
- 適応度のスケーリングによって選択圧を調整できる
注意
- デフォルトでは
a_rlt = 10.0,b_rlt = 1.0 - 意味のある選択圧を得るためには,適応度のスケーリングが重要である.
下の図は,$ a $ が比較的小さい場合(左)と比較的大きい場合(右)における $ p_i $ の例を示している.
$ a $ が小さすぎると選択圧が弱くなり,適応度の高い個体が優先されにくくなる.
組成可変型進化的アルゴリズム (EA-vc)
2025年7月7日 更新
概要
CrySPY 1.4.0 以降,組成固定型EAを拡張した組成可変型EA(EA-vc)が利用可能になった. サポートしているインターフェースはこちらを確認すること(インターフェース). 全体の流れは組成固定型EAと類似しているが,EA-vcでは異なる組成に対応するために,適応度の評価方法と子個体の生成方法が異なる. ここでは,元のEAから変更された部分について説明する.
バージョン1.4.1からは電荷中性条件を課した構造生成が可能になった.
手順
- 個体群(population)の初期化
- 適応度(fitness)の評価
- 自然選択
- 親個体の選択
- 次世代の生成
- ステップ2(適応度の評価)に戻り繰り返す
個体群(population)の初期化
第一世代では,n_pop で指定された数のランダム構造が生成される.
EAおよびEA-vcでは tot_struc は使用されない.
EA-vcでは,各原子種の原子数は,ユーザーが定義した範囲内でランダムに決定される.
各原子種ごとの原子数の最小値(ll_nat)および最大値(ul_nat)は,以下のように cryspy.in で指定することができる.
適応度(fitness)の評価
異なる原子数を持つ構造の全エネルギーを直接比較することには意味がないため,異なる組成間の相安定性を評価するために,形成エネルギーから計算された凸包(convex hull)が用いられる. 形成エネルギー,凸包,相図に関する情報はオンラインで参照できる. 例えば,Materials Project Documentation を参照のこと. EA-vcでは,適応度は energy above hull(hull distanceとも呼ばれる)として定義されている.
形成エネルギー
形成エネルギーは,基準となる安定な単体のエネルギー(eV/atom)に基づいて計算され,これらは cryspy.in の ref_energies で指定される.
例えば,Cu–Auの2元系の場合,ref_energies にはfcc-Cuおよびfcc-Auの1原子あたりのエネルギー(eV/atom)をこの順で記述する必要がある.
構造探索中に,ref_energies と同じ組成を持つ構造が見つかり,そのエネルギーが対応する ref_energies の値よりも低かったとしても,形成エネルギーの計算には依然として cryspy.in に定義された元の ref_energies の値が用いられることに注意すること.
凸包(Convex Hull)
ある構造の形成エネルギーと,その組成におけるconvex hull上のエネルギーとの差は,energy above hull(hull distanceとも呼ばれる)と呼ばれる. この値は,同じ組成における最も安定な相の組み合わせと比べて,その構造の形成エネルギーがどれだけ高いかを示している. hull distanceが0の構造はconvex hull上にあり,熱力学的に安定である.
組成固定型EAとは異なり,EA-vcではconvex hullの計算時に構造の1原子あたりのエネルギーに基づいてフィルタリングを行い,以下の条件を用いる:
$$ \mathrm{emin\_ea} \le E \le \mathrm{emax\_ea} $$
このフィルタリングは形成エネルギーではなく,あくまで1原子あたりの全エネルギーに基づいて行われることに注意すること.
convex hullの計算には,pymatgen のPhaseDiagramクラスを使用している.
形成エネルギーの場合とは異なり,ref_energies と同じ組成を持つ構造が対応する ref_energies の値よりも低いエネルギーを持っていた場合,その構造がconvex hullおよびhull distanceを計算する際の基準として使用される.
自然選択
下図に示すように,EA-vcではhull distanceが0の安定構造が複数得られる場合がある.
このような場合,複数の個体がhull distanceにおいて同率の最上位ランクを占めることになる.
n_eliteで指定されたエリート構造の数が,同率ランクの個体数より少ない場合,選択には任意性が生じる.
現在のところ,CrySPYではhull distanceが0.001 eV/atom未満の個体の中から,n_elite 個をランダムに選択している.
hull distanceが 0.001 eV/atom未満の個体数が n_elite より少ない場合には,通常通り,適応度に基づくランキングによってエリート構造が選択される.
エリート個体を選択する際にも,pymatgen のStructureMatcherクラスを用いて重複構造を排除している.
エリート個体は,過去の世代で得られた最良の構造に基づいて選択される. しかし,hull distanceは世代ごとに変化する可能性があるため,自然選択を行う前に,現在のconvex hullを用いてエリート個体のhull distanceを再計算している.
Convex Hullセクションで述べたように,EA-vcでは,emin_eaおよびemax_eaは自然選択では使用されない.
親個体の選択
親個体の選択方法は組成固定型EAと同様である.
次世代の生成
進化的操作
crossover(vc)の操作は,組成固定型EAのものとわずかに異なるが,permutationおよびstrainは同一である. EA-vcでは,組成可変にするためにいくつかの新しい操作が導入されている.
個体群の数
crossover,permutation,strain,addition,elimination,substitution,およびランダム生成による構造の合計は,n_pop と等しくなければならない.
n_pop=n_crsov+n_perm+n_strain+n_add+n_elim+n_subs+n_rand
組成可変型進化的アルゴリズム (EA-vc)のサブセクション
Crossover (vc)
最終更新日:2026年10月16日
組成可変型のcrossoverは,組成固定型のバージョンとほとんど同じであるが,原子数の調整が最小限に抑えられている点が異なる.
組成固定型crossoverのステップ6では,各原子種ごとの原子数の差を直接計算する.
一方,crossover(vc)では,ll_nat と ul_nat で定義された許容範囲に基づいて原子数の差を計算する.
例えば,次のようになる:
上記の例でいう nat_diff にあたる原子数の差が,許容値 nat_diff_tole を超えている場合は,この操作はやり直される.
そうでない場合は,原子数が ll_nat と ul_nat で定義された範囲に収まるように調整される.
Addition
2025年7月7日 更新
現在の原子数が ul_nat で指定された上限を超えない原子種をランダムに選択し,その原子をランダムな位置に1個追加する.
バージョン1.4.1からは複数の原子を追加する機能を搭載.追加する原子数はadd_max以下の自然数からランダムに選択される.
デフォルトではadd_max = 5.
- 原子を1個追加し,それが
mindistで指定される最小原子間距離の制限を満たしているかチェック. - 距離の条件を満たさない場合は,別のランダムな位置に再配置する.この処理は最大
maxcnt_ea回まで繰り返される. - (since version 1.4.1) ランダムに決められた原子数(
add_max以下)が追加されるまで繰り返す. - 有効な子個体が得られなければ,体積を10%拡張して,同じ処理を最大
maxcnt_ea回まで再試行する. - それでも失敗した場合は,体積を最大20%まで拡張して構造生成を試みる.それでもうまくいかない場合は,親個体を変更する.
Elimination
2025年7月7日 更新
現在の原子数が ll_nat で指定された下限を上回っている原子種をランダムに選択し,その原子を1個削除する.
バージョン1.4.1からは複数の原子を削除する機能を搭載.削除する原子数はelim_max以下の自然数からランダムに選択される.
デフォルトではelim_max = 5.
Substitution
2025年7月7日 更新
Substitutionは,2つの異なる原子種をランダムに選択し,位置を入れ替える操作である.
バージョン1.4.1からは複数の原子を入れ替える機能を搭載.入れ替える原子数はsubs_max以下の自然数からランダムに選択される.
デフォルトではsubs_max = 3.
- 入れ替え後の構造の原子数が最小原子数(
ll_nat)と最大原子数(ul_nat)を超えないように制限. - 最終的に,
mindistで指定される最小原子間距離の制限をチェックし,問題がなければその構造を子個体として採用する.
Bayesian Optimization (BO)
under construction
One of the selection-type algorithms.
Reference
LAQA
選択型アルゴリズムの一つ.
Score $ L $
$$ L = -E + w_F \frac{F^2}{2\Delta F} + w_S S. $$| Symbol | Note |
|---|---|
| $$ E $$ | エネルギー(eV/atom) |
| $$ w_F $$ | 力の項の重み. Default: $ w_F = 0.1$ |
| $$ F $$ | 原子に働く力の平均ノルム(eV/Å) |
| $$ \Delta F $$ | 一つ前のステップからの$ F $の差の絶対値.はじめのステップでは $ \Delta F = 1$. $ \Delta F = 10^{-6}$ if $ \Delta F \le 10^{-6} $. |
| $$ w_S $$ | ストレス項の重み.Default: $ w_S = 10.0$ |
| $$ S $$ | ストレステンソルにおける成分の絶対値平均(eV/Å^3). |
Reference
構造生成
CrySPY currently has three random structure generation modes: crystal (default), mol, and mol_bs.
PyXtal (or find_wy) is used for the structure generation.
目次
構造生成のサブセクション
struc_mode = crystal
under construction
struc_mode = mol
under construction
struc_mode = mol_bs
CrySPY uses pyxtal in normal molecular crystal structure generation mode (struc_mode = mol). The molecules are arranged to fit a point group at a selected Wykoff position in the space group to keep the symmetry. (Sometimes it takes a long time to generate.)
In mol_bs mode (bs means break symmetry), dummy atoms are placed in Wykoff positions as in ordinary crystals, and then the dummy atoms are replaced by molecules without considering symmetry and rotated randomly. The structure generation is relatively fast.
under construction
機能
目次
機能のサブセクション
Logging
2023 July 10
CrySPY 1.2.0からPython標準ライブラリのloggingを採用.
CrySPYのログは画面とファイル(log_cryspy and err_cryspy)の両方に出力される.
- log –> screen and
log_cryspy - error and warning –> screen and
err_cryspy
ログの例:
ログを画面に出力させたくないときは下記のように-n オプションをつけて実行する.
バックアップ
最終更新日:2026年7月15日
CrySPYはシンプルなバックアップ機能を備えている. バックアップの対象は以下のファイルおよびディレクトリである.
cryspy.incryspy.statlog_cryspyerr_cryspydebug_cryspycryspy_interactive.ipynbcalc_in/data/
work/以下はバックアップに含まれていないので注意.
- (v1.5.0以降) バックアップディレクトリ名に進行番号と単位が付加される.手動バックアップの場合は,さらに
manualが付加される.また,backup_intervalで自動バックアップの間隔を指定できる. - (v1.1.0以降) 上記ファイルおよびディレクトリが,日付と時間で名前づけられたディレクトリにコピーされる.以前のバックアップは自動的には削除されない.
- (v1.0.0) バックアップは1世代分のみであり,それより古いものは削除される.
バックアップディレクトリ名(v1.5.0以降)
v1.5.0以降では,バックアップディレクトリ名にバックアップ時点の進行番号と単位が付加される.
バックアップはbackup/以下に保存される.
バックアップディレクトリ名は日時を先頭にし,以下の形式とする.
- 自動バックアップ:
YYYYMMDD_HHMMSS_<進行番号>_<単位> - 手動バックアップ:
YYYYMMDD_HHMMSS_manual_<進行番号>_<単位>
進行単位は以下のとおり.
- RS:
struc- 進行番号は結果登録済みの構造数
- BO,LAQA:
select- 進行番号は現在のselection番号
- EA,EA-vc:
gen- 進行番号は現在のgeneration番号
ディレクトリ名の例を以下に示す.
- EAの第5世代完了時の自動バックアップ:
backup/20260715_143052_5_gen/ - BOの第3 selection完了時の自動バックアップ:
backup/20260715_143052_3_select/ - EAの第5世代での手動バックアップ:
backup/20260715_154210_manual_5_gen/ - BOの第3 selectionでの手動バックアップ:
backup/20260715_154210_manual_3_select/ - RSで100構造の結果登録後に行った手動バックアップ:
backup/20260715_154210_manual_100_struc/
初期化前など,進行番号と進行単位を取得できない状態で手動バックアップした場合は,YYYYMMDD_HHMMSS_manualとする.
自動バックアップ
v1.5.0以降では,cryspy.inの[option]セクションにbackup_intervalを記述することで,自動バックアップの間隔を指定できる.
例えば,自動バックアップの間隔を5にする場合は次のように記述する.
backup_intervalに指定できる値は以下のとおり.
0:自動バックアップしない- 正数:指定した間隔で自動バックアップする
アルゴリズムごとのデフォルト値と間隔の単位は以下のとおり.
- RS
- デフォルトは
0 backup_intervalによる自動バックアップは行わないtot_strucで計算を区切り,完了後に手動でバックアップする
- デフォルトは
- BO,LAQA
- デフォルトは
1 - selection単位で自動バックアップする
- 次のselectionに移る直前に自動バックアップする
- デフォルトは
- EA,EA-vc
- デフォルトは
1 - generation単位で自動バックアップする
- 次世代構造を生成する直前に自動バックアップする
- デフォルトは
構造を追加する場合は,backup_intervalによる定期バックアップとは別に,構造追加前のバックアップを行う.
手動バックアップ
手動バックアップを行う場合は,-bまたは--backupオプションをつけてcryspyを実行する.
このコマンドは通常の計算処理を行わず,バックアップのみを実行する.
クリーン
2024 Dec. 22 updated
CrySPYはシンプルなクリーン機能を備えている. 初めからやり直したい時に便利となる. 以下のファイルがクリーン(実際はファイルを移動するだけ)される.
- cryspy.stat
- log_cryspy
- err_cryspy
- lock_cryspy
- data/*
- work/*
- tmp_gen_struc/*
クリーンする場合は-c または --clean オプションをつけてcryspyを実行する:
calc_in/* と cryspy.in 以外のファイルがtrashの中の日付と時間で名前づけられたディレクトリに移動します.
必要なければ手動で削除してください.
初期構造の読み込み
最終更新日:2026年10月16日
あらかじめ用意した構造を,探索の初期構造として使用できる.
cryspy.inの[option]セクションでload_struc_flag = Trueを指定すると,初回起動時に./data/pkl_data/init_struc_data.pklを読み込む.デフォルトはFalse.
必要な構造数に満たない場合は,不足分をランダム生成で補完する.
使い方
cifファイル3つからデータを作成して読み込む手順は,チュートリアル > 初期構造の読み込みを参照.
構造ファイルからinit_struc_data.pklへの変換には,CrySPY Utilityのpos2pkl.pyを使用できる.
読み込み時のチェック
読み込み時には以下の条件を確認する.条件を満たさない場合はエラーになり,初期化を停止する.
init_struc_data.pklのデータが辞書であること.- 構造IDが整数の
0から始まる連番であること.例えば,3構造なら0,1,2. - 各構造データがpymatgenの
Structureであること. - 構造数が以下の上限を超えないこと.
| アルゴリズム | 構造数の上限 |
|---|---|
| EA,EA-vc | n_pop |
| RS,BO,LAQA | tot_struc |
データ形式の詳細はデータフォーマット > 初期構造と最適化後の構造データを参照.
原子種・原子数・組成のチェック
RS,BO,LAQA,EAでは,原子種と各原子種の原子数がatypeとnatの設定に一致する必要がある.同じ組成比でも,原子数が異なる構造は使用できない.
EA-vcでは,以下の条件を確認する.
| 項目 | 条件 |
|---|---|
| 原子種 | atype以外の原子種を含まない. |
| 原子数 | 各原子種の原子数がll_natからul_natまでの範囲内にあり,構造全体で1個以上の原子を含む. |
| 組成制限 | min_compやmax_compを指定した場合は,その組成範囲を満たす. |
| 電荷中性条件 | chargeを指定した場合は,指定した価数の組合せで電荷中性条件を満たせる. |
組成制限と電荷中性条件の詳細は,組成制限および電荷中性条件を参照.
読み込み時には,mindistや空間群,セル体積の制限はチェックしない.
不足分の補完
読み込んだ構造数がtot_strucまたはn_popに満たない場合は,不足分をランダム生成する.
追加する構造には,読み込んだ構造の最後のIDに続く連番が付く.
読み込んだ構造と補完された構造を合わせて,./data/pkl_data/init_struc_data.pklと./data/init_POSCARSに保存する.
原子間距離の制限
2025年6月17日 更新
構造生成時に原子間距離の制限を行うことができる. 下記はA-B 2元系における[structure]セクションの最低原子間距離の設定例.
原子A-A,B-BおよびA-B間の最低原子間距離がそれぞれ2.0,1.8および1.5 Åに設定されている. 原子間距離がこの値よりも小さい構造は自動的に棄却される.
3元系では mindist_1,mindist_2およびmindist_3が必要になる.
mindistの行列は対称行列でなければならない.
CrySPY 1.4.0以降では,この最低原子間距離のチェックは構造最適化後にも行われる.
導入した理由は,機械学習ポテンシャルなどでは時々原子がほぼ重なるような構造が得られてしまうため.
cryspy.inで下記のようにすることでこの機能をオフにすることもできる(デフォルトはオン)
Example: Na8Cl8
Without mindist
cryspy.in
log_cryspy
PyXtalのデフォルト設定では,上の図のように原子同士が近すぎる場合があるので,mindistを設定することをすすめる. DFT計算もやりやすくなるであろう.
With mindist
cryspy.in
log_cryspy
イオン結晶のような場合には,カチオン同士,アニオン同士が離れるような設定をしておくと良い.
ジョブファイルの自動書き換え
2025年7月10日 更新
CrySPYのジョブファイルで,CrySPY_IDという文字列は自動的に構造IDに置換される.
PBSやSLURMなどのジョブスケジューラーを使う時,ジョブ名に構造IDを使うと便利である.
例えばPBSでは, #PBS -N Si_CrySPY_IDが#PBS -N Si_15に置き換わる
大抵の場合,ジョブ名は数字から始められないことが多いので,Si_のように英字から始めておくと良い.
また,バージョン1.4.2からは末尾に以下のコマンドを書く必要はなくなった.CrySPYが自動で追記する.
例えばこのようなジョブファイルを./calc_in/job_cryspy(job_cryspyはcryspy.inのjobfileで指定するファイル名)に準備しておくと
例えばIDが15の場合,CrySPYが./work/15/job_cryspyを下記のように書き換える.
5行目のCrySPY_IDが15に置換され,末尾にsedのコマンドが追記される.
MPI並列化を用いた構造生成
2023/10/21 update
CrySPYのバージョン1.1.0(1.2.3以上の利用を推奨)からは,MPIを用いたランダム構造生成が可能になった. MPIを使うにはPython環境にmpi4pyをインストールする必要がある. 当然,計算に利用するワークステーション等にMPIライブラリ(Open MPI,Intel MPI,MPICHなど)も必要である.
情報
MPIを使うのに下記が必要
- CrySPY
1.1.01.2.3 or later - mpi4py
- MPI library (Open MPI, Intel MPI, MPICH, etc.)
警告
1.1.0 <= CrySPY <=1.2.2ではバグがあった.
MPIを使ったジョブをbashやzshで実行するとき(e.g., jobcmd = zsh, jobfile = job_cryspy),MPIのジョブが流れない.
qsubやsbatchでジョブスケジューラーを使う場合は問題ない。
このバグはバージョン1.2.3で修正.
下の図にSi8原子1000構造をランダムに生成するのにかかった時間とMPIプロセス数の関係を示す.下記のセッティングを使った.
mindset_1 = 2.2のように厳し目に設定して,わざと時間がかかるようにしてある.
それぞれのプロセス数において10回ずつ実行して,平均を線で結んでいる.
Run
Enthalpy
2023/10/18
情報
Requirements:
- CrySPY 1.2.2 or later
- VASP or QE
高圧化における構造探索を行う時に, エネルギーの代わりにエンタルピーを使うことができる. VASPとQE以外はまだ未対応.
cryspy_rsltやcryspy_rslt_energy_ascのE_eV_atomの箇所がエンタルピー(eV/atom)に変わる.
下記は40 GPaにおけるSr4O4の構造探索の結果の例.
高圧下ではCsCl型構造(ID 5)がNaCl型構造よりも安定になっている.
VASP
CrySPYではOSZICARからエネルギー(エンタルピー)を読んでいる.
これはPSTRESSがINCAR_xで以下のようにセットされると自動的にエンタルピーに変わる:
cryspy.inでは特に何もする必要はない.
energy_step_flagのオプションも使用可能でエンタルピーを読み込める.
Example: CrySPY utility > examples > qe_Sr4O4_RS_pv_term
QE
エンタルピーを読むためにはcryspy.inのQEセクションでpv_term = Trueをつける:
QEの入力ファイルでもpressの設定を忘れずに:
警告
QEではenergy_step_flagオプションでエンタルピーを読むことにまだ未対応.
Interactive Mode
2025年3月6日
PCクラスタやスパコンなどの利用に慣れてない人でも使えるように,Jupyter Notebookを用いたインタラクティブモードが利用可能になった. ASEを使った構造最適化計算を想定しているので,ASE対応の汎用機械学習ポテンシャルなどが使える.
詳細な使い方はチュートリアル > インタラクティブモード(Jupyter Notebook)を見ること.
エネルギープロット
最終更新日:2026年10月16日
Automatic Energy Plot
EAおよび2元系,3元系のEA-vcでは,デフォルトで各世代の計算終了時に図が自動生成される.
| アルゴリズム | 図 | 出力ファイル |
|---|---|---|
| EA | エネルギープロット | ./data/energy_plot/energy_EA_gen_{gen}.{fig_format} |
| EA-vc(2元系,3元系) | 凸包プロット | ./data/convex_hull/conv_hull_gen_{gen}.{fig_format} |
左はEAのエネルギープロット,右はEA-vcの凸包プロットの例.いずれも第3世代終了時点の図.
ここで,genは世代数,fig_formatは画像ファイル形式(デフォルトはsvg).
マーカーサイズや画像ファイル形式などの表示設定は,cryspy.inの[visual]セクションで指定する.
詳細は入力ファイル > [visual] Sectionを参照.
EA,EA-vcの出力間隔は,[option]セクションのenergy_output_intervalで変更できる.
デフォルトは1(毎世代)で,0にするとEAのエネルギープロット,EA-vcの凸包の図と凸包からの距離のファイルの自動出力を無効にする.
EA-vcの凸包と凸包からの距離の計算自体は毎世代行われる.
入力ファイル > [option] Sectionを参照.
図や入力設定の例は,チュートリアル > EA > 解析と可視化およびチュートリアル > EA-vc > 解析と可視化を参照.
cryspy-Eplot Command
cryspy-Eplotは,探索結果の可視化や図の調整に使用するコマンド.主に以下のことができる.
- RS,EAのエネルギープロットやEA-vcの凸包を描画する.
- マーカーサイズ,軸の上限や配置,画像ファイル形式などを変更して再描画する.
- EA,EA-vcで,描画対象の世代範囲や基準となる世代を指定する.
- 組成制限による許容範囲を描画して確認する.
- 基準となる化合物組成を指定し,擬2元系や擬3元系として凸包を描画する.
使い方と設定例は,コマンド > cryspy-Eplotを参照.
電荷中性条件
最終更新日:2026年10月16日
Single-Valence Species
バージョン1.4.1からEA-vcにおいて,構造生成の際に電荷中性条件を課すことが可能になった. ランダム構造生成にも進化的操作による構造生成にも適用できる.
cryspy.inでそれぞれのatypeに対応する電荷をchargeとして入力する.
以下の例では,Li–Ca–Clのような電荷の組合せを想定し,Cu,Ag,Auにそれぞれ仮想的に+1,+2,-1の電荷を割り当てる. ASEのチュートリアルと同様に,計算が軽いASEのPure Python EMT calculatorで簡単に動作確認できるよう,Cu–Ag–Auを代わりに使用する.
cryspy.inの例:
例えばこの場合,(Cu, Ag, Au) = (4, 0, 4)や(Cu, Ag, Au) = (4, 2, 8)などの電荷中性条件を満たす構造のみ生成される.
下記のようにadd_maxやelim_maxが小さすぎると,原子を追加,削除する際に電荷中性条件を満たす原子数の組合せがゼロになって構造生成できなくなるので注意.
例えば上記の場合,add_max = 1の場合,電荷中性条件を満たす原子数の組合せはゼロ.add_max = 2の場合,(Cu, Ag, Au) = (1, 0, 1),つまりCuとAuを1個ずつ追加する組合せは(+1) + (-1) = 0で電荷中性条件を満たす.add_max = 3であれば(Cu, Ag, Au) = (1, 0, 1), (0, 1, 2)の組合せがある.
add_max,elim_max,subs_maxのデフォルト値はそれぞれ5,5および3.
Multi-Valence Species
バージョン1.5.0からは複数の価数を取りうる元素に対応した.
chargeで複数の価数を丸括弧または角括弧でまとめて指定できる.
単価の例と同様に,Fe–Oのような電荷の組合せを想定し,計算が軽いASEのPure Python EMT calculatorで簡単に動作確認できるよう,Cu–Auを代わりに使用する. Cuには仮想的に+2または+3,Auには-2の電荷を割り当てる.
cryspy.inの例:
例えば原子数が(Cu, Au) = (1, 1)では,Cuを2価とみなすことで電荷中性条件を満たす. (Cu, Au) = (2, 3)の場合は2個のCuをどちらも3価とみなすことで電荷中性条件を満たすことができる.
多価元素種を指定した場合でも,atypeとしては1つの元素種として扱われる.
したがって,ll_natとul_natは各価数ごとの原子数ではなく,その元素種の合計原子数に対する下限・上限を指定する.
また,生成される構造中でCu²⁺とCu³⁺のように価数ごとの原子種が区別されるわけではない.電荷中性条件の判定において,指定した価数の組合せのいずれかで中性化できるかを判定する.
原子数の組合せの列挙とサンプリング
v1.5.0以降では,ランダム構造生成で用いる電荷中性な原子数の組合せの決め方を,[structure]セクションのcn_modeで指定できる.chargeを指定した場合のみ有効.
cn_mode | 動作 |
|---|---|
auto | デフォルト.総当たりで調べる組合せ数がmax_cn_grid_points以下ならenumerate,上限を超える場合はsampleを使用する. |
enumerate | 電荷中性条件を満たす原子数の組合せを事前に列挙し,その中からランダムに選ぶ.総当たりで調べる組合せ数が上限を超える場合はエラーになる. |
sample | 全組合せを事前に列挙せず,電荷中性条件を満たす原子数の組合せを必要に応じて生成する. |
列挙では,電荷中性条件を使って原子数の変数を1つ消去し,残りの変数について取りうる整数値の組合せを総当たりで調べる.各組合せについて消去した変数の値を計算し,原子数が整数値であり,上下限の範囲内にあるかを確認する.max_cn_grid_pointsは,この総当たりで調べる組合せ数の上限で,デフォルトは200000000.
例えば,charge = 1 2 -1でCu,Ag,Auの原子数をそれぞれ0から10までとした場合,Agの原子数を表す変数を消去する.CuとAuの原子数をそれぞれ11通りずつ調べ,各組合せに対してAgの原子数を(Auの原子数 − Cuの原子数) / 2として計算する.総当たりで調べる組合せ数は11 × 11 = 121となる.多価の場合は,内部で価数ごとに分けた原子種について同様に数える.
原子種数や原子数の範囲が大きい場合,サンプリングによって列挙に必要な計算量とメモリ使用量を抑えられる.
enumerateでは列挙された原子数の組合せから等確率で選ぶ.sampleでは,各組合せが選ばれる確率は一様とは限らない.
組成制限との併用
バージョン1.5.0以降では,電荷中性条件に加えて,min_compとmax_compで探索する組成範囲を制限できる.
ここではSingle-Valence Speciesの例と同じく,Cu,Ag,Auに仮想的に+1,+2,-1の電荷を割り当て,組成制限を追加する.
この電荷の組合せでは,Cuの原子数 + 2 × Agの原子数 = Auの原子数となる構造が電荷中性条件を満たす. 組成制限を併用すると,この条件に加え,Cuの組成が0.0以上0.3以下,Agが0.1以上0.4以下,Auが0.4以上0.7以下である必要がある.
例えば,原子数が(Cu, Ag, Au) = (4, 0, 4)の構造は電荷中性条件を満たすが,Agの組成が0なので,上記の組成制限では生成されない. 一方,(Cu, Ag, Au) = (1, 2, 5)の構造は,電荷の合計が1 × (+1) + 2 × (+2) + 5 × (-1) = 0であり,組成(0.125, 0.25, 0.625)も許容範囲内にある.
左は組成制限による許容範囲,右は両方の条件を課した第3世代までの探索結果である.
青色の領域は組成制限のみを表す. この例では,電荷中性条件を満たす組成は三角形の組成図の直線上にあり,探索対象はその直線と青色の領域が重なる範囲内で,原子数の条件も満たすものに限られる. 組成制限の設定や許容範囲の図については,組成制限を参照.
組成制限
最終更新日:2026年10月16日
バージョン1.5.0から,EA-vcにおいて,探索する組成範囲を制限できるようになった.
cryspy.inの[structure]セクションでmin_compとmax_compを指定する.
ランダム構造生成にも進化的操作による構造生成にも適用される.
2元系・3元系に加え,4元系以上でも組成制限を利用できる.
ただし,組成の許容範囲や探索結果の図の出力は2元系・3元系に対応している.
設定方法
各原子種の組成は,その原子種の原子数をセル内の総原子数で割った値であり,0から1の範囲をとる. 例えば,原子数が(Cu, Au) = (2, 6)の場合,組成は(Cu, Au) = (0.25, 0.75)となる.
min_compは組成の下限,max_compは上限を表す.
どちらもatypeと同じ順序・要素数で指定し,境界の値も許容範囲に含まれる.
min_compのみを指定した場合,max_compは全原子種について1.0に補完される.max_compのみを指定した場合,min_compは全原子種について0.0に補完される.- 両方を省略した場合,組成制限は課されない.
ll_natとul_natは各原子種の原子数を制限するのに対し,min_compとmax_compは各原子種の原子数の割合を制限する.
これらを併用した場合,すべての条件を満たす原子数の組合せが探索対象となる.
入力変数の一覧は入力ファイル > [structure]セクションを参照.
2元系の例
cryspy.inの[structure]セクションの例:
この場合,Cuの組成は0.6以下,Auの組成は0.5以下に制限される. 2元系ではCuとAuの組成の和が1になるため,Auの上限0.5からCuの下限は0.5,Cuの上限0.6からAuの下限は0.4となる. したがって,Cuの組成が0.5以上0.6以下,Auの組成が0.4以上0.5以下となる構造のみ生成される. 例えば,原子数が(Cu, Au) = (4, 4),(3, 2),(6, 4)の構造は条件を満たすが,(2, 6),(6, 2)やCuのみ,Auのみからなる構造は条件を満たさない.
上記のmin_compとmax_compを次のように変更しても,同じ組成範囲になる.
CrySPYを初めて実行すると,組成の許容範囲が自動的にプロットされ,./data/convex_hull/composition_window_1.svgに保存される.
ファイル名の1は,この組成制限を適用する世代番号を表す.
拡張子は[visual]セクションのfig_formatに従い,デフォルトはsvgである.
最初の入力例に対応する図を以下に示す.
2元系の組成範囲の図の横軸は,convex hullの図と対応するように,[visual]セクションのaxis_orderに従って原子種を配置している.
この図の横軸はAuの組成を表す.
下側の青色の帯はCuの組成制限,上側の橙色の帯はAuの組成制限に対応し,両方を満たす範囲が濃い色と破線で示される.
この例では,Auの組成が0.4以上0.5以下の範囲が許容される.
この組成制限を用いた,第3世代までの探索結果の例を以下に示す.
この図の横軸はAuの組成を表し,青色の領域が組成の許容範囲(0.4以上0.5以下)に対応する.
3元系の例
cryspy.inの[structure]セクションの例:
上記ではinput 1が有効になっている.
input 2やinput 3を使用する場合は,input 1のmin_compとmax_compをコメントアウトし,使用する組の2行の先頭にある#を外す.
各原子種の組成の和は常に1である.
そのため,3元系の許容領域は,三角形の組成図の中で,各原子種の下限・上限をすべて満たす領域となる.
2元系と同様に,初回実行時には./data/convex_hull/composition_window_1.<fig_format>に図が自動的に保存される.
以下の3枚は,各入力についてcryspy-Eplot -cで描画した例である.
各図では上の頂点がCu,左下の頂点がAg,右下の頂点がAuに対応し,破線は指定した組成の下限・上限を表す.
左からinput 1,input 2,input 3の順に示す.
input 1
Cuの組成を0.0以上0.6以下,Agを0.2以上0.5以下,Auを0.2以上0.7以下に制限する. 青色の領域が,これらの条件をすべて満たす組成の許容範囲を表す. 例えば,原子数が(Cu, Ag, Au) = (3, 2, 5)の場合,組成は(0.3, 0.2, 0.5)となり,条件を満たす.
input 2
Cuの組成を0.4以上0.6以下,AgとAuをそれぞれ0.2以上0.4以下に制限する. この場合,許容領域は,組成(Cu, Ag, Au) = (0.6, 0.2, 0.2),(0.4, 0.4, 0.2),(0.4, 0.2, 0.4)を頂点とする三角形になる. 例えば,原子数が(Cu, Ag, Au) = (4, 3, 3)の場合,組成は(0.4, 0.3, 0.3)となり,条件を満たす.
input 3
Cuの組成の下限・上限をともに0.6とし,Agを0.2以上0.5以下,Auを0.2以上0.7以下に制限する.
Cuの組成が0.6に固定されるため,AgとAuの組成の和は0.4になる.
AgとAuの下限はそれぞれ0.2なので,許容される組成は(Cu, Ag, Au) = (0.6, 0.2, 0.2)の1点のみとなり,図では青色の点で示される.
この場合も,原子数は固定されない.
例えば,原子数が(Cu, Ag, Au) = (3, 1, 1)と(6, 2, 2)の構造は,同じ組成を持ち,ll_natとul_natの条件も満たす.
探索結果の例
input 1の組成制限を用いた,第3世代までの探索結果の例を以下に示す. 青色の領域が組成の許容範囲に対応する.
電荷中性条件との併用
chargeと組成制限を併用することもできる.
この場合,原子数制限,組成制限,電荷中性条件をすべて満たす構造が生成される.
電荷中性条件の例と同様に,Cu,Ag,Auにそれぞれ仮想的に+1,+2,-1の電荷を割り当てている. 組成はCuを0.0以上0.3以下,Agを0.1以上0.4以下,Auを0.4以上0.7以下に制限する. 例えば,原子数が(Cu, Ag, Au) = (1, 2, 5)の場合,組成は(0.125, 0.25, 0.625)となり,組成制限を満たす. 電荷の合計も1 × (+1) + 2 × (+2) + 5 × (-1) = 0となるため,電荷中性条件も満たす.
左は組成の許容範囲,右は組成制限と電荷中性条件を併用した第3世代までの探索結果の例である.
青色の領域は組成制限による許容範囲を表し,電荷中性条件は反映されない. 実際に生成される構造は,この領域内でさらに電荷中性条件を満たす組成に限られる.
許容される組成範囲の確認
2元系・3元系では,組成制限を指定してCrySPYを初めて実行すると,許容領域の図が./data/convex_hull/composition_window_1.<fig_format>に自動的に保存される.
ファイル名の番号は,組成制限を適用する世代番号を表す.
探索の途中でmin_compやmax_compを変更した場合,変更後の制約は,次の世代交代における親候補の絞り込みと構造生成から適用される.
画像は世代交代を待たず,入力変更後にCrySPYを再実行した時点で,現在の世代番号に1を加えた名前で保存される.
例えば,第3世代の計算途中で変更して再実行すると,./data/convex_hull/composition_window_4.<fig_format>が出力され,変更後の制約は第4世代を作る際に適用される.
axis_orderやfig_formatを変更した場合も,次世代の番号を用いて画像が保存される.
これらの設定に変更がなければ,毎世代画像が出力されるわけではない.
探索を開始せずに入力した組成制限による許容領域を確認するには,cryspy.inがあるディレクトリで次のコマンドを実行する.
図は./data/convex_hull/composition_window_input.<fig_format>に保存される.
fig_formatやaxis_orderは[visual]セクションで指定できる.
詳細はcryspy-Eplotおよび入力ファイル > [visual]セクションを参照.
この図はmin_compとmax_compから求めた連続的な組成領域を表す.
ll_nat・ul_natによる整数の原子数の制約や,chargeによる電荷中性条件は反映されないため,実際に生成可能な組成は図の領域の一部となる場合がある.
注意点
各原子種についてmin_compはmax_comp以下である必要がある.
また,各原子種の組成の和が1になる組合せが存在する必要があるため,min_compの合計は1以下,max_compの合計は1以上でなければならない.
連続的な組成領域が存在しても,ll_nat・ul_natの範囲内で条件を満たす整数の原子数の組合せが存在しない場合は,構造を生成できない.
chargeを併用する場合は,電荷中性条件を満たす組合せも存在するように設定すること.
探索の途中で組成制限を変更した場合,次世代の親候補およびエリート候補は,変更後の原子数制限・組成制限で絞り込まれる. 条件を厳しくしすぎて候補がすべて除外されると,探索を継続できなくなるので注意すること.
計算のスキップ
2025年7月15日
計算途中でskip
DFT計算などで電子状態がどうしても収束しない場合や,明らかに不安定な構造で途中で計算をやめたい場合,下記の手順でskipできる.
- qdelなどでジョブを止める
./work/xxx/stat_jobの3行目をskipに書き換える- 通常通りcryspyを実行
これで,この構造は切り捨てられて,計算が次へ進む.
cryspy_rslt (rslt_data.pkl) に記録された後にskip
CrySPY version 1.4.2以上
正しくない電子状態等で計算が終わった場合,エネルギーが過剰に低く出力されて,rslt_dataに記録されてしまうことがある.例えば下記の結果は,ID 198のエネルギーが低くなりすぎてしまっている.
cryspy_rslt_energy_asc
このデータを取り消してskipするためには,バージョン1.4.2から自動でインストールされるコマンドを使う.
もしskipさせたい構造が複数あるなら,複数のIDを入力する.
これでデータが更新される.
EAまたはEA-vcの場合
EAやEA-vcの場合,skipする構造がエリート構造として登録されている可能性もある.cryspy-skipコマンドを使うとelite_struc.pklとelite_fitness.pklに保存されているデータからskipする構造を取り除く.
EA-vcの凸包の再計算
EA-vcの場合,skipする構造のエネルギーが凸包計算に影響を与える場合がある.そのため,skipさせたあとは,下記コマンドで凸包の再計算を行っておく.
上記入力の10は世代を表し,10世代時点での凸包の再計算,凸包プロットを行う.
入力ファイル
入力ファイルcryspy.inの解説.
目次
入力ファイルのサブセクション
ファイル形式
CrySPYはconfigparserモジュールを用いて,入力ファイルcryspy.inを読み込む.
cryspy.inは複数のセクションから構成され,各セクションは[section]で始まり,その下にname = valueまたはname : valueの形式でパラメータを記述する.
セクション名と値は大文字・小文字を区別するが,パラメータ名は区別しない.
#または;で始まる行は読み込み時に無視され,コメントとして使用できる.
真偽値(bool)は,1,yes,true,onがTrue,0,no,false,offがFalseとして読み込まれる.
真偽値を表す文字列では,大文字・小文字を区別しない.
一部のパラメータでは,複数の値を空白区切りで指定する.
情報
詳細はconfigparserのドキュメントを参照.
メモ
セクション名:大文字・小文字を区別する.
パラメータ名:大文字・小文字を区別しない.
値:真偽値(bool)を除き,大文字・小文字を区別する.
[basic] Section
2025年3月6日 更新
| Name | Value | Default | Description |
|---|---|---|---|
algo | RS, EA, EA-vc, BO, LAQA | アルゴリズム | |
calc_code | VASP, QE, OMX, soiap, LAMMPS, ASE | 構造最適化の計算コード | |
tot_struc | int | 構造数.EAやEA-vcの場合は使用されない. | |
nstage | int | ステージ数 | |
njob | int | 同時に投入するジョブの数 | |
jobcmd | str | ジョブを投入するコマンド,例えばqsubやsbatch | |
jobfile | str | ジョブファイルのファイル名 |
[structure] Section
最終更新日:2026年10月16日
| Name | Value | Default | Description |
|---|---|---|---|
struc_mode | crystal, mol, mol_bs | crystal | 構造生成モード |
atype | atomic symbol [atomic symbol …] | 原子種. e.g. atype = Na Cl. | |
nat | int [int …] | 原子種に応じた原子数. e.g. nat = 8 8. EA-vcでは使用されない. | |
mindist (mindist_?) | float [float …] | None | 最小原子間距離の制限 [Å].詳細は機能 > 原子間距離の制限を参照. |
mindist_factor | float | 1.0 | mindistのスケーリング係数 |
vol_factor | float | 1.1 | 体積スケーリング係数 |
vol_mu | float | None | セル体積を正規分布から決める場合の平均 [ų].指定する場合はvol_sigmaも必須. |
vol_sigma | float | None | vol_muと併用する,セル体積の正規分布の標準偏差 [ų]. |
symprec | float | 0.01 | 対称性を見つける際の精度 |
spgnum | all, space group number, 0 | all | 空間群の制限.allであれば1–230の全て.0であれば空間群情報のない(対称性のない)ランダム構造生成 |
use_find_wy | bool | False | find_wyを使用して構造生成する際のオプション |
algo = EA-vcの場合
| Name | Value | Default | Description |
|---|---|---|---|
ll_nat | int [int …] | natの下限.例:ll_nat = 0 0. | |
ul_nat | int [int …] | natの上限.例:ul_nat = 8 8. | |
charge | int or grouped ints | None | 電荷中性条件を課すための各原子種の電荷.atypeと同じ順序で指定する.例:NaClではcharge = 1 -1.v1.5.0以降は,多価の原子種について複数の価数を丸括弧または角括弧でまとめて指定できる.例:atype = Fe Oに対してcharge = (2 3) -2.詳細は電荷中性条件を参照. |
cn_mode | auto, enumerate, sample | auto | (since version 1.5.0) chargeを指定した場合のみ有効.電荷中性条件を満たす原子数の組み合わせを計算するモード. |
max_cn_grid_points | int | 200_000_000 | (since version 1.5.0) chargeを指定した場合のみ有効.cn_mode = autoまたはenumerateで,電荷中性条件を使って原子数の変数を1つ消去した後,残りの変数を総当たりで調べる組合せ数の上限.この値を超える場合,autoではサンプリングに切り替わり,enumerateではエラーになる.多価の場合の数え方を含め,詳細は電荷中性条件を参照. |
min_comp | float [float …] | None | (since version 1.5.0) 組成制限を課したい時に使用.各原子種の0から1に正規化された組成の下限.atypeと同じ順序・要素数で指定する.max_compのみを指定した場合は,全原子種について0.0に補完される. |
max_comp | float [float …] | None | (since version 1.5.0) 組成制限を課したい時に使用.各原子種の0から1に正規化された組成の上限.atypeと同じ順序・要素数で指定する.min_compのみを指定した場合は,全原子種について1.0に補完される. |
struc_modeがmolまたはmol_bsの場合
EAおよびEA-vcでは,分子結晶の構造生成(struc_mode = mol,mol_bs)は未対応.
| Name | Value | Default | Description |
|---|---|---|---|
mol_file | str [str …] | 分子ファイルのパス,または分子名. | |
nmol | int [int …] | 分子数. | |
timeout_mol | float | None | (removed in version 1.5.0) 分子構造生成のタイムアウト時間. |
rot_mol | random, random_mol, random_wyckoff | random_wyckoff | mol_bsの場合のみ使用.分子の回転モード. |
nrot | int | 20 | mol_bsの場合のみ使用.分子を回転させる試行回数の上限. |
mindist_mol_bs (mindist_mol_bs_?) | float [float …] | None | mol_bsの場合のみ使用.最小分子間距離の制限 [Å]. |
mindist_mol_bs_factor | float | 1.0 | mol_bsの場合のみ使用.mindist_mol_bsのスケーリング係数. |
use_find_wy = Trueまたはspgnum = 0の場合
| Name | Value | Default | Description |
|---|---|---|---|
fwpath | str | None | find_wyを使用する場合のみ有効.find_wyの実行ファイルのパス.Noneの場合は$PATHから自動的に探す. |
minlen | float | find_wyを使用する場合,またはspgnum = 0の場合のみ有効.格子ベクトルの長さの下限 [Å]. | |
maxlen | float | find_wyを使用する場合,またはspgnum = 0の場合のみ有効.格子ベクトルの長さの上限 [Å]. | |
dangle | float | find_wyを使用する場合,またはspgnum = 0の場合のみ有効.格子角α,β,γの変化幅 [°]. | |
maxcnt | int | 50 | find_wyを使用する場合,またはspgnum = 0の場合のみ有効.原子位置を決める試行回数の上限. |
[VASP] Section
2026年10月12日 更新
VASPを使う場合は(calc_code = VASP)[VASP]セクションが必要になる.
| Name | Value | Default | Description |
|---|---|---|---|
kppvol | int [int …] | 各ステージのk点グリッド密度の目安(逆格子空間の体積1 Å⁻³あたりのk点数). | |
force_gamma | bool | False | Trueなら常にガンマ点を通るメッシュを使う. |
vasp_MAGMOM | float [float …] | None | EA-vcの時のみ使用.各元素に対応するMAGMOMの値. |
vasp_LDAUL | int [int …] | None | EA-vcの時のみ使用.各元素に対応するLDAULの値. |
vasp_LDAUU | float [float …] | None | EA-vcの時のみ使用.各元素に対応するLDAUUの値. |
vasp_LDAUJ | float [float …] | None | EA-vcの時のみ使用.各元素に対応するLDAUJの値. |
kppvol and Force Gamma
[QE] Section
QEを使う場合(calc_code = QE)は,[QE]セクションが必要.
| Name | Value | Default | Description |
|---|---|---|---|
kppvol | int [int …] | 各ステージのk点グリッド密度の目安(逆格子空間の体積1 Å⁻³あたりのk点数). | |
qe_infile | str | QEの入力ファイル名. | |
qe_outfile | str | QEの出力ファイル名. | |
pv_term | bool | False | Trueなら,全エネルギーの代わりにエンタルピーを読み込む. |
kppvol
pv_term
[OMX] Section
OpenMXを使う場合(calc_code = OMX)は,[OMX]セクションが必要.
| Name | Value | Default | Description |
|---|---|---|---|
kppvol | int [int …] | 各ステージのk点グリッド密度の目安(逆格子空間の体積1 Å⁻³あたりのk点数). | |
OMX_infile | str | OpenMXの入力ファイル名. | |
OMX_outfile | str | OpenMXの出力ファイル名. | |
ValenceElectrons | str float float [str float float …] | 各原子種のアップスピン・ダウンスピンの初期電子数. |
kppvol
ValenceElectrons
NaClでの指定例:ValenceElectrons = Na 4.5 4.5 Cl 3.5 3.5.
[soiap] Section
soiapを使う場合(calc_code = soiap)は,[soiap]セクションが必要.
| Name | Value | Default | Description |
|---|---|---|---|
soiap_infile | str | soiapの入力ファイル名. | |
soiap_outfile | str | soiapの出力ファイル名. | |
soiap_cif | str | soiapの初期構造ファイル名(CIF形式). |
[LAMMPS] Section
LAMMPSを使う場合(calc_code = LAMMPS)は,[LAMMPS]セクションが必要.
| Name | Value | Default | Description |
|---|---|---|---|
lammps_infile | str | LAMMPSの入力ファイル名. | |
lammps_outfile | str | LAMMPSの出力ファイル名. | |
lammps_potential | str [str …], None | None | ポテンシャルファイル名. |
lammps_data | str | LAMMPSのデータファイル名. |
[ASE] Section
ASEを使う場合(calc_code = ASE)は,[ASE]セクションが必要.
| Name | Value | Default | Description |
|---|---|---|---|
ase_python | str | ASEの入力ファイル名. |
[EA] Section
2026年10月12日 更新
- EAまたはEA-vcを使用する場合,または
[option]セクションでappend_struc_ea = Trueを指定する場合,[EA]セクションが必要. - CrySPY > 探索アルゴリズム > EAも参照.
EA
| Name | Value | Default | Description |
|---|---|---|---|
n_pop | int | 個体群の数(個体群の数も参照). | |
n_crsov | int | crossoverで生成する子個体の数. | |
n_perm | int | permutationで生成する子個体の数. | |
n_strain | int | strainで生成する子個体の数. | |
n_rand | int | ランダム生成する構造の数. | |
n_elite | int | エリート個体の数(自然選択も参照). | |
fit_reverse | bool | False | Falseなら最小値を探索する(適応度の評価も参照). |
n_fittest | int | 0 | 自然選択で残す個体の数.0なら全個体を残す. |
slct_func | TNM, RLT | 親個体の選択に用いる手法. | |
t_size | int | 3 | トーナメントサイズ.slct_func = TNMの場合のみ使用(トーナメント選択も参照). |
a_rlt | float | 10.0 | 線形スケーリングのパラメータ.slct_func = RLTの場合のみ使用(ルーレット選択も参照). |
b_rlt | float | 1.0 | 線形スケーリングのパラメータ.slct_func = RLTの場合のみ使用(ルーレット選択も参照). |
crs_lat | equal, random | random | 格子ベクトルの混合方法(crossover > 5. 切断された半分を交換も参照). |
nat_diff_tole | int | 4 | crossoverでの原子数の差の許容値(crossover > 6. 原子数の多い子構造を選択も参照). |
ntimes | int | 1 | permutationを行う回数. |
sigma_st | float | 0.5 | strainの標準偏差. |
maxcnt_ea | int | 50 | EAでの試行回数の上限. |
max_parent_attempts | int | 50 | (since version 1.5.0) EAで子個体1つを生成する際の親選択の試行回数の上限.最初の親選択も含む. |
maxgen_ea | int | 0 | 世代数の上限.0なら上限なし. |
emax_ea | float | None | 自然選択におけるエネルギーの上限 [eV/atom]. |
emin_ea | float | None | 自然選択におけるエネルギーの下限 [eV/atom]. |
EA-vc
- EA-vcでは,通常のEAのパラメータに加えて,以下のパラメータを使用する.
- EA-vcでは,
emax_eaとemin_eaは凸包の計算に使用する.自然選択には使用しない. - CrySPY > 探索アルゴリズム > EA-vcも参照.
- 凸包の描画については,CrySPY > チュートリアル > EA-vc > 解析と可視化も参照.
| Name | Value | Default | Description |
|---|---|---|---|
n_add | int | additionで生成する子個体の数. | |
add_max | int | 5 | (since version 1.4.1) additionで追加する原子数の上限. |
n_elim | int | eliminationで生成する子個体の数. | |
elim_max | int | 5 | (since version 1.4.1) eliminationで削除する原子数の上限. |
n_subs | int | substitutionで生成する子個体の数. | |
subs_max | int | 3 | (since version 1.4.1) substitutionで置換する原子数の上限. |
ref_energies | float [float …] | (since version 1.5.0) 形成エネルギー計算に用いる基準エネルギー [eV/atom].atypeと同じ順序で,各原子種につき1つの値を空白区切りで指定する.括弧やカンマは付けない.値の個数はatypeの原子種数と一致させる. | |
end_point | float [float …] | (deprecated since version 1.5.0) 後方互換性のために残されている.代わりにref_energiesを使用すること.単位・入力書式はref_energiesと同じ. | |
emax_ea | float | None | 凸包の計算に用いるエネルギーの上限 [eV/atom]. |
emin_ea | float | None | 凸包の計算に用いるエネルギーの下限 [eV/atom]. |
- 以下のパラメータは,v1.5.0から[visual]セクションへ移動した.
cgenはv1.5.0から非推奨.- 以下のデフォルト値はv1.4.3以前のもの.v1.5.0以降については,[visual]セクションを参照.
| Name | Value | Default | Description |
|---|---|---|---|
cgen | int | None | (in versions 1.4.1–1.4.3) 何世代目までのデータを描画するかを指定する.Noneなら最新世代まで描画する. |
show_max | float | 0.2 | 凸包の描画におけるy軸の上限(二元系),または凸包からの距離の上限(三元系). |
label_stable | bool | True | 凸包の描画時に安定組成を表示するかどうか. |
vmax | float | 0.2 | 凸包からの距離を表すカラーバーの上限. |
bottom_margin | float | 0.02 | 二元系の凸包を描画する際のy軸の下側の余白. |
fig_format | str | svg | 凸包の画像ファイル形式.svg,png,pdfから指定する. |
[BO] Section
2026年10月12日 更新
BOを使う場合(algo = BO)は,[BO]セクションが必要.
| Name | Value | Default | Description |
|---|---|---|---|
nselect_bo | int | 1度の選択で選ばれる構造の数. | |
score | TS, EI, PI | 獲得関数. | |
num_rand_basis | int | 0 | 基底関数の数.0ならガウス過程を使用する. |
cdev | float | 0.001 | 標準化に用いる標準偏差のカットオフ値. |
dscrpt | FP | 構造記述子. | |
max_select_bo | int | 0 | 選択回数の上限. |
manual_select_bo | int [int …] | None | 手動で選択する構造ID. |
emax_bo | float | None | BOにおけるエネルギーの上限. |
emin_bo | float | None | BOにおけるエネルギーの下限. |
dscrpt = FPの場合
CrySPY 1.3.0以降
fppathとfp_rminは廃止.
| Name | Value | Default | Description |
|---|---|---|---|
fp_rmax | float | 8.0 | dscrpt = FPの場合のみ使用.fingerprintにおける距離rのカットオフ上限. |
fp_npoints | int | 20 | dscrpt = FPの場合のみ使用.fingerprintにおける各原子種ペアの離散化点数. |
fp_sigma | float | 0.7 | dscrpt = FPの場合のみ使用.Gaussian smearingの標準偏差 [Å]. |
CrySPY 1.2.5以前
| Name | Value | Default | Description |
|---|---|---|---|
fppath | str | None | dscrpt = FPの場合のみ使用.cal_fingerprintの実行ファイルのパス.Noneの場合は$PATHから自動的に探す. |
fp_rmin | float | 0.5 | dscrpt = FPの場合のみ使用.fingerprintにおける距離rのカットオフ下限. |
fp_rmax | float | 5.0 | dscrpt = FPの場合のみ使用.fingerprintにおける距離rのカットオフ上限. |
fp_npoints | int | 20 | dscrpt = FPの場合のみ使用.fingerprintにおける各原子種ペアの離散化点数. |
fp_sigma | float | 1.0 | dscrpt = FPの場合のみ使用.Gaussian smearingの標準偏差 [Å]. |
[LAQA] Section
LAQA (algo = LAQA)を使う場合,[LAQA]セクションが必要.
| Name | Value | Default | Description |
|---|---|---|---|
nselect_laqa | int | 1度の選択で選ばれる構造の数. | |
wf | float | 0.1 | 力の項の重み. |
ws | float | 10.0 | ストレス項の重み. |
情報
See also Search algorithms > LAQA
情報
algo = LAQAでは[option]セクションの下記の二つは自動的にTrueになる.
- force_step_flag = True
- stress_step_flag = True
原子に働く力とストレスのデータは1ステップごとに収集される.
デフォルトでは,エネルギーと構造データは選択ごとに,各構造の最適化計算が終了した時点で収集・保存される.
1回の選択で進める最適化ステップ数は,各計算コードの入力設定(QEのnstep,VASPのNSWなど)で指定する.チュートリアルでは10ステップに設定している.
エネルギーと構造データも1ステップごとに収集・保存したい場合は,下記の設定を追加すること.
[visual] Section
2026年10月12日 更新
[visual]セクションはv1.5.0以降で使用可能.
共通
RS,EA,EA-vc共通のパラメータ.以下も参照.
| Name | Value | Default | Description |
|---|---|---|---|
ymax | float | 0.2 | RS,EAおよび二元系のEA-vcのエネルギープロットにおけるy軸の上限. |
markersize | int | 10 | 全エネルギープロットのマーカーサイズ. |
fig_format | str | svg | 画像ファイル形式.svg,png,pdfから指定する. |
EA
CrySPY > チュートリアル > EA > 解析と可視化も参照.
| Name | Value | Default | Description |
|---|---|---|---|
ref_gen | int | None | [事後解析のみ] 描画の基準となる世代.指定した世代の終了時点の状態を描画する.省略時は最新世代を使用する.plot_max_gen <= ref_genを満たす必要がある. |
plot_min_gen | int | None | [事後解析のみ] 描画対象の世代の下限.省略時は1として扱う. |
plot_max_gen | int | None | [事後解析のみ] 描画対象の世代の上限.省略時は,ref_genが指定されていればその世代まで,指定されていなければ最新世代まで描画する. |
EA-vc
凸包の描画については,CrySPY > チュートリアル > EA-vc > 解析と可視化も参照.
| Name | Value | Default | Description |
|---|---|---|---|
show_max | float | None | 三元系で表示する凸包からの距離の上限. |
label_stable | bool | True | 図に安定組成を表示するかどうか. |
vmax | float | 0.2 | 凸包からの距離を表すカラーバーの上限. |
bottom_margin | float | 0.04 | 二元系のy軸の下側の余白. |
axis_order | str | None | 軸順を指定する.二元系ではlrまたはrl,三元系ではtlrの並べ替え(lrt,rtlなど)を指定する.terminals使用時の軸順はterminal_axis_orderで指定する. |
ref_gen | int | None | [事後解析のみ] 描画の基準となる世代.指定した世代の終了時点の状態を描画する.省略時は最新世代を使用する.plot_max_gen <= ref_genを満たす必要がある. |
plot_min_gen | int | None | [事後解析のみ] 描画対象の世代の下限.省略時は1として扱う. |
plot_max_gen | int | None | [事後解析のみ] 描画対象の世代の上限.省略時は,ref_genが指定されていればその世代まで,指定されていなければ最新世代まで描画する. |
show_comp_window | bool | True | 凸包の図に許容組成範囲を表示するかどうか. |
ref_gen_comp | int | None | [事後解析のみ] 許容組成範囲を重ねて表示する際に,min_compとmax_compを取得する世代.省略時は,ref_genが指定されていればその世代,指定されていなければ最新世代を使用する. |
terminals | str str [str] | None | [事後解析のみ] cryspy-Eplotで化合物相図を構築する際の基準となる2つまたは3つの化合物組成(例:Li2O Al2O3).各化合物組成のデータが相図データに含まれている必要がある. |
terminal_axis_order | str | None | [事後解析のみ] terminals使用時の軸順.terminalsの指定順に,各化合物組成の配置を表す文字を並べる(t:上,l:左,r:右).化合物組成が2つの場合はlrまたはrl,3つの場合はtlrの並べ替え(lrt,rtlなど)を指定する.省略時は2つの場合はlr,3つの場合はtlr. |
[option] Section
最終更新日:2026年10月16日
各*_step_flagの対応コードは,インターフェース > オプション互換性を参照.
| Name | Value | Default | Description |
|---|---|---|---|
rslt_out | always, cycle, off | always | (since version 1.5.0) cryspy_rsltとcryspy_rslt_energy_ascを出力するタイミング.always:各構造の結果を記録するたびに出力.cycle:EA,EA-vcでは各世代終了時,BO,LAQAでは各選択終了時に出力(RSでは出力なし).off:これらのテキストファイルを出力しない.結果のpickleデータはいずれの設定でも保存される. |
check_mindist_opt | bool | True | Trueなら,構造最適化後に最小原子間距離の制限を確認する. |
stop_chkpt | int | 0 | 指定したチェックポイントでCrySPYを停止する. |
load_struc_flag | bool | False | Trueなら./data/pkl_data/init_struc_data.pklから初期構造を読み込む.構造IDは0始まりの連番とする.読み込み数の上限はEA/EA-vcではn_pop,それ以外ではtot_struc.上限を超えるとエラーになり,不足分はランダム生成で補完される.詳細は機能 > 初期構造の読み込みを参照. |
stop_next_struc | bool | False | Trueなら,次の構造のジョブを投入しない.計算中の構造については,次のステージのジョブを投入する. |
backup_interval | int | RS: 0 その他: 1 | (since version 1.5.0) 自動バックアップの間隔.EA,EA-vcでは世代数,BO,LAQAでは選択回数で指定する.0なら自動バックアップを無効にする. |
energy_output_interval | int | 1 | (since version 1.5.0) EAのエネルギープロット,EA-vcの凸包の図と凸包からの距離のファイルを出力する間隔(世代数).0ならこれらの自動出力を無効にする.EA-vcの凸包と凸包からの距離の計算自体は毎世代行われる. |
recalc | int [int …] | None | 再計算,または構造最適化を継続する構造IDを指定する. |
append_struc_ea | bool | False | Trueなら,EAで構造を追加する. |
energy_step_flag | bool | False | Trueなら,各最適化ステップのエネルギーデータを./data/pkl_data/energy_step_data.pklに保存する.QEではpv_term = Trueとenergy_step_flag = Trueの併用不可. |
struc_step_flag | bool | False | Trueなら,各最適化ステップの構造データを./data/pkl_data/struc_step_data.pklに保存する. |
force_step_flag | bool | False | Trueなら,各最適化ステップの原子に働く力のデータを./data/pkl_data/force_step_data.pklに保存する. |
stress_step_flag | bool | False | Trueなら,各最適化ステップのストレスデータを./data/pkl_data/stress_step_data.pklに保存する. |
seed | int | None | (since version 1.5.0) 乱数生成器のシード.0から2**32 - 1までの整数を指定する. |
Kpoint
2024年4月22日
CrySPYではk-pointのセッティングはpymatgenのpymatgen.io.vasp.Kpoints.automatic_density_by_vol関数を使って自動生成している.
以下はcryspy.inでnstage = 2の場合の例:
- stage 1: kppvol = 40
- stage 2: kppvol = 120
kppvolは逆格子空間でのÅ${}^{-3} $あたりのグリッド密度.
VASP:hexagonalとface-centeredセルではガンマ点を通るメッシュが使われ,それ以外ではMonkhorst-Packが使われる.
QE and OMX:kメッシュだけ利用,オフセットは設定しない.
kppvolの値はどれくらいが適切か?
下記を参考に.結晶構造の画像はVESTAを使用.
Primitive Cell of Diamond Si
a = b = c = 3.836 Å
| kppvol | k-mesh |
|---|---|
| 0 | [1, 1, 1] |
| 20 | [4, 4, 4] |
| 40 | [6, 6, 6] |
| 60 | [7, 7, 7] |
| 80 | [7, 7, 7] |
| 100 | [8, 8, 8] |
| 120 | [9, 9, 9] |
| 140 | [9, 9, 9] |
| 160 | [9, 9, 9] |
| 180 | [10, 10, 10] |
| 200 | [10, 10, 10] |
| 400 | [13, 13, 13] |
| 600 | [15, 15, 15] |
| 800 | [17, 17, 17] |
Conventional Cell of Diamond Si
a = b = c = 5.431 Å
| kppvol | k-mesh |
|---|---|
| 0 | [1, 1, 1] |
| 20 | [3, 3, 3] |
| 40 | [3, 3, 3] |
| 60 | [4, 4, 4] |
| 80 | [4, 4 ,4] |
| 100 | [5, 5, 5] |
| 120 | [5, 5, 5] |
| 140 | [6, 6, 6] |
| 160 | [6, 6, 6] |
| 180 | [6, 6, 6] |
| 200 | [6, 6, 6] |
| 400 | [8, 8, 8] |
| 600 | [9, 9, 9] |
| 800 | [10, 10, 10] |
Nd2Fe14B
a = b = 8.804 Å
c = 12.205 Å
| kppvol | k-mesh |
|---|---|
| 0 | [1, 1, 1] |
| 20 | [1, 1, 1] |
| 40 | [2, 2, 1] |
| 60 | [2, 2, 2] |
| 80 | [3, 3 ,2] |
| 100 | [3, 3, 2] |
| 120 | [3, 3, 2] |
| 140 | [3, 3, 2] |
| 160 | [3, 3, 2] |
| 180 | [4, 4, 2] |
| 200 | [4, 4, 3] |
| 400 | [5, 5, 3] |
| 600 | [6, 6, 4] |
| 800 | [6, 6, 4] |
データフォーマット
CrySPYのデータは./data/pkl_data/ディレクトリに保存される.pklデータ解析用のJupyterノートブック(pkl_data.ipynb)も用意されている.
目次
データフォーマットのサブセクション
Common Data
Table of Contents
Common Dataのサブセクション
Initial and Optimized Structure Data
Initial and optimized structure data are saved in init_struc_data.pkl and opt_struc_data.pkl, respectively. pymatgen library is required to analyze these data files.
Data Format
- type: dict
- key: structure ID
- value: structure data
- string form
- {0: Structure Summary …,
1: Structure Summary …,
…}
- {0: Structure Summary …,
- structure data format
How to Access
Result Data
Common result data such as space group, energies, etc. are saved in rslt_data.pkl. pandas library is required to analyze this data file.
Data Format
- type: pandas.core.frame.DataFrame
- row lable: structure ID
- string form
- see blow
How to Access
Random Search (RS)
Table of Contents
Evolutionary Algorithm (EA)
Table of Contents
Bayesian Optimization (BO)
Table of Contents
LAQA
Table of Contents
オプションデータ
目次
オプションデータのサブセクション
Energy Step Data
Energy step data is saved in energy_step_data.pkl if you set energy_step_flag = True in [option] section of cryspy.in. NumPy library is required to analyze this data file.
警告
energy_step_flag = True is currently available only with VASP, QE, and soiap.
情報
In soiap, energy_step_data is collected only if loopa == 1.
This is because other data (struc, force, and stress) are output only when loopa == 1.
See, https://github.com/nbsato/soiap/blob/master/doc/instructions.md
Data Format
- type: dict
- key: structure ID
- value: list of energy step data in each stage
- string form
- {0: [array([-3.4439912 , -3.55040935, -3.66697038, ..]), array([-4.0613393 , -4.05445631, -4.06159641, …]), …],
1: [array([-2.68209823, -2.69012487, -2.68364907, ..]), array([-2.79140967, -2.79183827, -2.79206508, …]), …],
…}
- {0: [array([-3.4439912 , -3.55040935, -3.66697038, ..]), array([-4.0613393 , -4.05445631, -4.06159641, …]), …],
- unit of energy
- eV/atom
How to Access
Structure Step Data
Structure step data is saved in struc_step_data.pkl if you set struc_step_flag = True in [option] section of cryspy.in. pymatgen library is required to analyze this data file.
警告
struc_step_flag = True is currently available only with VASP, QE, and soiap.
情報
struc_step_data includes initial structures.
For example, struc_step_data[cid][0][0] is the initial structure of ID = cid.
Data Format
- type: dict
- key: structure ID
- value: list of structure step data in each stage
- string form
- {0: [[Structure Summary …, Structure Summary, …], […], …],
1: [[Structure Summary …, Structure Summary, …], […], …],
…}
- {0: [[Structure Summary …, Structure Summary, …], […], …],
- structure data format
How to Access
Force Step Data
Force step data is saved in force_step_data.pkl if you set force_step_flag = True in [option] section of cryspy.in. NumPy library is required to analyze this data file.
警告
force_step_flag = True is currently available only with VASP, QE, and soiap.
Data Format
- type: dict
- key: structure ID
- value: list of force step data in each stage
- string form
- {0: [array([[ 0.26314927, -0.26314927, -0. ], […], …[…]]), array([[…], …, […]]), …],
1: [array([[ 0. , 0. , 0. ], […], …[…]]), array([[…], …, […]]), …],
…}
- {0: [array([[ 0.26314927, -0.26314927, -0. ], […], …[…]]), array([[…], …, […]]), …],
- unit of force
- eV/Å
How to Access
Stress Step Data
Stress step data is saved in stress_step_data.pkl if you set stress_step_flag = True in [option] section of cryspy.in. NumPy library is required to analyze this data file.
警告
stress_step_flag = True is currently available only with VASP, QE, and soiap.
Data Format
- type: dict
- key: structure ID
- value: list of stress step data in each stage
- string form
- {0: [array([[-0.16770062, 0. , 0. ], […], […]]), array([[…], ]…], […]]), …],
1: [array([[ 0.39260083, -0. , -0. ], […], […]]), array([[…], […], […]]), …],
…}
- {0: [array([[-0.16770062, 0. , 0. ], […], […]]), array([[…], ]…], […]]), …],
- unit of stress
- eV/(Å**3)
How to Access
CrySPY Utility
ダウンロードに関してはこちらのページ: Installation/CrySPY Utility.
Examples
様々なexamplesがCrySPY_utility/examples (GitHub)から入手可能.
Scripts
役に立つスクリプトが CrySPY_utility/script (GitHub)にある.
CrySPY Utilityのサブセクション
repeat_cryspy
リンク: CrySPY_utility/script/repeat_cryspy
cryspyを何度も手動で実行するのが面倒な時は,自動化スクリプトが利用できる.
この自動化スクリプトはデフォルトで5分に1回cryspyを実行する.
インターバルの時間はスクリプトの下記の部分を編集することで調整できます.
使い方
- repeat_cryspyを作業ディレクトリにコピー
- (optional) インターバルの時間を変更
- repeat_cryspyを実行
ログアウトしてもジョブを実行し続けるためには,nohupコマンドを使う.
extract_struc.py (legacy)
最終更新日:2026年10月16日
情報
CrySPY v1.5.0以降では,同じ機能をコマンド > cryspy-extract-strucとして使用できる.このページでは従来の単独スクリプトを説明する.
Link: CrySPY_utility/script/extract_struc.py
init_struc_data.pklやopt_struc_data.pklから構造ごとにcifファイルを出力するスクリプト.
ファイル出力せず,構造情報を画面にプリントすることも可能.
-iオプションでインデックス(構造ID)を(複数)指定できる.
-tオプションでエネルギーが低い順番に指定した構造数のcifファイルを出力可能.
-aオプションの場合は全ての構造をcifファイルに出力する.数が多い場合はディレクトリを作成してそこに移動してから実行したほうが良い.
-sオプションをつけると対称性(空間群)の情報を付けられる.ただし,セルや原子数が変わるので注意.
対称性の情をつける際,--toleranceオプションでtoleranceを変えられる(デフォルトは0.01).
-pオプションをつけるとファイル出力せずに,画面にプリントする.
gzipしたファイルもそのまま読み込み可能(e.g., opt_struc_data.pkl.gz).
更新履歴
- 2024 April 16: –tolerance option, gzip
- 2023 July 21: –print option
使い方
このスクリプトをPATHが通ったところにおけばpython3を省略できる
例
プリント
-pオプションは-s以外のオプションと組み合わせて使用することができる.
構造ID
以下のファイルが出力される.
7.cif,10.cif,12.cif
対称性の情報ありの場合は-sオプションをつける.
2024 April 16
toleranceパラメーター(デフォルトは0.01)を指定する場合
Top k 構造
情報
rslt_data.pkl がインプット(init_struc_data.pklかopt_struc_data.pkl)と同じディレクトリに必要.
ここでは以下のようにファイルが存在して,
- ./data/pkl_data/opt_struc_data.pkl
- ./data/pkl_data/rslt_data.pkl
cryspy_rslt_energy_ascの中身が下記のものを仮定すると
トップk (ここではk=3) の構造は下記コマンドで出力できる.
ここではrlst_data.pklは./data/pkl_data/の中に存在しなければならない.
9.cif, 16.cif, 97.cifというファイルが出力される.
-rオプションを使うと,ファイル名に順位を含めることができる.
ファイル名は1_9.cif, 2_16.cif, 3_97.cifのようになる.
対称化されたcifの場合は下記のようにする.
全構造
構造が多い場合はディレクトリを先に作った方が良い.
対称化する場合,
gzipファイル
2024 April 16
gzipされたファイル(拡張子が.gz)も読み込み可能:
print_pkl.py (legacy)
最終更新日:2026年10月16日
情報
CrySPY v1.5.0以降では,pickleファイルの確認にコマンド > cryspy-printを使用できる.このページでは従来の単独スクリプトを説明する.表示内容はコマンド版と一部異なる.
data/pkl_data/にあるピクル化されたファイルをさっとチェックしたい時にprint_pkl.pyを使うと便利.
Usage
PATHが通っているところにこのpythonスクリプトを置いているならpython3は省略可能.
Example
pos2pkl.py
2023年7月23日更新
あらかじめ用意した構造のテキストデータをinit_struc_data.pklに変換するスクリプト.
入力のデフォルトはinit_POSCARS形式.オプションでPOSCARやcifファイルなどのシングル構造データも変換可能.
出力はinit_struc_data.pkl.
すでに存在するinit_struc_data.pklに構造データを追加することもできる.
構造IDは考慮されず,新しく割り振られる.
原子数が異なる場合はエラーが出る.
init_struc_data.pklはCrySPYでシミュレーション開始時にロードすることが可能.
-fオプションで原子種の削除とソートが可能.このオプションを指定しないとpymatgenが勝手に電気陰性度の順番で並び替えるので注意!
使い方
例
init_POSCARS –> init_struc_data.pkl
CrySPYで構造生成後に出力されるinit_POSCARSをスパコン等の別のマシンに移すような場合に使える.複数のファイルを変換可能.
pos2pkl.pyをPATHが通ったところにおけば,python3は省略可能.
複数の入力ファイルの場合.
カレントディレクトリにすでにinit_struc_data.pklが存在し,それに追加する場合.
POSCAR or cif –> init_struc_data.pkl
POSCARファイルやcifファイル等の構造が一つだけのデータも変換可能.-s/--singleオプションが必要.
init_POSCARS, POSCAR –> init_struc_data.pkl
警告
下記は間違い.init_POSCARSもシングル構造として取り扱われてしまう.
Filter (Remove and Sort)
次のような組成のcifファイルを考える:Sr8 Co8 O20 X4.これはダミー原子(X4)を4原子含んでいる.
-f/--filterオプションは原子種を削除したり,ソートするのに使える.
cryspy.inのatypeと同じように指定する.
extract_struc.pyを使えば,
init_struc_data.pklにどのように登録されたのか確認できる.
-fオプションでソートもできる.
kpt_check.py
kpt_check.pyはkppvolを入力した際にkメッシュがどれくらいになるかをチェックすることができる.
POSCAR,CONTCAR,およびinit_struc_data.pklが読み込み可能.
pymatgenライブラリが必要.
初期構造を生成後に,kppvolの値をどれくらいにしたら良いか色々試すことができる.(下記の最後の例を参照)
使い方
このスクリプトをPATHが通ったところにおけばpython3を省略できる
例
POSCARとkppvol
KPOINTSファイルの生成
POSCARおよびCONTCARを入力とする際は,-wオプションを使用することでKPOINTSファイルを生成できる.
init_struc_data.pklとkppvol
init_struc_data.pklの初期構造データに任意のkppvolの値を適用した場合のkメッシュを調べることが可能.
デフォルト設定でははじめの5構造をチェックする.
-nを使うとチェックする構造数も変えられる.
FAQ
目次
FAQのサブセクション
シミュレーションの途中でnjobを変えることはできますか?
2024年5月7日
シミュレーションの途中でnjobを変えることはできますか?
いつでも変えられます.
下記はnjobを減らした時の例です.
警告
CriSPYのバージョンが1.2.3以下ではバグがあるので,njobを減らすのは避けること.
今,njob = 4でID 0, 1, 2, 3のジョブが流れているところで,njobを4から2に変更したとする.
njobを2に減らしたので,ID 0, 1だけチェックして,ID 2, 3は無視.
ID 1, 2のジョブが終わったので,次の2つのジョブ(ID 2, 3)をチェックしに行く.




























