主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

線形計画法の設定,ソルバーベース

ソルバー形式への問題の変換

この例では,ソルバーベースのアプローチを使用して,問題を数学的な形式から优化工具箱™ソルバーの構文に変換する方法を示します。この問題は線形計画法ですが,この手法はすべてのソルバーに適用できます。

問題に含まれる変数や式は,化学工場の運営モデルを表しており,埃德加と库普による[1]から引用しています。この問題について説明するビデオが2つあります。

この例の残りの部分では,問題をソルバー構文に変換することのみに注目します。この例は次のビデオとほぼ同じです。优化建模,第2部分:转换为求解形式。ビデオと例の主な相違点は,この例ではハッシュキーと同様の名前付き変数(つまり,インデックス変数)の使用方法が示されているという点です。これは変数を1つのベクトルに統合に説明されています。

モデルの説明

ビデオ数学建模与优化,第1部分では,問題を数学的な形式に変換する方法の1つとして,次の手順が示されています。

  1. 問題の概要の理解

  2. ゴールの特定(何らかの要素の最大化または最小化)

  3. 変数の識別(命名)

  4. 制約の特定

  5. 制御できる変数の判別

  6. すべての数量の数学的表記による指定

  7. モデルの完全性と正確さのチェック

この節の変数の意味については,ビデオ数学建模与优化,第1部分を参照してください。

最適化の問題では,すべての他の式を制約として,目的関数を最小化します。

ここでは,目的関数は次のとおりです。

0.002614 HPS + 0.0239 pp + 0.009825 ep

制約は次のとおりです。

2500P16250
I1192000年
C62000年
I1 - HE1132000年
I1 = le1 + he1 + c
1359.8 i1 = 1267.8 he1 + 1251.4 le1 + 192 c + 3413 p1
3000P29000
I2244000年
LE2142000年
I2 = le2 + he2
1359.8 i2 = 1267.8 he2 + 1251.4 le2 + 3413 p2
HPS = i1 + i2 + bf1
HPS = c + MPS + LPS
LPS = le1 + le2 + bf2
MPS = he1 + he2 + bf1 - bf2
P1 + p2 + pp24550年
EP +页12000年
国会议员271536年
有限合伙人100623年
すべての変数が正です。

解法

この最適化の問題を解くには,以下の手順に従います。

この手順は,次のビデオでも説明されています。优化建模,第2部分:转换为求解形式

ソルバーの選択

この問題に対して適切なソルバーを見つけるには,最適化の意思決定表を参考にしてください。この表では,問題を目的関数の種類と,制約の種類で分類するように求められます。この問題では,目的関数,制約ともに線形です。判定表ではlinprogソルバーを使用することが推奨されています。

优化工具箱の関数が扱う問題や関数linprogのリファレンスページに説明されているように,linprogソルバーでは次の形式の問題を解きます。

最小值 x f T x 这样 一个 x b 一个 e x b e l b x u b (1)
  • fTxは,定数fの行ベクトルを変数xの列ベクトルと乗算することを意味します。つまり,次のようになります。

    fTX = f(1) X (1) + f(2) X(2) +…+ f (n) x (n),

    ここでnはfの長さです。

  • A x≤bは線形不等式を表します。一个は k 行 n 列の行列で、k は不等式の数、n は変数の数 (x のサイズ) です。b は長さが k のベクトルです。詳細は、線形不等式制約を参照してください。

  • aq x =は線形等式を表します。Aeqは m 行 n 列の行列で、m は等式の数、n は変数の数 (x のサイズ) です。beq は長さが m のベクトルです。詳細は、線形等式制約を参照してください。

  • Lb≤x≤ubは,ベクトルxの各要素が,磅の対応する要素よりも大きくなければならないこと,また,乌兰巴托の対応する要素よりも小さくなければならないことを意味します。詳細は,範囲制約を参照してください。

linprogソルバーの構文は,この関数のリファレンスページに示されているとおり,次のようになります。

[x fval] = linprog(f,A,b,Aeq,beq,lb,ub);

linprogソルバーへの入力は,式 1の行列とベクトルです。

変数を1つのベクトルに統合

モデルの説明の方程式には16個の変数が含まれています。これらの変数を1つのベクトルに統合します。変数のベクトルの名前は,式 1のxです。次数を決定し,変数を使用してxの要素を作成します。

次のコードでは,変数の名前の细胞配列を使用してベクトルを作成します。

变量= {I1、I2,‘HE1’,‘合’,‘LE1’,‘LE2’,‘C’,‘BF1’,……BF2, HPS”,“议员”、“有限合伙人”,P1, P2, '页',' EP '};N =长度(变量);eval([variables{v},' = ', num2str(v),';']);结束

これらのコマンドを実行すると,次の名前付き変数がワークスペースに作成されます。

これらの名前付き変数は,xの要素のインデックス番号を表します。名前付き変数を作成する必要はありません。ビデオ优化建模,第2部分:转换为求解形式ではxの成分のインデックス番号を使用するだけで問題を解く方法を示しています。

範囲制約の記述

モデルの説明の方程式には,下限のある変数が4つ上限のある変数が6つ含まれています。下限が指定されている変数は以下のとおりです。

P12500
P23000
国会议员271536年
有限合伙人100623年

また,すべての変数は正なので,下限はゼロになります。

下限ベクトル0のベクトルとして作成し,4つの下限を追加します。

