共通事項¶
Solver と Algorithm に共通する事柄について説明します。
odatse.Info¶
入力パラメータを扱うためのクラスです。
インスタンス変数として次の4つの dict を持ちます。
baseディレクトリ情報など、プログラム全体で共通するパラメータ
solverSolverが用いる入力パラメータ
algorithmAlgorithmが用いる入力パラメータ
runnerRunnerが用いる入力パラメータ
Info は base, solver, algorithm, runner の4つのキー(省略可)を持つ dict を渡して初期化できます。また、クラスメソッド from_file に TOML形式の入力ファイルへのパスを渡して作成することもできます。
base について¶
要素として計算のルートディレクトリ root_dir と出力のルートディレクトリ output_dir が自動で設定されます
ルートディレクトリ
root_dirデフォルトはカレントディレクトリ
"."です絶対パスに変換されたものがあらためて
root_dirに設定されます先頭の
~はホームディレクトリに展開されます具体的には次のコードが実行されます
p = pathlib.Path(base.get("root_dir", ".")) base["root_dir"] = p.expanduser().absolute()
出力ディレクトリ
output_dir先頭の
~はホームディレクトリに展開されます絶対パスが設定されていた場合はそのまま設定されます
相対パスが設定されていた場合、
root_dirを起点とした相対パスとして解釈されますデフォルトは
"."、つまりroot_dirと同一ディレクトリです具体的には次のコードが実行されます
p = pathlib.Path(base.get("work_dir", ".")) p = p.expanduser() base["work_dir"] = base["root_dir"] / p
odatse.Runner¶
Runner は Algorithm と Solver とをつなげるためのクラスです。
コンストラクタ引数として Solver のインスタンス、 Info のインスタンス、パラメータの変換を記述する Mapping のインスタンス、制約条件を記述する Limitation のインスタンスを取ります。
Mapping のインスタンスを省略した場合は変換しない TrivialMapping が仮定されます。
Limitation のインスタンスを省略した場合は、制約を課さない Unlimited が仮定されます。
submit(self, x: np.ndarray, args: Tuple[int,int]) -> float メソッドは、探索パラメータ x とオプションパラメータ args に対してソルバーを実行し、結果として目的関数の値 f(x) を返します。
関数を評価する際に Limitation のインスタンスを用いて探索パラメータ x が制約を満たしているかを確認します。次に Mapping のインスタンスを用いて x から実際にソルバーが使う入力 y = mapping(x) を得ます。
その他、 Runner で使われる info の詳細は 入力ファイル を参照してください。
odatse.Mapping¶
Mapping は逆問題解析アルゴリズムの探索パラメータから順問題ソルバーの変数へのマッピングを記述するクラスです。 __call__(self, x: np.ndarray) -> np.ndarray メソッドを持つ関数オブジェクトとして定義します。
現在は自明な変換 TrivialMapping とアフィン写像 Affine のクラスが定義されています。
TrivialMapping¶
自明なマッピング \(x\to x\) (変換しない)を与えるクラスです。 Runner クラスの引数のデフォルト値となります。
Affine¶
アフィン変換 \(x \to y=Ax+b\) を与えるクラスです。
要素 A, b はコンストラクタの引数に指定するか、 from_dict クラスメソッドに辞書の形式で与えます。
ODAT-SEの入力ファイルに指定する場合、パラメータの指定方法は「入力ファイル」の mapping セクションを参照してください。
odatse.Limitation¶
Limitation は逆問題解析アルゴリズムで探索する \(N\) 次元のパラメータ \(x\) に課す制約条件を与えるクラスです。 judge(self, x: np.ndarray) -> bool のメソッドを持つクラスとして定義します。
現在は制約なし Unlimited と線形不等式制約 Inequality のクラスが定義されています。
Unlimited¶
制約条件を課さないというクラスです。 judge メソッドは常に True を返します。
Runner クラスの引数のデフォルト値となります。
Inequality¶
\(N\) 次元の探索パラメータ \(x\) に対して、 \(M\) 行 \(N\) 列の行列 \(A\) と \(M\) 次元のベクトル \(b\) で与えられる \(M\) 個の制約条件 \(A x + b > 0\) を課すクラスです。
要素 A, b はコンストラクタの引数に指定するか、 from_dict クラスメソッドに辞書の形式で与えます。
ODAT-SEの入力ファイルに指定する場合、パラメータの指定方法は「入力ファイル」の limitation セクションを参照してください。