線形計画法

線形計画法

シンプレックス法で線形計画問題(最大化問題)を解くプログラムです。一度に最適解を求めることも、 ステップを追って求めることも可能です。

データ入力

(必要ならば)「データの入力」タブを表示し、(必要ならば)変数の個数、式の本数を変更し「変更」ボタンを押す。このプログラムは最大化問題を解くプログラムなので、最小化問題を解く場合はあらかじめ目的関数を-1倍して最大化問題に変更しておくこと。制約式の係数と定数項を入力する。非負変数でない場合は「非負変数」のチェックマークをはずす。制約式のタイプとして、「$\le$」、「$\ge$」、「$=$」のどれかを選ぶ。目的関数の係数は一番下の行に入力する。入力できる係数は有理数までである。10.6、-5/6、等、小数点数、分数(帯分数ではなく仮分数)を入力できる。

結果(経過)の表示

「結果(経過)の表示」タブを表示する。(必要ならば)余裕変数等を自動的に追加して最初のシンプレックス表を求め、この時点での状況(最適解、非有界、等)がステータスバーに表示される。「解く」ボタンを押せば、解が求まる。「ステップ実行」がチェックされていれば、シンプレックス法を1ステップずつ実行する。

実行不可能問題入力
例1(実行不可能)

次の線形計画問題(「線形数学」竹内啓著、培風館、p.37より)を解く。
実行不可能問題
(必要ならば)「データの入力」タブを表示して、変数の個数を2個、式の本数を3本に変更し、データを入力する。「結果(経過)の表示」タブを表示すると、

実行不可能経過
余裕変数(SL)と余剰変数(SU)が追加され、最初のシンプレックス表が表示される。ステータスバーにより、実行可能解を探そうとすること、3行1列がピボットであることが分かる。ここでは、「ステップ実行」のチェックをはずし、答えを求める。「解く」ボタンを押すと、
実行不可能結果
となり、ステータスバーにより、実行不可能であることが分かる。

非有界問題入力
例2(非有界)

次の線形計画問題を解く。
非有界問題
(必要ならば)「データの入力」タブを表示して、データを入力する。「結果(経過)の表示」タブを表示すると、

非有界経過
余裕変数が追加され、最初のシンプレックス表が表示される。ステータスバーにより、実行可能であり、最適解を探そうとすること、2行4列がピボットであることがわかる。ここでは、「ステップ実行」のチェックをはずし、答えを求める。「解く」ボタンを押すと、
非有界結果
となり、ステータスバーにより、非有界であることが分かる。

通常問題入力
例3(通常)

次の線形計画問題(”Cooperative Game Theory and Applications” by Imma Curiel, p.21より)を解く。
通常問題
(必要ならば)「データの入力」タブを表示して、変数の個数を2個、式の本数を3本に変更し、データを入力する。「結果(経過)の表示」タブを表示すると、

通常経過
余裕変数が追加され、最初のシンプレックス表が表示される。ステータスバーにより、実行可能であること、最適解を探そうとしていること、1行1列がピボットであることが分かる。ここでは、「ステップ実行」のチェックをはずし、答えを求める。「解く」ボタンを押すと、
通常結果
となり、ステータスバーにより、最適解が求まり、最大値は26、500であることが分かる。表を読むことにより、x1=65、x2=90の時、最大値が26,500であり、その時の双対変数(潜在価格)の値が0、21+3/7、7+1/7であることが分かる。

例4(縮退1)

次の線形計画問題(「線型不等式とその応用」長堀長慶著、岩波書店、p.73より)を解く。
縮退1問題
(必要ならば)「データの入力」タブを表示して、変数の個数を7個、式の本数を4本に変更し、データを入力する。

縮退1問題入力
「結果(経過)の表示」タブを表示すると、
縮退1経過
最初のシンプレックス表が表示される。ステータスバーにより、実行可能解を探そうとしていること、4行5列がピボットであることが分かる。ここでは、(必要ならば)「ステップ実行」のチェックし、シンプレックス法を1ステップずつ実行する。「解く」ボタンを必要な回数だけ押す。
縮退1経過1 縮退1経過2
まず、実行可能になり、最適解を探そうとしていること、および、ピボットが3行4列であることが分かり、次に 最適解が求まる。x1=8、x2=1、x3=0、x4=8、x5=2、x6=x7=0の時、最大値2.7である。(上記のシンプレックス表ではピボットの選び方が幸運だったため、最右列がゼロにならなかった。しかし、最初のシンプレックス表で、ピボットを2行7列にすれば、最右列にゼロが現れる。)

縮退2問題入力
例5(縮退2)

次の線形計画問題(「線形数学」竹内啓著、培風館、p.33より)を解く。
縮退2問題
(必要ならば)「データの入力」タブを表示して、変数の個数を2個、式の本数を3本に変更し、データを入力する。「結果(経過)の表示」タブを表示すると、

