2.6 分枝限定法における出力
混合整数計画問題を解く場合は,通常,自動的に分枝限定法が起動されます.その場合[Progress]で始まるセクションでの実行経過の出力は次のようになり,求解の進行状況を確認できます.
#sol upper lower gap(%) time(s) list mem(MiB) +inf 84121.2 +inf 2.4 1 68 cut: 44 +inf 85090.4 +inf 2.7 1 71 cut: 12 +inf 85570.3 +inf 3.0 1 74 cut: 6 #1 139000 88862.7 22.003 5.1 190 98 sol: rens #2 135125 88862.7 20.654 5.2 190 98 sol: rens #3 134125 89294 20.066 5.4 194 99 sol: rens #4 134025 89294 20.030 5.5 195 99 sol: rens #5 133850 89294 19.967 5.7 196 99 sol: rins #6 129350 89294 18.320 5.9 197 99 sol: relax
分枝限定法の進捗は,
- 新しい暫定解が得られた
- 所要メモリが50MiB以上変動した
- 15秒経過した
- (並列化機能が無効のときに)切除平面を追加した
のいずれかの条件を満たせば出力されます.
各項目の意味は次の通りです.
表示 | 意味 |
---|---|
#sol | 発見した実行可能解の個数 |
upper | 目的関数の上界値 |
lower | 目的関数の下界値 |
gap(%) | 上下界の相対ギャップ(パーセンテージ) |
time(s) | 経過時間(秒) |
list | 探索していない分枝木の葉の数 |
mem(MiB) | 使用メモリ(メビバイト) |
cut | 追加した切除平面の数(並列化機能が無効であり,切除平面を追加したときに表示) |
sol | 解を発見した手法(解を発見したときに表示) |
#worker | 求解中のworkerの数(並列化機能が有効のときに表示) |
分枝限定法の場合は元問題とスケーリング後の問題について,非零な係数値の絶対値の範囲が出力されます.また,スケーリング値の範囲も出力されます.
Coefficient Statistics (before scaling) Coefficient range [min,max] : [1.00e-01,2.00e+01] RHS and bounds [min,max] : [1.00e+00,6.00e+01] Objective [min,max] : [1.60e+01,4.00e+01] Coefficient Statistics (after scaling) Coefficient range [min,max] : [1.75e-01,2.42e+00] RHS and bounds [min,max] : [1.00e+00,3.44e+01] Objective [min,max] : [8.60e+01,8.60e+01] Row scaling range [min,max] : [3.41e-02,3.34e+00] Column scaling range [min,max] : [3.56e-02,1.00e+00]
出力される情報は以下の5つです.
項目 | 意味 |
---|---|
Coefficient range | 係数行列において,非零要素の絶対値の範囲 |
RHS and bounds | 制約式及び変数において,非零な上下限値の絶対値の範囲 |
Objective | 目的関数において,非零な係数値の絶対値の範囲 |
Row scaling range | 係数行列において,非零な行方向のスケーリング値の絶対値の範囲 |
Column scaling range | 係数行列において,非零な列方向のスケーリング値の絶対値の範囲 |
スケーリング値は,目的関数,制約式及び変数に乗じられる定数値です.例えば列方向のスケーリング値が1.0e-08〜1.0e-6の場合は変数が「1」だけ変動すると,この変動はソルバ内部では1.0e-08〜1.0e-6という微小な変動として解釈されます.このため,内部の変数の上下限制約違反の閾値が1.0e-08であるとすると上下限制約を「1」違反する解が許容されてしまう可能性があることになります.行方向スケーリング値も同様に,制約違反の許容具合に影響します.
スケーリング値(Row scaling range / Column scaling range)が小さすぎる場合は,スケーリングオプションをoffにする,あるいは問題に与える変数の単位を見直すこと等が推奨されます.
初期解の修復機能を有効にした場合,分枝限定法の計算開始前に以下のような進捗が表示されます.
phase total_slack objective time(s) ite. mem(MiB) feas. 250.392 0 5.5 0 277 feas. 250.392 0 6.1 1 278 opt. 250.392 -6.01642e+09 24.3 2 302 feas. 2 7.59344e+08 25.2 3 301 feas. 1 7.77003e+08 25.9 4 301 feas. 1 7.77003e+08 26.5 5 293
これは初期解の修復における各反復(ite.)で,制約式の総違反量(total_slack)と目的関数(objective)がどのように遷移しているかを表示しています.行頭の feas. と opt. はその反復でどのような計算がおこなわれているかを表しています.feas. は総違反量の最小化をおこない,opt. は目的関数の最小化(あるいは最大化)をおこなっています.実行可能解が見つかるか,ある程度の反復がおこなわれると初期解の修復を終了し,分枝限定法に移行します.
上に戻る