3.4 実行例
さて,サンプルコードuseSolveQP
の実行モジュールを作成して実行してみましょう.
プロジェクト「useSolveQP」を選択後,VC++のメニューの「プロジェクト」から「スタートアッププロジェクトに設定」を選び,プロジェクトを選択します.なおuseSolveQP
の構成は「Release」に設定してあります.
続いて「ビルド」メニューから「useSolveQPのビルド」:
を選択するとuseSolveQP.cpp
がコンパイル,Nuorium Optimizerのライブラリとリンクされて,実行モジュールのuseSolveQP.exe
が作成されます.引数としてknapsack.txt
を与えるように「プロジェクト」→「プロパティ」→「構成プロパティ」→「デバッグ」の項目で,「コマンド引数」に「knapsack.txt」と入力します.
つづいて「デバッグ」メニューから
と実行すると,実行経過表示ウィンドウが現れ,その中に以下のような出力が得られます.solveLP
がコールされて出力が成されます.
[About Nuorium Optimizer] Nuorium Optimizer x.x.x (NLP/LP/IP/SDP module) <with META-HEURISTICS engine "wcsp"/"rcpsp"> <with Netlib BLAS> , Copyright (C) 1991 NTT DATA Mathematical Systems Inc. [Problem and Algorithm] PROBLEM_NAME anon.LP NUMBER_OF_VARIABLES 10 (#INTEGER/DISCRETE) 10 NUMBER_OF_FUNCTIONS 2 PROBLEM_TYPE MAXIMIZATION METHOD SIMPLEX [Progress] <preprocess begin>.........<preprocess end> <iteration begin> Coefficient Statistics (after scaling) Coefficient range [min,max] : [4.47e-01,3.04e+00] RHS and bounds [min,max] : [1.00e+00,5.41e+00] Objective [min,max] : [5.67e-02,2.52e+00] #sol upper lower gap(%) time(s) list mem(MiB) #1 -1e+50 -0 100.000 0.0 0 10 sol: init <<wcsp tabu search begin>> number of column singleton : 0 number of column selection : 0 Modify coefficients <preprocess begin>..<preprocess end> preprocessing time: 0.002(s) <iteration begin> --- TryCount = 1 --- # random seed = 1 (hard/soft) penalty= 19/194, time= 0.00(s) <greedyupdate begin>.........<greedyupdate end> greedyupdate time= 0(s) --- End Phase-I iteration --- (hard/soft) penalty= 0/273, time= 0.00(s), iteration= 2 (hard/soft) penalty= 0/217, time= 0.00(s), iteration= 53 (hard/soft) penalty= 0/173, time= 0.00(s), iteration= 60 (hard/soft) penalty= 0/126, time= 0.00(s), iteration= 61 (hard/soft) penalty= 0/124, time= 0.01(s), iteration= 70 (hard/soft) penalty= 0/112, time= 0.01(s), iteration= 71 (hard/soft) penalty= 0/111, time= 0.01(s), iteration= 590 # (hard/soft) penalty= 0/111 # cpu time = 0.01/0.01(s) # iteration = 590/1000 <iteration end> # (hard/soft) = 0/111 # iteration = 1000 # time = 0.01 (s), succ = 1 <<wcsp tabu search end>> #2 -1e+50 242 100.000 0.0 0 10 sol: wcsp <iteration end> [Result] STATUS OPTIMAL VALUE_OF_OBJECTIVE 242 SIMPLEX_PIVOT_COUNT 0 PARTIAL_PROBLEM_COUNT 1 ELAPSED_TIME(sec.) 0.03 SOLUTION_FILE solver.sol optimalValue = 2.4200000000e+02 X: [ 1] 1.000e+00 [ 2] 0.000e+00 [ 3] 0.000e+00 [ 4] 0.000e+00 [ 5] 0.000e+00 [ 6] 1.000e+00 [ 7] 1.000e+00 [ 8] 1.000e+00 [ 9] 0.000e+00 [ 10] 1.000e+00 F: [ 1] 1.210e+02 C:\app\x64\Release\useSolveQP.exe (プロセス 17024) は、コード 0 を伴って終了しました。 このウィンドウを閉じるには、任意のキーを押してください . . .
上に挙げた内容はNuorium Optimizerからの求解に関する出力です.問題の変数の数(NUMBER_OF_VARIABLES
)や目的関数の値(VALUE_OF_OBJECTIVE
)を知ることができます.Nuorium Optimizerの標準出力の内容については「Nuorium Optimizerマニュアル」(別冊)をご覧ください.
Nuorium Optimizerの出力を抑制するには,
nuoptParam myParam; // 宣言
として,求解オプションを宣言したのち,
myParam.outputMode = "silent";
とします.また,デフォルトで出力されるNuorium Optimizerの求解レポートである解ファイルsolver.sol
の出力を抑制するには
myParam.outfilename = "_NULL_";
と設定し,solveQP()
の最初の引数として渡します.useSolveQP.cpp
の以下のコメントを取ると,その設定になり,Nuorium Optimizerからの出力が抑制されて,useSolveQP
が出力する表示のみになります.
.. nuoptParam myParam; // Numerical Optimizerの出力と解ファイルの出力を抑制する. myParam.outputMode = "silent"; myParam.outfilename = "_NULL_"; if ( nQelem || nQCelem ) { // 2次の係数があるのならsolveQP qpres = solveQP(&myParam ,n, m ..
再びビルドメニューから
とすると,コンパイルが自動的に実行されます.
knapsack.txt
と同じ場所に別のuseSolveQP.cpp
の入力ファイル
-
useSolveQP\qp312.txt
があります.このデータは二次計画問題で
という定式で,次のように設定したものに対応します.2変数,3制約の問題で,制約式には二次の項はありません.
VC++のGUIで「プロジェクト」→「設定」→「デバッグ」タブで,「プログラムの引数」を
qp312.txt
として再び実行してみてください.
今度はuseSolveQP
がsolveQP
をコールして,次のような解が出力されます.
optimalValue = 2.3181818248e+000 X: [ 1] 9.394e-001 [ 2] 1.212e-001 F: [ 1] -9.273e-001 [ 2] -3.091e-001 [ 3] 2.000e+000
次のデータ:
(Nuorium Optimizerのインストール場所)\samples\app
にあるzipファイルを解凍した中にあるuseSolveQP\qp312I.txt
はこの二次計画問題の変数を連続変数ではなく,整数変数という指定をつけたもので,二次の整数計画問題となります.これを入力として実行すると
optimalValue = 2.5000000000e+000 X: [ 1] 1.000e+000 [ 2] 0.000e+000 F: [ 1] -1.000e+000 [ 2] -2.000e-001 [ 3] 2.000e+000
のような解が出力されます.
さらに,次のデータ:
(Nuorium Optimizerのインストール場所)\samples\app
にあるzipファイルを解凍した中にあるuseSolveQP\hs23.txt
は制約条件の中に二次式が含まれる問題となります.なお,このデータは[1]のNo.23を記述したものであり,次のような設定に対応します.
これを入力として実行すると
optimalValue = 2.0000000009e+000 X: [ 1] 1.000e+000 [ 2] 1.000e+000 F: [ 1] 2.000e+000 [ 2] 2.000e+000 [ 3] 1.000e+001 [ 4] 2.133e-010 [ 5] 2.133e-010
のような解が出力されます.
上に戻る