縮退2経過1
余裕変数が追加され、最初のシンプレックス表が表示される。ステータスバーにより、実行可能であること、最適解を探そうとしていること、3行1列がピボットであることが分かる(2行1列になる場合もある)。ここでは、(必要ならば)「ステップ実行」のチェックし、シンプレックス法を1ステップずつ実行する。「解く」ボタンを必要な回数だけ押すと、
縮退2経過2縮退2経過3縮退2経過4
となり、x1=1/2、x2=3/4の時、最大値5/4であること、その時の双対変数(潜在価格)の値が、1/4、1/4、0であることが分かる。

行列ゲーム問題入力
例6(行列ゲーム)

次の行列ゲーム(”Game Theory” by Owen, p54より)を解く。
行列ゲーム
これを解くには、次の線形計画問題を解けばよい。
行列ゲームLP
(必要ならば)変数の個数を4個、式の本数を5本に変更し、上記のデータを入力する。変数x4の「非負変数」のチェックをはずす。「結果(経過)の表示」タブを表示すると、

行列ゲーム経過1
自由変数x4が2個の非負変数に分離され、余裕変数が追加され、最初のシンプレックス表が表示される。ステータスバーにより、実行可能であり、最適解を探そうとしていること、ピボットが3行4列であることが分かる。ここでは「ステップ実行」のチェックをはずし、解を求める。「解く」ボタンを押すと、
行列ゲーム経過2
となり、プレイヤー1の最適戦略が(1/8, 1/2, 3/8)であり、ゲームの値が3+1/4であることが分かる。また、プレイヤー2の最適戦略が(1/12, 5/12, 1/2, 0)であることも分かる。

例7(割当問題)

次の割当問題(”Cooperative Game Theory and Applications” by Imma Curiel, p.54より)を解く。
割当問題
(必要ならば)変数の個数を9個、式の本数を6本に変更し、上記のデータを入力する。

割当問題入力
「結果(経過)の表示」タブを表示すると
割当問題経過1
となり、最初のシンプレックス表が表示される。ステータスバーにより、実行可能解を探そうとしていること、最初のピボットが1行5列であることが分かる。ここでは(必要ならば)「ステップ実行」をチェックして解を求める。「解く」ボタンを必要な回数だけ押す。
割当問題経過2割当問題経過3
となり、x1=0、x2=0、x3=1、x4=1、x5=0、x6=0、x7=0、x8=1、x9=0の時、最大値が24であることが分かる。

例8(輸送問題)

次の輸送問題(「問題解決のためのオペレーションズ・リサーチ入門」高井英造、真鍋龍太郎著、日本評論社、第5章より)を解く。
輸送問題
(必要ならば)変数の個数を15個、式の本数を8本に変更し、上記のデータを入力する。

輸送問題入力1輸送問題入力2
「結果(経過)の表示」タブを表示すると、
輸送問題経過1
となり、最初のシンプレックス表が表示される。ステータスバーにより、実行可能解を探そうとしていること、最初のピボットが4行6列であることが分かる。ここでは、(必要ならば)「ステップ実行」のチェックを外し、解を求める。「解く」ボタンを押すと、
輸送問題経過2
となり、x1=25、x2=x3=0、x4=70、x5=25、x6=0、x7=60、x8=40、x9=5、x10=0、x11=75、x12=x13=x14=x15=0の時、最大値が-615(最小費用は615)であることが分かる。

例9(勝者調整法)

2人のプレイヤーAとBの5品目(可分とする)に対する評価値が次の表のようになっている時、勝者調整法による配分を線形計画法を利用して求める。

品目1 品目2 品目3 品目4 品目5 合計
Aの配点 25 5 30 20 20 100
Bの配点 20 10 15 25 30 100
次の線形計画問題を解けばよい。
勝者調整法LP
(必要ならば)変数の個数を11個、式の本数を7本に変更し、上記のデータを入力する。
勝者調整法入力
「結果(経過)の表示」タブを表示すると
勝者調整法経過1
となり、最初のシンプレックス表が表示される。ステータスバーにより、実行可能解を探そうとしていること、最初のピボットが7行8列であることが分かる。ここでは、(必要ならば)「ステップ実行」のチェックを外し、解を求める。「解く」ボタンを押すと、
勝者調整法経過2
となり、x1=1、x2=0、x3=1、x4=2/9、x5=0、x6=0、x7=1、x8=0、x9=7/9、x10=1の時、最大値が59+4/9であることが分かる。表にすれば次のようになる。プレイヤーAは品目1と品目3と品目4の2/9を貰い、プレイヤーBは品目2と品目5と品目4の7/9を貰う。そのときの利得は\(59 \frac{4}{9}\)となる。
品目1 品目2 品目3 品目4 品目5 合計
A 25 30 \(\frac{2}{9} \times 20 \) \(59 \frac{4}{9}\)
B 10 \(\frac{7}{9} \times 25 \) 30 \(59 \frac{4}{9}\)