磅= 0(大小(变量));磅([P1, P2,国会议员,有限合伙人])=…(2500、3000、271536、100623);

上限が指定されている変数は以下のとおりです。

P16250
P29000
I1192000年
I2244000年
C62000年
LE2142000

上限ベクトルをのベクトルとして作成し,6つの上限を追加します。

乌兰巴托=正(大小(变量));乌兰巴托([P1, P2, I1、I2 C, LE2]) =…(6250, 9000, 192000, 244000, 62000, 142000];

線形不等式制約の記述

モデルの説明の方程式には,次の3つの線形不等式が含まれています。

I1 - HE1132000年
EP +页12000年
P1 + p2 + pp24550年

一个x≤bの形式の方程式にするために,すべての変数を不等式の左辺に移項します。これらの方程式はすべて,既にこの形式になっています。必要に応じて両辺に1を乗算して,各不等式が”より小なり”の形式になるようにします。

I1 - HE1132000年
ep -页-12000年
- p1 - p2 - pp-24550年

MATLAB®ワークスペースで16個の変数の3つの線形不等式に合わせ,一个行列を3行16列の行列として作成します。3つの要素をもつbベクトルを作成します。

一个= 0 (16);(1, I1) = 1;(1) HE1) = 1;b (1) = 132000;(2) EP) = 1;(2页)= 1;b (2) = -12000;(3, (P1, P2, PP)) = (1 1 1);b (3) = -24550;

線形等式制約の記述

モデルの説明の方程式には8つの線形等式が含まれています。

I2 = le2 + he2
LPS = le1 + le2 + bf2
HPS = i1 + i2 + bf1
HPS = c + MPS + LPS
I1 = le1 + he1 + c
MPS = he1 + he2 + bf1 - bf2
1359.8 i1 = 1267.8 he1 + 1251.4 le1 + 192 c + 3413 p1
1359.8 i2 = 1267.8 he2 + 1251.4 le2 + 3413 p2

これらの等式をAeq x =说真的の形式にするために,すべての変数を等式の片方にまとめます。等式は次のようになります。

Le2 + he2 - i2 = 0
Le1 + le2 + bf2 - LPS = 0
I1 + i2 + bf1 - HPS = 0
C + MPS + LPS - HPS = 0
Le1 + he1 + c - i1 = 0
He1 + he2 + bf1 - bf2 - MPS = 0
p1 - 1359.8 i1 = 0
p2 - 1359.8 i2 = 0

次に,これらの等式に対応するAeq行列と说真的ベクトルを作成します。MATLABワークスペースで、16 個の変数の 8 つの線形等式に合わせ、Aeq行列を8行16列の行列として作成します。すべてゼロの8つの要素をもつ说真的ベクトルを作成します。

Aeq = 0 (8, 16);说真的= 0 (8,1);Aeq ([LE2 HE2, I2]) = (1 1 1);Aeq (2, [LE1 LE2, BF2,有限合伙人))= (1,1,1,1);Aeq ([I1、I2 BF1, HPS]) = (1, 1, 1, 1);Aeq (4, [C、议员、有限合伙人,HPS]) = (1, 1, 1, 1);Aeq (5, [LE1 HE1 C, I1)) = (1, 1, 1, 1);Aeq(6日[HE1 HE2, BF1 BF2,议员))= [1,1,1,1,1);Aeq(7日[HE1 LE1 C, P1, I1)) =(1267.8、1251.4,192,3413,-1359.8);Aeq (8, [HE2 LE2, P2, I2]) = (1267.8, 1251.4, 3413, -1359.8);

目的の記述

目的関数は次のとおりです。

fTx =0.002614 HPS + 0.0239 pp + 0.009825 ep

この式をxベクトルの乗数のfベクトルとして記述します。

f = 0(大小(变量));f([HPS PP EP]) = [0.002614 0.0239 0.009825];

linprogを使用した問題の解法

これで,linprogソルバーで必要な入力が揃いました。ソルバーを呼び出し,出力結果を以下のフォーマットで印刷します。

选择= optimoptions(“linprog”、“算法”、“对偶单纯形”);[x fval] = linprog(f,A,b,Aeq,beq,lb,ub,options);for d = 1:N fprintf('%12.2f \t%s\ N ',x(d),variables{d}) end fval . fprintf('%12.2f \t%s\ N ',x(d),variables{d}

結果は以下のとおりです。

找到最优解。136328.74 I1 244000.00 I2 128159.00 HE1 143377.00 HE2 0.00 LE1 100623.00 LE2 8169.74 C 0.00 BF1 0.00 BF2 380328.74 HPS 271536.00 MPS 100623.00 LPS 6250.00 P1 7060.71 P2 11239.29 PP 760.71 EP fval = 1.2703e+03

解の検証

fvalからの出力では,すべての実行可能点で目的関数の値が最小になります。

解ベクトルxは,目的関数が最小の値をもつ点です。次の点に注意してください。

  • BF1BF2,およびLE1は,下限値である0です。

  • I2は上限値である244000年です。

  • fベクトルのゼロでない要素は以下のとおりです。

    • HPS- - - - - -380328 .74点

    • - - - - - -11239 .29

    • EP- - - - - -760.71

ビデオ优化建模,第2部分:转换为求解形式では,元の問題に関して,これらの特性が説明されています。

参考文献

[1]埃德加,托马斯F.和大卫M. Himmelblau。化学过程的优化。麦格劳-希尔,纽约,1988年。

関連するトピック