主要内容

問題ベ,スフレ,ムワ,クでの多期間にわたる在庫モデルの作成

この例では,問題ベ,スフレ,ムワ,クで多期間にわたる在庫モデルを作成する方法を示します。問題は,経時的コスト変動が予測できるさまざまな原料を使用した,ある期間の配合肥料の生産スケジュールを設定することです。あらかじめ,肥料への需要はわかっているものとします。目的は,需要を満たしながら利益を最大化することです。コストは,原材料の購入と経時的な肥料の保管にかかります。将来またはその他の契約を使用して,あらかじめコストを求めることができます。

肥料および原料

粒状肥料には,窒素(n),リン(p),カリウム(k)が栄養素として含まれています。次の原材料を配合して,必須栄養素を含む配合肥料を取得できます。

负载肥料混合物= blendDemand.Properties.VariableNames生产化肥的百分比
混合=1 x2单元格{'平衡'}{' HighN '}
营养素= rawNutrients.Properties.RowNames
营养=3 x1细胞{' n '} {' p '} {' k '}
rawes = rawNutrients.Properties.VariableNames%原材料
画=1 x6单元格{'MAP'} {'Potash'} {'AN'} {'AS'} {'TSP'} {'Sand'}

2つの配合肥料は,“HighN”配合でNが10%追加され合計20%であることを除き,同じ栄養素要件(10% 10% 10% N, P, K重量比)です。

disp (blendNutrients)表以百分比表示
平衡高N ________ _____ N 10 20 P 10 10 K 10 10

原材料の名前と栄養素の重量比は次のとおりです。

disp (rawNutrients)表以百分比表示
MAP钾AN AS TSP砂___ ______ ____ ___ ____ N 11 0 35 21 0 0 P 48 0 0 0 46 0 K 0 60 0 0 0 0 0

原材料沙子には栄養素はありません。沙子は、必要に応じて他の原料を希釈し、栄養素の必要な割合 (重量比) を実現します。

これらの各量の数を変数に格納します。

n混合物=长度(混合物);nRaws =长度(raws);nNutrients =长度(营养素);

需要および収益の予測

あらかじめ,問題内の期間における2つの配合肥料の需要(重量,トン)はわかっているものとします。

disp (blendDemand)
平衡高地________ _____ 1月750 300 2月800 310 3月900 600 4月850 400 5月700 350 6月700 300 7月700 200 8月600 200 9月600 200 10月550 200 11月550 200 12月550 200

配合肥料を販売する際のトン単位の価格はわかっています。これらのトン単位の価格は時間に左右されません。

disp (blendPrice)
平衡高地________ _____ 400 550

原材料の価格

あらかじめ,原材料のトン単位の価格はわかっているものとします。これらのトン単位の価格は,次の表に従い,時間によって異なります。

disp (rawCost)
地图钾肥TSP沙子  ___ ______ ___ ___ ___ ____ 630年1月360年2月350 610 300 135 250 80 300 140 275 80 350 630 300 135 275 80 3月350年4月320年5月610 300 125 250 80 600 300 125 250 80 320 600 300 125 250 80 6月7月8月320 600 300 125 250 80 320 600 300 125 240 80 320 600 300 125 240 80 9月10月11月310 600 300 125 240 80 310 600 300 125 240 80 600 300 125 240 80 340年12月

保管コスト

配合した肥料を保管するためのコストは,トン単位と時間単位で適用されます。

disp (inventoryCost)
10

容量の制約

どの期間でも,配合肥料は合計inventoryCapacityトン以下しか保管できません。

disp (inventoryCapacity)
1000

どの期間においても,合計productionCapacityトン以下しか生産できません。

disp (productionCapacity)
1200

生産,販売および在庫の関係

使用可能な配合肥料が一定量ある(在庫がある)状態でスケジュルを開始します。最終期間にはこの在庫の特定のタ,ゲットがあります。各期間で,配合肥料の量は直前の期間の終了時の量に生産量を加えたものから,販売量を引いた量です。1より大きい期間にいて,

库存(时间,产品)=库存(时间-1,产品)+产量(时间,产品)-销量(时间,产品)

この式は,在庫が期間の終わりにカウントされることを意味しています。問題の期間は次のとおりです。

months = blendDemand.Properties.RowNames;nMonths =长度(月);

次のように,初期在庫は期間1の在庫に影響します。

库存(1,产品)= initial库存(产品)+生产(1,产品)-销售(1,产品)

初期在庫は,デ,タblendInventory{“初始”:}にあります。最終在庫は,デ,タblendInventory{“最终”:}にあります。

満たされなかった需要は失われるものとします。まり,期間内に注文を満たすことができない場合,超過分の注文は次の期間に繰り越されません。

最適化問題の定式化

この問題の目的関数は利益で,その最大化を目指します。そのため,問題ベ,スフレ,ムワ,クで最大化問題を作成します。

inventoryProblem = optimproblem(“ObjectiveSense”“最大化”);

問題の変数は,毎月生産および販売する配合肥料の数量と,それらの配合を生産するために使用する原材料です。出售の上限は,各期間の各配合肥料に対して,需要blendDemandです。

Make = optimvar(“使”,几个月,混合,下界的, 0);卖出= optimvar(“卖出”,几个月,混合,下界的0,“UpperBound”blendDemand{月,混合});使用= optimvar(“使用”,月,画,混合,下界的, 0);

さらに,各時点の在庫を表す変数を作成します。

