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_WORLDmpi4pyの 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_stepsself.checkpoint_intervalself.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) -> Dictprepare,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のファイルに書き出します。