共通事項

SolverAlgorithm に共通する事柄について説明します。

odatse.Info

入力パラメータを扱うためのクラスです。 インスタンス変数として次の4つの dict を持ちます。

  • base

    • ディレクトリ情報など、プログラム全体で共通するパラメータ

  • solver

    • Solver が用いる入力パラメータ

  • algorithm

    • Algorithm が用いる入力パラメータ

  • runner

    • Runner が用いる入力パラメータ

Infobase, 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

RunnerAlgorithmSolver とをつなげるためのクラスです。 コンストラクタ引数として 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 セクションを参照してください。