Keyword: 線形計画法
概要
本サンプルは線形計画法を行うサンプルプログラムです。 本サンプルは以下に示される制約条件を満たす目的関数を最小化する解を求めて出力します。
※本サンプルはnAG Toolbox for MATLAB®が提供する関数 e04mf() のExampleコードです。実行にはMATLAB®本体(他社製品)とnAG Toolbox for MATLAB®が必要です。
本サンプル及び関数の詳細情報は e04mf のマニュアルページをご参照ください。
入力データ
a = [1, 1, 1, 1, 1, 1, 1;
0.15, 0.04, 0.02, 0.04, 0.02, 0.01, 0.03;
0.03, 0.05, 0.08, 0.02, 0.06, 0.01, 0;
0.02, 0.04, 0.01, 0.02, 0.02, 0, 0;
0.02, 0.03, 0, 0, 0.01, 0, 0;
0.7, 0.75, 0.8, 0.75, 0.8, 0.97, 0;
0.02, 0.06, 0.08, 0.12, 0.02, 0.01, 0.97];
bl = [-0.01;
-0.1;
-0.01;
-0.04;
-0.1;
-0.01;
-0.01;
-0.13;
-9.999999999999999e+24;
-9.999999999999999e+24;
-9.999999999999999e+24;
-9.999999999999999e+24;
-0.0992;
-0.003];
bu = [0.01;
0.15;
0.03;
0.02;
0.05;
9.999999999999999e+24;
9.999999999999999e+24;
-0.13;
-0.004900000000000001;
-0.0064;
-0.0037;
-0.0012;
9.999999999999999e+24;
0.002];
cvec = [-0.02; -0.2; -0.2; -0.2; -0.2; 0.04; 0.04];
istate = zeros(14, 1, 'int32');
x = [-0.01;
-0.03;
0;
-0.01;
-0.1;
0.02;
0.01];
[cwsav,lwsav,iwsav,rwsav,ifail] = e04wb('e04mf');
[istateOut, xOut, iter, obj, ax, clamda, lwsavOut, iwsavOut, rwsavOut, ifail] = ...
e04mf(a, bl, bu, cvec, istate, x, lwsav, iwsav, rwsav)
- a には一般線形制約の係数を指定しています。
- bl には変数と一般線形制約の下限を指定しています。
- bu には変数と一般線形制約の上限を指定しています。
- cvec には目的関数の係数を指定しています。
- istate には制約の状態を初期化しています。
- x には初期値の推定値を指定しています。
- 関数 e04wb を呼び出しています。
- 最後に本関数を呼び出す構文を指定しています。
出力結果
istateOut =
1
1
2
2
0
0
0
3
0
0
0
0
1
1
xOut =
-0.0100
-0.1000
0.0300
0.0200
-0.0675
-0.0023
-0.0002
iter =
7
obj =
0.0236
ax =
-0.1300
-0.0055
-0.0066
-0.0048
-0.0039
-0.0992
-0.0030
clamda =
0.3301
0.0144
-0.0910
-0.0766
0
0
0
-1.4311
0
0
0
0
1.5010
1.5166
lwsavOut =
array elided
iwsavOut =
array elided
rwsavOut =
array elided
ifail =
0
- istateOut は以下に示す制約の状態を示しています。
- 0: 制約は実行可能許容値の範囲内にあるが、ワーキングセットには含まれない
- 1: 不等式制約の下限がワーキングセットに含まれる
- 2: 不等式制約の上限がワーキングセットに含まれる
- xOut は本関数が終了する点であり、解の推定値を示しています。
- iter は反復回数を示しています。
- obj はxが実行可能解である場合、xにおける目的関数の値を示しています。そうでない場合は実行不可能和を示します。
- ax は線形制約の最終値を示しています。
- clamda は変数の境界制約と一般線形制約のラグランジュ乗数を示しています。
- lwsavOut は出力が省略されています。
- iwsavOut は出力が省略されています。
- rwsavOut は出力が省略されています。
- ifail は関数がエラーを検知しなかった場合"0"を出力します。
