9.3 最適化計算結果result
最適化計算の結果はresultというオブジェクトが保持しています.以下は,resultが保有する情報の一覧です.
名称 | 型 | 意味 |
---|---|---|
nvars |
int |
変数の数 |
nfunc |
int |
関数の数 |
iters |
int |
内点法の反復回数 |
fevals |
int |
内点法の関数評価回数 |
optValue |
double |
目的関数値 |
tolerance |
double |
内点法の収束判定値 |
residual |
double |
内点法の解における最適性条件の残差 |
elapseTime |
double |
所要計算時間 |
peakPhysicalMemoryUsed |
size_t |
物理メモリの最大使用量 |
peakVirtualMemoryUsed |
size_t |
仮想メモリの最大使用量 |
hardPenalty |
double |
制約充足問題ソルバWCSPによるハードペナルティ |
semiHardPenalty |
double |
制約充足問題ソルバWCSPによるセミハードペナルティ |
softPenalty |
double |
制約充足問題ソルバWCSPによるソフトペナルティ |
errorCode |
int |
終了時ステータス (成功時:0,失敗時:エラー番号) エラー番号はNuorium Optimizerマニュアルの付録に記載のものに従います |
simpleErrorCode |
int |
終了時ステータス (成功時:0,失敗時:エラー番号) エラー番号は付録A.1のものに従います |
isFeasible() |
bool |
実行可能解が得られているかどうか (true:得られている,false:得られていない) |
getBoundInfeasibility() |
double |
上下界違反量 |
getConstraintInfeasibility() |
double |
制約式違反量 |
getFactorizationCount() |
int |
内点法の行列分解の回数 |
getGap() |
double |
ギャップ値 |
getPartialProblemCount() |
long long int |
部分問題数 |
getPenalty() |
double |
ペナルティ値 |
getRandomSeed() |
int |
シード値 |
getSimplexPivotCount() |
long long int |
単体法の反復回数 |
以下は最適化計算結果を出力するモデルファイルの記述例です.
Variable x, y; Objective f(type = minimize); f = 2 * x + 3 * y; x + 2 * y == 15; x >= 0; y >= 0; solve(); simple_printf("関数の数 %d\n", result.nfunc); simple_printf("内点法の反復回数 %d\n", result.iters); simple_printf("関数評価回数 %d\n", result.fevals); simple_printf("目的関数値 %e\n", result.optValue); simple_printf("収束判定条件 %e\n", result.tolerance); simple_printf("最適性条件残差 %e\n", result.residual); simple_printf("所要計算時間 %d\n", result.elapseTime); simple_printf("終了時ステータス %d\n", result.errorCode);
以下出力例です.
関数の数 2 内点法の反復回数 5 関数評価回数 8 目的関数値 2.250000e+001 収束判定条件 1.000000e-008 最適性条件残差 3.978422e-008 所要計算時間 0 終了時ステータス 0
resultオブジェクトには,アルゴリズム毎に有効なメソッドもあります.
最適化計算を行った場合,実行可能解が得られたかどうかを表すisFeasible()
関数を使用できます.返り値はbool型です.
以下記述例です.
Variable x; Variable y; Variable z; Variable s1; Variable s2; Variable s3; IntegerVariable delta1(type = binary); IntegerVariable delta2(type = binary); IntegerVariable delta3(type = binary); Parameter M = 10000; Objective cost(type = minimize); cost = delta1 + delta2 + delta3; x + y + z == 12 + s1; 5 * x + 5 * y + 5 * z == 60 + s2; 0 <= s1 <= 1.0e-3; 0 <= s2 <= 1.0e-3; -M * delta1 <= x <= M * delta1; -M * delta2 <= y <= M * delta2; -M * delta3 <= z <= M * delta3; options.plevel = 0; options.maxnod = 1; options.method = "simplex"; solve(); simple_printf("feasible = %d\n", result.isFeasible());
以下は,上記例のsimple_printf
関数における出力例です.
feasible = 1
制約充足問題ソルバWCSPで最適化計算を行った場合,ハード制約・セミハード制約・ソフト制約のペナルティをhardPenalty
,semiHardPenalty
,softPenalty
に保持します.
以下記述例です.
IntegerVariable x(type = binary); x - 2 >= 0; options.maxtim = 0.1; options.method = "wcsp"; solve(); simple_printf("hard penalty = %f\n", result.hardPenalty);
以下は,上記例のsimple_printf
関数における出力例です.
hard penalty = 1.000000
上に戻る