Algorithm の定義¶
Algorithm クラスは py2dmat.algorithm.AlgorithmBase を継承したクラスとして定義します。
import py2dmat
class Algorithm(py2dmat.algorithm.AlgorithmBase):
pass
AlgorithmBase¶
AlgorithmBase クラスは次のメソッドを提供します。
__init__(self, info: py2dmat.Info, runner: py2dmat.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"という名前で定義されます
prepare(self) -> None最適化アルゴリズムの前処理をします
self.run()の前に実行する必要があります
run(self) -> None最適化アルゴリズムを実行します
self.proc_dirに移動し、self._run()を実行した後、元のディレクトリに戻ります
post(self) -> None最適化結果のファイル出力など、後処理を行います
self.output_dirに移動し、self._post()を実行した後、元のディレクトリに戻りますself.run()のあとに実行する必要があります
main(self) -> Noneprepare,run,postを順番に実行しますそれぞれの関数でかかった時間を計測し、結果をファイル出力します
_read_param(self, info: py2dmat.Info) -> Tuple[np.ndarray, np.ndarray, np.ndarray, np.ndarray]連続なパラメータ空間を定義するためのヘルパーメソッドです
info.algorithm["param"]から探索パラメータの初期値や最小値、最大値、単位を取得します詳細は min_search の入力ファイル を参照してください
_mesh_grid(self, info: py2dmat.Info, split: bool = False) -> Tuple[np.ndarray, np.ndarray]離散的なパラメータ空間を定義するためのヘルパーメソッドです
info.algorithm["param"]を読み取り次を返します:D次元の候補点N個からなる集合 (NxD次元の行列として)N個の候補点のID(index)
splitがTrueの場合、候補点集合は分割され各MPI ランクに配られます詳細は mapper の入力ファイル を参照してください
Algorithm¶
Algorithm は少なくとも次のメソッドを定義しなければなりません。
__init__(self, info: py2dmat.Info, runner: py2dmat.Runner = None)引数はそのまま基底クラスのコンストラクタに転送してください
super().__init__(info=info, runner=runner)
入力パラメータである
infoから必要な設定を読み取り、保存してください
_prepare(self) -> None最適化アルゴリズムの前処理を記述します
_run(self) -> None最適化アルゴリズムを記述します
探索パラメータ
xから対応する目的関数の値f(x)を得る方法message = py2dmat.Message(x, step, set) fx = self.runner.submit(message)
_post(self) -> None最適化アルゴリズムの後処理を記述します