。
この例では,混合整数線形計画問題を設定および解決する方法を説明します。問題は,一連の工場,倉庫,販売店間の生産および流通の最適レベルを求めることです。ソルバーベースのアプローチについては,工厂,仓库,贩売店割り割り当て:ソルバーベースを参照してください。
このこの例で,まず工艺,仓库,贩売店のランダム位置を生成し。 を自由に変更して,生産および流通施設が配置されている両方のグリッドのサイズをスケーリングすると共に,グリッドエリアの各タイプの施設の密度が に依存しないように,これらの施設の数をスケーリングします。
特定のスケーリングパラメーターの値 には以下があるとします。
个の工艺
個の倉庫
個の販売店
これらの施设は, および 方向1と 施设施设が别个の位置をもつためににをためためにはをためにににもつために である必要があります。この例では, 、 、 、 とします。
工場では, 个の制品が制造制造れています。 とします。
販売店 における各製品 の需要は ですとは,あるある间において能能数つまりつまり需要の制约満たすことですつまりモデルモデル需要満たすことにですつまりモデルのを満たすことにつまりモデルモデルの制约能能にです
各工場および倉庫には能力の制約があります。
工艺 における制品 の生産は 未満です。
仓库 の容量は です。
特定の期間に倉庫 から贩売店に输送できる制品 の数量は 未満です。ここここ, は製品 の回転率です。
各販売店は1つの倉庫からのみ供給を受けるものとします。問題の一部として,倉庫に対し販売店を最も低コストに配置することがあります。
工場から倉庫および倉庫から販売店までの製品輸送コストは,施設間の距離および製品ごとに異なります。 が施設 と の間の距離であるとすると,これらの施設間で製品 をを出荷するコストコストは输送 にに距离を乘算乘算し値になりなり
この例における距離は 距离距离とも呼ばれるグリッド距离距离距离はは 座标と 座标の差の绝対値のの和です。
工艺 で制品 を1単位生产するコストは です。
一連の施設の位置と需要および能力の制約を所与として,以下を求めます。
各工艺における各制品の生产レベル
工艺から仓库へのののの出荷
倉庫から販売店への製品の出荷スケジュール
これらが満たされ,需要が満たされ,需要総コストがなりませさまたまたでなけれのすべてすべてのありありありありありありありありありありありありありありありありありありありありありすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべてすべて무
制御函数(最最化において可能数)は以下のです。
= 工場 から仓库 に輸送する製品 の数量
=饭店 が倉庫 と関連付けられているときに値が1になるバイナリ変数
最小气する目的关节数は下のとおり。
制約は次のとおりです。
(工艺场の力)。
(需要を満たす)。
(倉庫の容量)。
(各店が1つつのの仓库关键词られている)。
(非負の生産)。
(バイナリの )。
変数 および は,目的関数と制約関数で線形になります。 は整数値に制限されるため,問題は混合整数線形計画法(MILP)になります。
パラメーター 、 、 および の値を設定し,施設の位置を生成します。
RNG(1)%的再现性N = 20;似乎从10到30之间的%n工作。小心选择大值。N2 = N * N;f = 0.05;工厂密度%w = 0.05;仓库密度%s = 0.1;销售网点密度%F =地板(F * N2);工厂数量%W =地板(W * N2);仓库数量%S =地板(S * N2);销售网点数量%xyloc = randperm (N2, F + W + S);设施的独特位置[xloc,yloc] = ind2sub([N N],xyloc);
もちろん,施設の位置を無作為に指定するのは現実的ではありません。この例は,解決法を示すことを目的としたものであり,適切な施設の位置を生成する方法を示すものではありません。
施設をプロットします。施設1 ~ Fは工場F F + 1 ~ + Wは倉庫,F + W + 1 ~ + W + Sは販売店です。
h =图;绘图(XLOC(1:F),Yloc(1:F),“rs”xloc (F + 1: F + W), yloc (F + 1: F + W),“k *’,......xloc (F + W + 1: F + W + S), yloc (F + W + 1: F + W + S),'博');lgnd =传奇(“工厂”,'仓库',“销售渠道”,“位置”,'eastoutside');lgnd.autoupdate =.'离开';XLIM([0 n + 1]); ylim([0 n + 1])
ランダムな生産コスト,能力,回転率および需要を生成します。
p = 20;%20产品下载188bet金宝搏%生产成本在20到100之间pcost = 80*rand(F,P) + 20;%每个产品/工厂的生产能力在500 - 1500之间pcap = 1000*rand(F,P) + 500;%每个产品/仓库的仓库容量在P*400到P*800之间wcap = P*400*rand(W,1) + P*400;%每个产品1 - 3的产品周转率转弯= 2*rand(1,P) + 1;%每个产品每距离的产品运输成本为5 - 10tcost = 5*rand(1,P) + 5;%各销售网点的产品需求在200至500之间%的产品/出口d = 300*rand(S,P) + 200;
これらのランダムな需要と能力によって実行不可能な问题につながることがあります。つまり,需要が生产と仓库の能力を超える场合があります。パラメーターを変更して実行不可能な问题が発生した场合,解を生成する际にフラグ-2が表示され。
問題の指定を開始するには,距離の配列distfw(i,j)
とdistsw (i, j)
を生成します。
distfw =零(f,w);%分配用于工厂仓库距离的矩阵为2 = 1: F为xloc(ii) - xloc(F + jj)) + abs(yloc(ii)......- Yloc(F + JJ));结束结束distsw =零(s,w);%分配矩阵用于销售Outlet-Warehouse距离为2 = 1: S为xloc = 1: xloc(F + W + ii) - xloc(F + jj)......+ abs(yloc(F + W + ii) - yloc(F + jj));结束结束
最適化問題の変数を作成します。x
は生产,つまり,次元がP
xF
xW
の連続変数を表します。y
は販売店の倉庫へのバイナリ割り当て,つまり,年代
xW
のの数をを表し。
x = optimvar (“x”, F P W,'indowbound',0);y = optimvar (“y”,年代,W,'类型','整数','indowbound',0,“UpperBound”1);
ここで制約を作成します。最初の制約は生産能力の制約です。
CAPCONSTR = SUM(x,3)<= pcap';
次の制約は各販売店における需要の充足です。
Demconstr = squeeze(sum(x,2)) == d'*y;
各各仓库にはは能能のがありありありががありありががありあり
Warecap = sum(diag(1./turn)*(d'*y),1) <= wcap';
最後に,各販売店が正しく1つの倉庫に結びついている必要があります。
销售软件= sum(y,2)== = lip(s,1);
最最化问题を作品成し。
factoryprob = optimproblem;
目の分は,生产コストの和です。
objfun1 =(金额(金额总和(x) 3)。* (pcost”),2),1);
2番目の部分は,工場から倉庫への輸送コストの和です。
objfun2 = 0;为p = 1: p objfun2 = objfun2 + tcost (p) *金额(金额(挤压(x (p::)。* distfw));结束
3番目の部分は,倉庫から販売店への輸送コストの和です。
r =总和(distsw。* y, 2);%R是一个长度的矢量v = d * (tcost (:));objfun3 = (v * r)之和;
最小化する目的関数は,この3つの部分の和です。
factoryprob.objective = objfun1 + objfun2 + objfun3;
制約を問題に含めます。
factoryprob.constraints.capconstr = capconstr;factoryprob.constraints.demconstr = demconstr;factoryprob.constraints.warecap = warecap;factoryprob.constraints.salesware = salesware;
何百もの出力の線が表示されないように,反復表示をオフにします。解決進行状況を監視するためのプロット関数を含めます。
选择= optimoptions (“intlinprog”,'展示','离开',“PlotFcn”,@ Optimplotmilp);
ソルバーソルバーを呼び出してて解を求め求め
[溶胶,fval exitflag、输出]=解决(factoryprob,'选项',选择);
如果isempty (sol)%如果问题是不可行的,或者您早期停止没有解决方案DISP(“求解器没有返回解决方案。”)返回%停止脚本,因为没有什么可以检查结束
終了フラグと解の実行不可能性を調べます。
exitflag
ExitFlag = OptimalAllyolution.
infeas1 = max (max(不可行性(capconstr,索尔)))
infeas1 = 9.0949 e-13
infeas2 = max (max(不可行性(demconstr,索尔)))
infeas2 = 8.0718 e-12
INFEAS3 = MAX(不可行(Warecap,Sol))
Infeas3 = 0.
INFEAS4 = MAX(不可发售(销售软件,溶胶))
infeas4 = 2.4425 e15汽油
厳密にに数値になるようにのy
部分を丸めます。これらの変数が厳密に整数ではない可能性がある理由を理解するには,一道の“整数”解解は数ではないを参照してください。
sol.y =圆(sol.y);得到整数解金宝搏官方网站
各仓库に关键词られている店数量いくつこのうか。このこの合,一切のはは付けられ店铺がゼロであることにてくださいくださいくださいくださいくださいくださいくださいくださいくださいくださいくださいください。ことを示します。
媒体=总和(sol.y, 1)
媒体=1×202 0 2 2 2 2 2 2 2 2 2 2 2 1 0 0 3 4 3 2 3 2 2 1
各販売店とその倉庫間の接続をプロットします。
图(h);持有在为x = 1:S jj = find(x .y(x,赋值));%与ii相关的仓库索引XSALES = XLOC(F + W + II);ysales = yloc(f + w + ii);XWAREHOUSE = XLOC(F + JJ);ywarehouse = yloc(f + jj);如果兰特(1)< 0。5%在上半场抽出y方向情节([xsales、xsales xwarehouse], [ysales、ywarehouse ywarehouse),'G - ')其他的%先画x方向其余时间plot([xsales,xwarehouse,xwarehouse],[ysales,ysales,ywarehouse],'G - ')结束结束持有从标题(“销售网点绘制到仓库”)
绿色の线がない黒い*はは用されない仓库表し表します。