上にあげた環境以外についての対応は現時点で予定しておりませんが,強いご希望があれば作者までご連絡下さい。ちなみに,当方が使用している開発環境は,Windows95/98/NT が Microsoft Visual Studio 6.0, Solaris 2.5.1 (Sparc) は Sun Workshop (version 3), Solaris 2.5.1 (x86) は GNU gcc (version 2.7.2.3)です。
>humps HUMPS Ver. 1.10 (C) Copyright 1998 Katsumi Morikawa. You need information? (yes = 1, no = 0) :1 New MPS data? (yes = 1, no = 0) :1 MPS data file name : sample.mps Rows Section Start. Columns Section Start. RHS Section Start. Ranges Section Start. Bounds Section Start. Data echo back Number of rows : 4 Number of columns : 3 Number of elements : 12 Density (%) :100.000 We are writing information. Finished... Output file name:sample.res Save final solution? (yes = 1, no = 0) :0 Use saved solution? (yes = 1, no = 0) :0 iteration: 1, current ita stack: 3 iteration: 2, current ita stack: 3 Become Feasible. iteration: 3, current ita stack: 7 iteration: 4, current ita stack: 11 Optimal Solution. >
RO N OBJECT E ROW01 L ROW02 G ROW03 CO X01 OBJECT -25.0 X01 ROW01 2.0 X01 ROW02 6.0 X01 ROW03 7.0 X02 OBJECT -50.0 X02 ROW01 10.0 X02 ROW02 5.0 X02 ROW03 10.0 X03 OBJECT -34.0 X03 ROW01 4.0 X03 ROW02 8.0 X03 ROW03 8.0 RH ROW01 425.0 ROW02 400.0 ROW03 550.0 RA ROW03 50.0 BO LO X01 10.0 UP X01 25.0 LO X03 -1.0 UP X03 10.0 EAこのデータに対応した問題を数式で表したものを用意しています(PDF形式です)。
以下では,MPS形式に対してある程度の知識のある読者を想定して説明します。
まず大きな前提条件として,HUMPS は目的関数の最小化を目的としており, 目的関数の行の名前は「OBJECT 」に固定してあります。 また,データセット名も与える設定にはなっておりません。 ROWS,COLUMNS,RHS,RANGES,BOUNDSなどのインジケータは, それぞれ以下のように2文字だけを利用するようになっています。
RO : ROWS インジケータ CO : COLUMNS インジケータ RH : RHS インジケータ RA : RANGES インジケータ BO : BOUNDS インジケータ EA : データの終了 NA : 当該行データを無視 M : マーカーレコードインジケータCOLUMNS の行以降についてMPS形式では, 1つのデータ行で(A,B,データ1,C,データ2)のような5項形式のデータ入力が認められていますが, 本システムでは,1つの行で1つの値しか認めない形式となっています。 よって,先の例では2行を利用して(A,B,データ1)と(A,C,データ2)のような形でデータを与える必要があります。 (なお,先の例でカッコやカンマは説明の便宜上用いたものであり,実際には上の例から明らかなようにこれらの区切り記号は使用しません。)
制約行と決定変数の名前は8文字(固定値)であり,8文字より短い名前の場合にも空白を補って, 必ず8文字として下さい。なお,大文字・小文字は区別されます。 また,行列の値は実数値で与えて下さい(たとえ整数値しか出てこない問題でも, 必ず .0 を補って実数表現にして下さい)。
行の最初の2文字分はインジケータ,もしくは制約行列の タイプ用で,次の8文字分は制約行名もしくは決定変数名用, 次の8文字分も制約行名もしくは決定変数名用,その後に 値を書きます。値については特に指定文字幅はありません。
混合整数計画問題の場合, たとえば,上述の問題で決定変数 X02 が整数変数の場合,データは以下のように記述して下さい。
RO N OBJECT E ROW01 L ROW02 G ROW03 CO X01 OBJECT -25.0 X01 ROW01 2.0 X01 ROW02 6.0 X01 ROW03 7.0 M 'INTORG' X02 OBJECT -50.0 X02 ROW01 10.0 X02 ROW02 5.0 X02 ROW03 10.0 M 'INTEND' X03 OBJECT -34.0 X03 ROW01 4.0 X03 ROW02 8.0 X03 ROW03 8.0 RH ROW01 425.0 ROW02 400.0 ROW03 550.0 RA ROW03 50.0 BO LO X01 10.0 UP X01 25.0 LO X03 -1.0 UP X03 10.0 EAすなわち,COLUMNS セクションで 'INTORG' と 'INTEND' で囲まれた範囲の 決定変数が整数変数として取り扱われます。 なお,整数変数の取る値は0,1,2という0以上の整数に限定しています。
以下の結果は先のサンプルデータに対応しております。最初のあたりに 「Optimal solution.」と表示されていることより,最適解が得られたことがわかります。 最適解の目的関数値は NUMBER 0 にある OBJECT の行の ACTIVITY の個所に示されている -2640 です。 この値を与えた決定変数の値が,SECTION 2 - COLUMNS の NUMBER 4 から 6 の 個所で与えられており,X01 は 25,X02 は 33.5,X03 は 10.0 となっています。 それぞれの決定変数に与えられた目的関数の係数は INPUT COST の部分に,また 決定変数の上下限値は LOWER LIMIT と UPPER LIMIT に表示されています。 なお,原則としてゼロの値はピリオド(.)で示されます(たとえば,X02の下限値の個所)。
*** Generated by HUMPS Ver. 1.10 (C) 1998 Katsumi Morikawa. *** Optimal solution. SECTION 1 - ROWS NUMBER ...ROW.. AT ...ACTIVITY... SLACK ACTIVITY ..LOWER LIMIT. ..UPPER LIMIT. .DUAL ACTIVITY 0 OBJECT BS -2640.00000 2640.00000 NONE NONE . 1 ROW01 EQ 425.00000 . 425.00000 425.00000 . 2 ROW02 BS 397.50000 2.50000 NONE 400.00000 . 3 ROW03 BS 590.00000 -40.00000 550.00000 600.00000 . SECTION 2 - COLUMNS NUMBER .COLUMN. AT ...ACTIVITY... ..INPUT COST.. ..LOWER LIMIT. ..UPPER LIMIT. .REDUCED COST. 4 X01 UL 25.00000 -25.00000 10.00000 25.00000 -15.00000 5 X02 BS 33.50000 -50.00000 . NONE . 6 X03 UL 10.00000 -34.00000 -1.00000 10.00000 -14.00000
入力問題が混合整数計画問題であった場合,最初に,整数制約を緩和した問題の 最適解が示された後に,実行可能な解1,実行可能な解2,...と,出力されます。実行可能な解は, 現在よりも目的関数値の小さいものが発見されるたびに出力され,最後に,もうこれ以上よい解が ないとわかった時点で,最後に出力された解が最適解であるというメッセージが出ます。 先に挙げた問題の場合,次のように出力されます。
*** Generated by HUMPS Ver. 1.10 (C) 1998 Katsumi Morikawa. *** LP Relaxed Optimal solution. SECTION 1 - ROWS NUMBER ...ROW.. AT ...ACTIVITY... SLACK ACTIVITY ..LOWER LIMIT. ..UPPER LIMIT. .DUAL ACTIVITY 0 OBJECT BS -2640.00000 2640.00000 NONE NONE . 1 ROW01 EQ 425.00000 . 425.00000 425.00000 . 2 ROW02 BS 397.50000 2.50000 NONE 400.00000 . 3 ROW03 BS 590.00000 -40.00000 550.00000 600.00000 . SECTION 2 - COLUMNS NUMBER .COLUMN. AT ...ACTIVITY... ..INPUT COST.. ..LOWER LIMIT. ..UPPER LIMIT. .REDUCED COST. 4 X01 UL 25.00000 -25.00000 10.00000 25.00000 -15.00000 5I X02 BS 33.50000 -50.00000 . NONE . 6 X03 UL 10.00000 -34.00000 -1.00000 10.00000 -14.00000 Feasible solution for mixed-integer problem. SECTION 1 - ROWS NUMBER ...ROW.. AT ...ACTIVITY... SLACK ACTIVITY ..LOWER LIMIT. ..UPPER LIMIT. .DUAL ACTIVITY 0 OBJECT BS -2622.50000 2622.50000 NONE NONE . 1 ROW01 EQ 425.00000 . 425.00000 425.00000 . 2 ROW02 BS 390.00000 10.00000 NONE 400.00000 . 3 ROW03 BS 585.00000 -35.00000 550.00000 600.00000 . SECTION 2 - COLUMNS NUMBER .COLUMN. AT ...ACTIVITY... ..INPUT COST.. ..LOWER LIMIT. ..UPPER LIMIT. .REDUCED COST. 4 X01 UL 25.00000 -25.00000 10.00000 25.00000 -8.00000 5I X02 LL 34.00000 -50.00000 34.00000 NONE 35.00000 6 X03 BS 8.75000 -34.00000 -1.00000 10.00000 . *** The final solution is optimal. ***整数変数と実数変数の識別は,SECTION 2 で番号(NUMBER)の直後にある記号 'I' で識別します(Iがあれば,整数変数)。上の例では,X02が整数変数であることがわかります。 最後の行に,*** The final solution is optimal. ***と出力されていることより, 最適解の目的関数値は -2622.5 であることがわかります。
問題名 | 行数 | 列数 | 整数変数の数 | 0-1変数の数 | 結果egout | 98 | 141 | 55 | 全部 | ○ |
| flugpl | 18 | 18 | 11 | ゼロ | ○ |
| lseu | 28 | 89 | 89 | 全部 | ○ |
| p0033 | 16 | 33 | 33 | 全部 | ○ |
| pk1 | 45 | 86 | 55 | 全部 | × |
| |