Algorithm
の定義¶
Algorithm
クラスは odatse.algorithm.AlgorithmBase
を継承したクラスとして定義します。
import odatse
class Algorithm(odatse.algorithm.AlgorithmBase):
pass
AlgorithmBase
¶
AlgorithmBase
クラスは次のメソッドを提供します。
__init__(self, info: odatse.Info, runner: odatse.Runner = None)
info
からAlgorithm
共通の入力パラメータを読み取り、次のインスタンス変数を設定します。self.mpicomm: Optional[MPI.Comm]
:MPI.COMM_WORLD
mpi4py
の import に失敗した場合、None
が設定されます
self.mpisize: int
: MPIプロセス数mpi4py
の import に失敗した場合、1
が設定されます
self.mpirank: int
: MPIランクmpi4py
の import に失敗した場合、0
が設定されます
self.rng: np.random.Generator
: 擬似乱数生成器擬似乱数の種について、詳細は 入力パラメータの [algorithm] セクション を参照してください
self.dimension: int
: 探索パラメータ空間の次元self.label_list: List[str]
: 各パラメータの名前self.root_dir: pathlib.Path
: ルートディレクトリinfo.base["root_dir"]
self.output_dir: pathlib.Path
: 出力ファイルを書き出すディレクトリinfo.base["root_dir"]
self.proc_dir: pathlib.Path
: プロセスごとの作業用ディレクトリself.output_dir / str(self.mpirank)
ディレクトリが存在しない場合、自動的に作成されます
各プロセスで最適化アルゴリズムはこのディレクトリで実行されます
self.timer: Dict[str, Dict]
: 実行時間を保存するための辞書空の辞書が3つ、
"prepare"
,"run"
,"post"
という名前で定義されます
self.checkpoint
: チェックポイント機能を有効/無効にするself.checkpoint_steps
self.checkpoint_interval
self.checkpoint_file
チェックポイント機能に関するパラメータが設定されます
prepare(self) -> None
最適化アルゴリズムの前処理をします
self.run()
の前に実行する必要があります
run(self) -> None
最適化アルゴリズムを実行します
以下の処理を行います
self.proc_dir
に移動するself.runner.prepare()
を実行するself._run()
を実行するself.runner.post()
を実行する元のディレクトリに戻る
self.prepare()
の後に実行する必要があります
post(self) -> Dict
最適化結果のファイル出力など、後処理を行います
self.output_dir
に移動し、self._post()
を実行した後、元のディレクトリに戻りますself.run()
のあとに実行する必要があります
main(self, run_mode) -> Dict
prepare
,run
,post
を順番に実行しますそれぞれの関数でかかった時間を計測し、結果をファイル出力します
実行モードを文字列型の引数で受け取ります。デフォルト値は
initialize
です。"initialize"
: 最初から実行"resume"
: 中断した状態から再実行"continue"
: 終了時の状態から継続実行
乱数の初期化を指示する場合は、
"-resetrand"
が追加されます。"continue"
の動作はアルゴリズムによって変わります。探索の結果を辞書形式で返します
Algorithm
¶
Algorithm
は少なくとも次のメソッドを定義しなければなりません。
__init__(self, info: odatse.Info, runner: odatse.Runner = None, domain = None)
info
およびrunner
引数はそのまま基底クラスのコンストラクタに転送してくださいsuper().__init__(info=info, runner=runner)
入力パラメータである
info
から必要な設定を読み取り、保存してくださいdomain
が指定されている場合は、探索領域をdomain
から取得します。 指定されていない場合はodatse.domain.Region(info)
(探索領域が連続的な場合) またはodatse.domain.MeshGrid(info)
(離散的な場合) を用いてinfo
から作成します。
_prepare(self) -> None
最適化アルゴリズムの前処理を記述します
_run(self) -> None
最適化アルゴリズムを記述します
探索パラメータ
x
から対応する目的関数の値f(x)
を得るには、次のように Runner クラスのメソッドを呼び出します。args = (step, set) fx = self.runner.submit(x, args)
_post(self) -> Dict
最適化アルゴリズムの後処理を記述します
探索の結果を辞書形式で返します
Domain
の定義¶
探索領域を記述する 2種類のクラスが用意されています。
Region
クラス¶
連続的なパラメータ空間を定義するためのヘルパークラスです。
コンストラクタ引数は
Info
またはparam=
にdict形式のパラメータを取ります。Info
型の引数の場合、Info.algorithm.param
から探索範囲の最小値・最大値・単位や初期値を取得します。dict 型の引数の場合は
Info.algorithm.param
相当の内容を辞書形式で受け取ります。詳細は min_search の入力ファイル を参照してください。
initialize(self, rng, limitation, num_walkers)
を呼んで初期値の設定を行います。引数は乱数発生器rng
, 制約条件limitation
, walker の数num_walkers
です。
MeshGrid
クラス¶
離散的的なパラメータ空間を定義するためのヘルパークラスです。
コンストラクタ引数は
Info
またはparam=
にdict形式のパラメータを取ります。Info
型の引数の場合、Info.algorithm.param
から探索範囲の最小値・最大値・単位や初期値を取得します。dict 型の引数の場合は
Info.algorithm.param
相当の内容を辞書形式で受け取ります。詳細は mapper の入力ファイル を参照してください
do_split(self)
メソッドは、候補点の集合を分割して各MPIランクに配分します。入出力について
from_file(cls, path)
クラスメソッドは、path
からメッシュデータを読み込んでMeshGrid
クラスのインスタンスを作成します。store_file(self, path)
メソッドは、メッシュの情報をpath
のファイルに書き出します。