3.3 実行サンプル
開発環境に同梱されているuseSolveQP.cpp
はsolveLP
,solveQP
を利用するサンプルです.線形計画問題なら,solveLP
を,二次計画問題なら,solveQP
を呼びます.
- 注意:
以降では,サンプルを用いた実行について書かれています.読み進む前に,まず,お使いのコンパイラを確認してください.サンプルは
%NUOPT%\samples\app
(
%NUOPT%
はNuorium Optimizerのインストール場所,たとえばC:\Program Files\Mathematical Systems Inc\nuopt
)にある
app_VS2015.zip
(VS2015用)app_VS2017.zip
(VS2017用)app_VS2019.zip
(VS2019用)app_VS2022.zip
(VS2022用)
のうち,お使いのコンパイラに整合するものを展開してご利用ください.なお,マシンの設定によってはzipファイルのある場所に書き込み権限が無いため展開できないことがございます.この場合は書き込み権限があるフォルダに展開してください.また,コンパイラとプロジェクトが整合していない場合,リンクエラーやコンパイルエラーが生じてしまいます.
nuoptvcapp
のプロジェクトuseSolveQP
がこのインタフェースを用いてLP,QPを解くプログラム例です.
useSolveQP.cpp
はsolveLP
,solveQP
を利用するサンプルで,1つのmain
関数のみから成ります.ロードモジュールの引数名で与えられたファイルから問題のデータを読み込み,それをsolveLP
,solveQP
に渡します.二次の項がなく,線形計画問題ならばsolveLP
を,あればsolveQP
を呼びます.以下はそのプログラムの抜粋です.
// // solveQPの利用例 // #include "nuoIf.h" // 必須. int main(int argc, char** argv) { int n; int m; ifstream inputFile(argv[1]); // ロードモジュールの引数をファイル名とする inputFile >> n >> m ; (中略) nuoptResult* qpres = 0; nuoptParam myParam; if (nQelem || nQCelem) { // 2次の係数があるならsolveQPをコール qpres = solveQP(&myParam ,n, m ,minimize ,x0 ,bL, bU, ibL, ibU ,cL, cU, icL, icU ,objL ,nAelem, irowA, jcolA, a ,nQelem, irowQ, jcolQ, q ,nQCelem, ifunQC, irowQC, jcolQC, qc ,ivtype, pri, dir, until, upc, dpc ); } else {// 2次の係数がないのならsolveLPをコール qpres = solveLP(&myParam ,n, m ,minimize ,x0 ,bL, bU, ibL, ibU ,cL, cU, icL, icU ,objL ,nAelem, irowA, jcolA, a ,ivtype, pri, dir, until, upc, dpc ); } if (qpres->errorCode()) { printf("error in solveQP code = %d, message = %s\n" ,qpres->errorCode(), qpres->errorMessage()); fflush(stdout); exit(1); } else { printf("optimalValue = %17.10e\n", qpres->optValue()); printf("X:\n"); for (i = 0 ; i < n ; ++i) { printf("[%3d] %10.3e ", i + 1, qpres->VarVal(i)); if ((i + 1) % 4 == 0) { printf("\n"); } } printf("\n"); printf("F:\n"); for (i = 0; i < m; ++i) { printf("[%3d] %10.3e ", i + 1, qpres->FuncVal(i)); if ((i + 1) % 4 == 0) { printf("\n"); } } printf("\n"); } delete qpres; delete [] bL; delete [] bU; delete [] ibL; delete [] ibU; (後略) }
次のようなナップサック問題を考えます.
これをsolveLP
で解くには,一般の線形計画問題:
の形にこの問題を表現する,すなわち
とすればよいことがわかります.useSolveQP.cpp
の入力ファイルとしてこのデータを表現したのが(Nuorium Optimizerのインストール場所)\samples\app
にあるzipファイルを解凍した中にあるファイル
-
useSolveQP\knapsack.txt
です.
上に戻る