simplexはシンプレックスアルゴリズムを使った線形最適化のパッケージです。
例:
(%i1) load("simplex")$
(%i2) minimize_lp(x+y, [3*x+2*y>2, x+4*y>3]);
9 7 1
(%o2) [--, [y = --, x = -]]
10 10 5
デフォルト値: 10^-8
linear_programの数値計算で使われるイプシロン。
以下も参照してください: linear_program
linear_programは
シンプレックスアルゴリズムの実装です。
linear_program(A, b, c)は、
A.x = bかつx >= 0を満たすベクトルの中でc.xが可能な最小となる
ベクトルxを計算します。
引数Aは行列で、引数bとcはリストです。
linear_programは、
最小化ベクトルxと最小値c.xを含む
リストを返します。
もし問題が有界でないなら、
"Problem not bounded!"を返し、
もし問題が実現可能でないなら、
"Problem not feasible!"を返します。
この関数を使うためには、最初にload("simplex");でsimplexパッケージをロードしてください。
例:
(%i2) A: matrix([1,1,-1,0], [2,-3,0,-1], [4,-5,0,0])$
(%i3) b: [1,1,6]$
(%i4) c: [1,-2,0,0]$
(%i5) linear_program(A, b, c);
13 19 3
(%o5) [[--, 4, --, 0], - -]
2 2 2
以下も参照してください: minimize_lp, scale_lp, epsilon_lp
いくつかの線形制約condに従う線形目標関数objを最大化します。
引数と戻り値の詳細な記述に関しては、
minimize_lpを参照してください。
以下も参照してください: minimize_lp.
いくつかの線形制約condに従う線形目標関数objを最小化します。
condは線形等式や不等式のリストです。
厳密な不等式では、>は>=に、
<は<=に置き換えられます。
オプションの引数posは
正と仮定される決定変数のリストです。
もし最小が存在するなら、
minimize_lpは
目標関数の最小値と最小が得られる決定変数値のリスト
を含むリストです。
もし問題が有界でないなら、
minimize_lpは"Problem not bounded!"を返し、
もし問題が実現可能でないなら、
"Ploblem not feasible!"を返します。
決定変数はデフォルトでは非負とは仮定されません。
もし決定変数すべてが正なら、
nonegative_lpをtrueに設定してください。
もし決定変数のいくつかだけが正なら、
オプション引数posの中でそれらをリストしてください。
(これは制約を足すより効率的だということに注意してください。)
minimize_lpは
Maximaのlinear_program関数で実装された
シンプレックスアルゴリズムを使います。
この関数を使うためには、最初にload("simplex");で
simplexパッケージをロードしてください。
例:
(%i1) minimize_lp(x+y, [3*x+y=0, x+2*y>2]);
4 6 2
(%o1) [-, [y = -, x = - -]]
5 5 5
(%i2) minimize_lp(x+y, [3*x+y>0, x+2*y>2]), nonegative_lp=true;
(%o2) [1, [y = 1, x = 0]]
(%i3) minimize_lp(x+y, [3*x+y=0, x+2*y>2]), nonegative_lp=true;
(%o3) Problem not feasible!
(%i4) minimize_lp(x+y, [3*x+y>0]);
(%o4) Problem not bounded!
いかも参照してください: maximize_lp, nonegative_lp, epsilon_lp。
デフォルト値: false
もしnonegative_lpがtrueなら、
minimize_lpとmaximize_lpの決定変数すべては正と仮定されます。
以下も参照してください: minimize_lp。