GLPSは Goal Programming System を略したもので目標計画法専用のパッケージである。
満足基準による意志決定が立った上で多重目標を扱えることが目標計画法の大きな特徴である。いまm個の上位目標があり、その目標値がB1、B2、……Bmまたはそれらを成分とする列ベクトルをBで表わすとする。ここでそれらの下位目標を成分とする列ベクトルをXで表わし。さらにm×n行列、Aを下位目標と上位目標とをつなぐ関係を表わすものとすると、この目標分析の問題は次のように表現される。
AX = B
X ≧ 0
これに解がある場合、それは次のような目標計画法の解として求めることができる。
目的関数:
eY+ + eY− → 最小化
制約条件:
AX − IY+ + IY− = 0
X, Y+ , Y− ≧ 0
ここで e は、その成分が全部1からなるm次元ベクトルであり、Y+とY−はそれぞれ目標の超過達成値と達成不足値を表わすm次元ベクトルである。さらに I はm×mの単位行列である。
目標計画法においては、目標の達成過不足を表わす補助変数Y+、Y−の係数を(−1,0,1)の中から適当に決めることにより、下の表に示すようなさまざまなタイブの意思決定方式を取り扱うことができる。
意思決定のタイプ | 目的関数 |
目標値を超えても、不足でもよいから、できるだけ目標値を丁度達成するようにしたい。 | Y+ + Y- |
目標値の超過はかまわないが達成不足だけはさけたい。 | Y- |
目標値の不足はかまわないが超過だけはさけたい。 | Y+ |
目標値と関係なく、達成値を最小にしたい。 | Y+ − Y- |
目標値と関係なく、達成値を最大にしたい。 | −Y+ + Y- |
この取り扱い得る意思決定のタイプの多さが目標計画法の特徴の一つである。なおこの五つの意思決定のタイプと付順の考え方を使うと、意思決定の際の目標と環境制約の違いは、単なる付順の絶対的な違いにすぎず、この点以外は全く同様に扱えるという面白さがある。すなわち環境制約はいかなる目標にも先だって満足させなければならない最も重用な目標であるということである。
インプット・データとは、目標計画法システムにユーザが予め用意したデータ・ファイルによる計算に必要なデータ情報を与えることをいう。新規データはGLPSのメニューのファイル → 新規 あとはテキスト エリアで入力すれば良い。応用例はファイル → 開く を経て、Sampl01 〜 Sample99ファイル名のファイルを開くことによって計算することができます。
TITLEを書き一つ以上の半角スペースを入力後にアルファベット、 漢字または英数字から成る文字列のモデル名を書きます。
インプット・データは、見出し部分とデータ部分より構成される。見出し部分は、その後にデータの種類を示すもので一語より構成される。データファイルの最初に必ず NAME 、最後に必ず END が置かれる。NAMEの見出しはこのデータファイルにユーザが指定する名前を与えるものであり、つぎの様な一般形で与えられる。
フィールドとフィールドの間は全て半角空白或いは Tab で区切る。
フィールド 1 | フィールド 2 |
NAME | ユーザの指定する名前 |
ENDはデータファィルの終了を知らせるもので、つぎの様な一般形で与えられる。
フィールド 1 |
END |
NAMEとENDの間はつぎの五種類のデータより構成される。
1〜3は、必ず与えなければならず、またこの順序で与えなければならない。 4と5は、必要に応じて与えればよい。以下に、これらの各機能毎に詳しい説明を加える
ROWSはモデル行列の各行に名前をつけると同時に、その制約行の符号の向きを規定する。
見出し部分
フィールド 1 |
ROWS |
データ部分
フィールド 1 | フィールド 2 |
制約種類 | 行の名前 |
COLUMNSはモデル行列の各列に名前を与え、その列をベクトルとして、 マトリックス要素に値をあたえてゆく。
見出し部分
フィールド 1 |
COLUMNS |
データ部分
フィールド 1 | フィールド 2 | フィールド 3 | フィールド 4 | フィールド 5 |
列名 | 行名 | 要素値 | 行名 | 要素値 |
RHS(Right Hand Side)は、右辺の制約ベクトルに名前を与え、対応する要素に値をあたえる。
見出し部分
フィールド 1 |
RHS |
データ部分
フィールド 1 | フィールド 2 | フィールド 3 | フィールド 4 |
行名 | 要素値 | 行名 | 要素値 |
一般に制約条件は、( 行 ) ≦ A 或いは( 行 ) ≧ A で与えるが、場合によって
A ≧ ( 行 ) ≦ B のように与えたいことがある。
このような制約条件を、RANGEという。このときいずれか一方、例えばAをRHS値で与える。RANGESは残った一方の値、ここではBを与えるために用いられる。このときRANGESに与える値は、RHSで前に指定されている値からの変化の大きさで指定する。前の例ではBそのものを与えるのではなく、B=A + d としてdの値を指定することになる。
見出し部分
フィールド 1 |
RANGES |
データ部分
フィールド 1 | フィールド 2 | フィールド 3 | フィールド 4 |
行名1 | d1 | 行名2 | d2 |
一般に変数は 0 〜 +∞の値をとることができるが、場合によってはこれに制限を加えたい場合がある。このような制限は制約式としてインプットすることもできるが、いろいろの点からこのBOUNDの機能を用いると便利なことが多い。BOUNDの指定の ない変数は自動的 0 〜 +∞ にセットされる。
見出し部分
フィールド 1 |
BOUNDS |
データ部分
フィールド 1 | フィールド 2 | フィールド 3 |
バウンドの型 | 列名 | バウンド値 |
上限、下限の両バウンドを指定してもよいし、いずれか一方のみ指定してもよい。片方のバウンドだけが、指定されているとき、もう一方のバウンドは+∞ または0となる。一つの変数に上限、下限の両バウンドを指定したい場合には、おのおの別にしてインプットしなくてはならない。可能な組み合せ(LO と UP) , (LO と PL) , (MI と UP)がある。上限の+∞は、自動的にジェネレーションされるのでPL型合わせとしては、指定しても意味がない。
X11 | X12 | X13 | X14 | X21 | X22 | X23 | X24 | Y- | Y1+ | Y2- | Y2+ | RHS | ||
Z1 | 1 | 1 | ||||||||||||
Z2 | 1 | |||||||||||||
Z3 | 1 | 1 | ||||||||||||
Z4 | 1 | 1 | ||||||||||||
P | 200 | 80 | 150 | 56 | 160 | 50 | 120 | 35 | 1 | 1 | = | 3500 | ||
P2 | 8 | 8 | 5 | 5 | 1 | -1 | = | 75 | ||||||
T1 | 1 | 1 | < | 8 | ||||||||||
T2 | 1 | 1 | < | 8 | ||||||||||
T3 | 1 | 1 | < | 4 | ||||||||||
T4 | 1 | 1 | < | 4 |
NAME SAMPLE01
ROWS
N Z1
N Z2
N Z3
N Z4
E P
E P2
L T1
L T2
L T3
L T4
COLUMNS
INTORG
X11 P 200 T1 1
X12 P 80 P2 8
X12 T1 1
X13 T3 1
X13 Z4 1 P 150
X14 Z4 1 P 56
X14 P2 8 T3 1
X21 P 160 T2 1
X22 P 50 P2 5
X22 T2 1
X23 Z3 1 P 120
X23 T4 1
X24 Z3 1 P 35
X24 P2 5 T4 1
INTEND
Y1- Z1 1 P 1
Y1+ Z1 1 P 1
Y2- Z2 1 P2 1
Y2+ P2 -1
RHS
P 3500 P2 75
T1 8 T2 8
T3 4 T4 4
RANGES
T1 4 T2 4
T3 4 T4 4
END
初期値を必要とする標準値を改定するための機能である。このモジュールが呼び出されない限りは標準値を使う。標準値および意味については、次表にまとめられている。
順番 | 意味 | 入力方法 | 標準値 |
1 | 有界変数複合法、フェイズ1において、単体判定基準は実行不能度と本来の目的関数に 重みを掛けて考慮する。0〜9の数値を選択できる。1は両者の比重は同じになる。 | コンボボクッス | 0 |
2 | 解が求まった時点でリインバージョンを行う | チェックボックス | 行う |
3 | 出力有効数字桁数 | コンボボクッス | 10 |
4 | 右辺に感度分析(Sensitivity Analysis)を行います | チェックボックス | しない |
5 | 計算中に許されるイタレーションの最大回数 | テキストフィールド | 90000回 |
6 | 再逆転を行うイタレーシ間隔 | テキストフィールド | 200回 |
7 | 逆行列ピボットをゼロとみなすべき許容誤差 | テキストフィールド | 5.0E-13 |
8 | 計算解ゼロ判定のための許容誤差 | テキストフィールド | 5.0E-12 |
9 | 負の判定のための許容誤差 | テキストフィールド | -5.0E-11 |
10 | 混合整数分枝限定計算の最大回数。モデルの規模と計算時間の制限、なかなか最適解に 到達しない場合許容最大回数になった時、計算を止め、その時の値を最適解とみなす | テキストフィールド | 8192 |
Code | 意味 |
1 | 最適解が求められた ( SOLUTION IS OPTIMAL ) |
2 | 実行可能解がない ( THE PROBLEM HAS NO FEASIBLE BASIC SOLUTION ) |
3 | 無限解 ( THE PROBLEM HAS NO FINITE SOLUTION ) |
4 | イタレーションが許される限界回数を超えた( ITERATION NUMBER IS OVER THE LIMIT ) |
生産管理(Sample01)の出力例
DATA NAME = SAMPLE01
* COLUMNS SECTION *
Number ColName At Activity ReducedCost 1 X11 BS 7.3 0 2 X12 BS 0.7 0 3 X13 0 0 4 X14 BS 4 0 5 X21 BS 8 0 6 X22 0 0 7 X23 BS 4 0 8 X24 0 0 9 Y1- 0 1 10 Y1+ 0 1 11 Y2- BS 37.4 0 12 Y2+ 0 0
DATA NAME = SAMPLE01* ROW SECTION *
RowName At SlackActivity DualPrice 目標行1 BS 0 0 目標行2 BS -37.4 0 目標行3 BS -4 0 目標行4 BS -4 0 利益 EQ 0 0 P2 EQ 0 0 T1 0 0 T2 0 0 T3 0 0 T4 0 0 *** 右辺値(RHS)に関する感度分析 ***
RowName 現在の右辺値 増加可能の上限 減少可能の下限 利益 3500 84 561 P2 75 無限 37.4 T1 8 2.805 0.42 T2 8 3.506248 0.525 T3 4 3.1875 1.5 T4 4 4.675 0.7
** TOLERANCE **
TOLERANCE = A * X - B TOTAL = 2.220446e-016 MAX = -2.220446e-016
* CALCULATE SHADOW PRIC *
TOTAL = 0 MAX = 0