库存= optimvar(“库存”,几个月,混合,下界的0,“UpperBound”, inventoryCapacity);

問題変数に関して目的関数を計算するには,収益とコストを計算します。収益は,各配合肥料の販売量に価格を乗算し,それをすべての期間と配合にいて合算した金額です。

收益= sum(blendPrice{1,:}.*sum(出售(月份,混合),1));

原料のコストは,各時点で使用された各原料のコストを,すべての期間にいて合算した値です。各期間で使用された金額は,配合ごとに使用された金額に分けられるため,これも配合全体で合算します。

blendsUsed = sum(使用(月份,raw,混合物),3);配料成本= sum(sum(rawCost{months,raws}.*blendsUsed));

保管コストは,各期間で在庫の保管にかかったコストを,期間と配合にいて合算した値です。

存储成本=库存成本*sum(库存(:));

ここで,ドット表記を使用して,問題の客观的プロパティに目的関数を配置します。

inventoryProblem。客观的= revenue - ingredientCost - storageCost;

問題の制約

問題にはいくかの制約があります。最初に,問題変数の一連の制約として在庫の式を表します。

materialBalance = optimconstr(月份,混合);timeAbove1 = months(2:结束);previousTime = months(1:end-1);materialBalance(timeAbove1,:) = inventory(timeAbove1,:) == inventory(previousTime,:) +...make(timeAbove1,:) - sell(timeAbove1,:);materialBalance(1,:) =库存(1,:)== blendInventory{“初始”:} +...Make (1,:) - sell(1,:);

同様に,最終的な在庫が固定であるという制約を表します。

finalC =库存(end,:) == blendInventory{“最后一次”,:};

各時点の在庫の合計は制限されています。

boundedInv = sum(库存,2)<=库存容量;

各期間には制限された量まで生産できます。

processLimit = sum(make,2) <= productionCapacity;

配合ごとに毎月生産される量は,使用する原材料の量です。関数挤压は,合計をnmonthsX 1 Xnblendsの配列からnmonthsnblends列の配列に変換します。

rawMaterialUse =挤压(sum(使用(月份,raw,混合物),2))== make(月份,混合物);

各配合の栄養素は,必要な値をもたなければなりません。次の内部ステ,トメントでは,乗算rawNutrients {n,画}*使用(m,画,b) 'が使用された原材料にいて各時点の栄養素の値を合算しています。

blendNutrientsQuality = optimconstr(月份,营养素,混合物);m = 1:nMonthsb = 1:n次混合n = 1:nNutrients blendNutrientsQuality(m,n,b) = rawNutrients{n,raws}*use(m,raws,b)' == blendNutrients{n,b}*make(m,b);结束结束结束

制約を問題に配置します。

inventoryProblem.Constraints.materialBalance = materialBalance;inventoryProblem.Constraints.finalC = finalC;inventoryProblem.Constraints.boundedInv = boundedInv;inventoryProblem.Constraints.processLimit = processLimit;inventoryProblem.Constraints.rawMaterialUse = rawMaterialUse;inventoryProblem.Constraints.blendNutrientsQuality = blendNutrientsQuality;

問題を解く

問題の定式化は完了です。問題を解きます。

[sol,fval,exitflag,output] = solve(inventoryProblem)
用linprog解决问题。找到最优解。
索尔=带字段的结构:库存:[12x2 double]制造:[12x2 double]销售:[12x2 double]使用:[12x6x2 double]
Fval = 2.2474e+06
exitflag = OptimalSolution
输出=带字段的结构:消息:'找到最佳解决方案。firstorderopt: 6.5235e-12 solver: 'linprog'

結果を表形式とグラフ形式で表示します。

如果退出> 0 fprintf(“利润:% g \ n”, fval);= array2table(sol.make,“RowNames”个月,“VariableNames”, strcat (“使”、混合));selt = array2table(sol.sell,“RowNames”个月,“VariableNames”, strcat (“卖出”、混合));storeT = array2table(sol.inventory,“RowNames”个月,“VariableNames”, strcat (“存储”、混合));productionPlanT = [makeT selt storeT]图subplot(3,1,1) bar(sol.make)图例(“平衡”“HighN”“位置”“eastoutside”)标题(“数量”) subplot(3,1,2) bar(sol.sell)图例(“平衡”“HighN”“位置”“eastoutside”)标题(的销售数量) subplot(3,1,3) bar(sol.inventory)图例(“平衡”“HighN”“位置”“eastoutside”)标题(量存储的)包含(“时间”结束
利润:2.24739 e + 06
productionPlanT =12×6表makeBalanced makeHighN sellBalanced sellHighN storeBalanced storeHighN  ____________ _________ ____________ _________ _____________ __________ 1100年1月600年2月100 750 300 550 0 310 800 310 350 0 600年3月550 650 900 0 850年4月350年5月700 350 700 350 850 400 0 0 0 0 700年6月200年7月700 200 700 300 700 300 0 0 0 0 600年8月200年9月600 200 600 200 600 200 0 0 0 0 550年10月200年11月550 200 550 200 550 200 0 0 0 0 400 550 200 200 200 750年12月

图中包含3个轴对象。标题为Amount Made的Axes对象1包含2个类型为bar的对象。这些对象代表Balanced, HighN。标题为Amount Sold的坐标轴对象2包含2个类型为bar的对象。这些对象代表Balanced, HighN。标题为Amount Stored的Axes对象3包含2个类型为bar的对象。这些对象代表Balanced, HighN。

関連するトピック