SIMPLEの文法
本稿について
- Nuorium Optimizer マニュアル SIMPLEチュートリアルより文法に関する記載を抜粋したメモです。
SIMPLEとは
- SIMPLEはNTTデータ数理システムが提供している数理最適化パッケージNuorium Optimizer(旧称:Numerical Optimizer)で使用する言語です。
- C言語と似ている箇所もありますので、本稿ではSIMPLEの特徴的な箇所を記載します。
変数の宣言:Variable
-
Variable x;
で変数xを宣言します。 - 変数は使用する前に宣言する必要があります。
- 変数の名前を記載することができます。
Variable x(name = "~~~");
を~~~の箇所に記載します。 - name = "..."は省略可能。但し出力などで使用されるので記述が推奨されます。
- Variableの代わりにIntegerVariableと記載すると整数変数の宣言になります。
定数の宣言:Parameter
- 定数は外部のデータファイル(*.dat)から読み込みます。
-
Parameter p1(name="パラメータ1");
で定数p1を宣言します。 - このときデータファイルには
"パラメータ1" = 1234;
等と記載します。
目的関数の宣言:Objective
- Objectiveで目的関数の宣言です。目的関数についての説明は最適化の説明を参照してください。
-
Objective f(type = minimize, name = "…");
と記載すると目的関数fを最小化する指示となります。 -
type = minimize
で目的関数を最小化、type = maximize
で目的関数を最大化です。 -
name = "…"
の箇所は目的関数の名前を記載します。(Variableと同様。) - 目的関数の定義は
f = 3 * x + 1;
のように別の文に記載します。
制約条件の記載
- 関係演算子を用いて、制約条件を示す式を記載します。
-
x >= 0;
と書けば、制約条件: x≧0を意味します。
集合:Set
- Setで集合の宣言をします。例えばs1={0, 1}を宣言するときは下記の記載となります。
Set s1 = (name="集合1");
s1 = "0 1";
添え字:Element
- ここで、添え字i∈s1を宣言するにはElementを使って下記のように記載します。
Element i(set = s1);
- 添え字を用いると下記のような式の記載ができます。
Parameter p1(name = "パラメータ集合1", index = i);
- このときのデータファイルの書き方は下記のようになります。
"パラメータ集合1" = [0] 123 [1] 345;
式の宣言:Expression
-
Expression e(name = "式の名前")
で式の宣言となります。 - Variableと同様にnameで名前、indexで添え字を指定します。
求解:solve()
solve();と記載すると、最適化の計算を実施します。モデルの記述→solve→結果出力の順で記述します。
結果出力
-
変数.val.print();
で変数の値を出力。 -
x[i].val.print();
で集合の要素の値を出力。
simple_printf();
-
simple_printf();
でC言語のprintf形式で出力できる。 - 書式指定は
simple_printf(出力書式指定, 出力対象1, 出力対象2,…)
。 - 出力対象には集合以外を指定する。
デバッグ出力
-
showSystem();
を任意の箇所に挿入すると途中経過を出力して確認することができます。
コメント
-
//
から行末がコメント。
その他の注意点
- 半角スペースは自由に入れてよい。(等号/不等号の間はNG)
- name = の引数はダブルクォート"で囲むこと。
- minimize、maximizeはダブルクォート"で囲まない。
- nameとtypeのように複数の設定を行うときはカンマで区切ること。
- nameやtypeを設定する順番は変更可能。
- 等式付不等号<=と>=のみOK。等式なし不等号<と>はNG。