Location : Home > Softwares > Lp_solve
Title : How to use
Toolbox Logo

Usage of Lp_solve

0 : Choice of Problem

 ワークシートが開いていて、アドインファイルがきちんと読み込まれていれば、メニューで[ツール]→ とやると下のほうに lpSolve という項目が追加されているはず。そこでそれを選択すると下のようなダイアログが表示されるはず。

問題選択

 ダイアログ見たらわかるだろうけど、扱える問題は「線形最適化」「輸送問題」「充当問題(スケジュール問題)」の3つ。

 これまた、ダイアログ見たらわかるだろうけど、これ、キャンセルできないの。ESC押してもだめ。右隅の×ボタンを押して閉じないとここでは終われない。こういうとこはバージョンが上がっても変わらんのねぇ。

1 : Linear/Integer Program

 えー。まずは簡単な例から。

サンプルシート

 問題設定のダイアログで [Linear/Integer Program] を選択した場合、次のようなダイアログが表示される。

条件設定

 最上段の Max または Min のラジオボタンで、問題が「最大化」であるか「最小化」であるかを指定する。

 次のボックスには、目的関数の係数を含む範囲を選択する。上の図の例だと、目的関数は x1 + 9x2 + x3 なので、係数は 1, 9, 1 となる。これを各セルに格納して行方向(つまり横方向)に並べた範囲を指定する。上の例で言うと、B7:D7 の範囲。それから、ダイアログでは[By Rows] とか [By Columns] という選択が可能らしい。試したことないけど。

 次のボックスでは制限条件を、符号と右辺の値こみで範囲指定する。上の例で言えば B9:F10 の範囲。符号については >, >=, =, ==, <=, <, が指定可能。

 次のボックスでは、変数の整数指定を行う。整数変数ならば 1 を、そうでなければ 0 を指定する。当然ながら変数のと同じ数だけのセルを含む大きさの範囲(だから最初のボックスで指定した係数の数と同じ大きさ)でなければならない。上の例だと B8:D8 の範囲。ただし整数変数が1つもないなら、このボックスは指定しなくともよい。

 最後のボックスには結果出力範囲を指定する。結果は、最大または最小値を与える各変数の値と、その時の関数値を返すので、[係数の数+1]このセルが必要。上の例だと B6:E6 の範囲。

 以上で [Run LP_Solve] を押せば実行する。

2 : Transportation Problem

サンプルシート

 問題設定のダイアログで [Transportation Problem] を選択した場合、次のようなダイアログが表示される。

条件設定

 これ、サンプルみてすぐに使い方わかった人は頭いいと思う。
 2つの行列があるから、どっちかがどっちかだと思うわな。で、ボックスが上下に2つあって、行列が上下に2つあったら、その順番だと思うわな。で、実際そうなんだけれども、実行してもワークシート上で、どこも変化が無い。そういえばダイアログに出力先の指定がないではないか! まさかどこか知らないところに出力したのか? ひょっとしてメモリ上に展開していて、VBAかなんかで取得しないといけないのか?
 …いやいや。これ、サンプルが悪いんだ。附属のサンプルワークシートって、開発者が計算して、最適計算をした結果が載せてあるの。だから計算しても結果が変わらないのだ!

 ダイアログの1つめのボックスには、制限条件を符号付き・右辺の値こみで入力する。上の例で言うと、C19:I28 の範囲。行方向には供給側の条件が、列方向には需要側の条件が記されている。輸送問題の場合は Σ各供給先への供給量<供給可能量 かつ Σ各供給元からの供給量>各需要量 であればいいはずなので、そういう条件。ああ、大事なことを2つ言い忘れてた。1つめは実はここで指定した範囲に結果が出力されること。だから上の例みたいに全部0にしとくと結果が変わったことがわかると思う。2つめは変数はすべて整数で得られるということ。連続変数で解いて丸める、というわけではなく、整数変数だということ。

 2つめのボックスには対応するコストを指定すること。上の例で言うと、C31:G39 の範囲。

 以上で [Run] を押せば実行する。
 気が付くかどうかわからんが、計算が終了したら1つ目の範囲の一番右下(例で言えば I28)に最適化の結果の目的関数の値(コスト)が表示される。

3 : Assignment Problem

サンプルシート

 問題設定のダイアログで [Assignment Problem] を選択した場合、次のようなダイアログが表示される。

条件設定

 2つの行列があるから、どっちかがどっちかだと思うわな。で、ボックスが上下に2つあって、行列が上下に2つあったら、その順番だと思うわな。でも今回は逆なんだ。
 …いやいや。これ、サンプルが悪いんだ。附属のサンプルワークシートって、開発者が計算して、最適計算をした結果が載せてあるの。だから計算しても結果が変わらないのだ!

 ダイアログの1つめのボックスには、結果を出力したい範囲を入力する。上の例で言うと、C14:J21 の範囲。結果は 0 / 1 で出る(当然ながら割り当てられたら 1 )ので、結果が変わったかどうか知りたければ全部 0 にしておくとか何か工夫が必要。それと、何も明記していないけど、「割り当てるか否か」だけが問題なので、ここも結果はすべて整数で得られるはずだ。

 2つめのボックスには対応するコストを指定すること。上の例で言うと、C5:J12 の範囲。

 以上で [Run] を押せば実行する。
 これも、気が付くかどうかわからんが、計算が終了したら1つ目の範囲の1つ斜め右下(例で言えば K22)に最適化の結果の目的関数の値(コスト)が表示される。ただし、ここで与えているのが「コスト」であって「便益」ではないので、問題は最小化の結果のはずだ。

Updated : 2007/10/11

Toolbox Logo
Updated : 2007/10/11