主要内容

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

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

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

肥料および原料

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

负载肥料混合= blendDemand.Properties.VariableNames化肥产量%
混合=1x2电池{'平衡'}{' HighN '}
营养= rawNutrients.Properties.RowNames
营养素=3 x1细胞{'N'}{'P'}{'K'}
画= rawNutrients.Properties.VariableNames%的原材料
罗尔斯=1x6电池{'MAP'} {'Potash'} {'AN'} {'AS'} {'TSP'} {'Sand'}

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

disp (blendNutrients)%这张表是用百分比表示的
平衡高点10点10点10点10

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

副主任(营养素)%这张表是用百分比表示的
将钾盐映射为TSP砂uuuuuuuuuuuuuuuuuuuuuuuuuuuun 11 0 35 21 0 P 48 0 0 0 46 0 K 0 60 0 0 0 0 0 0 0

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

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

nBlends=长度(混合);nRaws=长度(raws);NN营养素=长度(营养素);

需要および収益の予測

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

disp (blendDemand)
平衡高点:1月750日2月800日3月900日4月850日400日5月700日350日6月700日7月700日200日8月600日9月600日10月550日11月550日200日12月550日200

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

disp (blendPrice)
平衡HighN ________ _____ 400 550

原材料の価格

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

显示(原始成本)
地图钾肥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月310 600 300 125 24080 11月310 600 300 125 240 80 12月340 600 300 125 240 80

保管コスト

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

disp(库存成本)
10

容量の制約

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

disp(库存容量)
1000

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

主任(生产能力)
1200

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

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

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

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

月份=blendDemand.Properties.RowNames;n月=长度(月);

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

存货(1,产品)=初始存货(产品)+生产(1,产品)-销售(1,产品)

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

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

最適化問題の定式化

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

inventoryProblem = optimproblem (“客观感觉”,“最大化”);

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

make=optimvar(“制造”,几个月,混合,“LowerBound”,0);sell=optimvar(“出售”,几个月,混合,“LowerBound”,0,“上限”blendDemand{月,混合});使用= optimvar (“使用”,月,画,混合,“LowerBound”, 0);

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

存货=最优值(“库存”,几个月,混合,“LowerBound”,0,“上限”,存货能力);

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

收入=总和(blendPrice{1,}。*总和(销售(月,混合),1));

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

blendsUsed=sum(使用(月份,未提取,混合),3);IngrediteCost=sum(未提取成本{月份,未提取}.*blendsUsed));

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

存储成本=库存成本*总和(库存(:);

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

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

問題の制約

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

materialBalance = optimconstr(月、混合);timeAbove1 =月(2:结束);previousTime =月(1:end-1);materialBalance(timeAbove1,:) = inventory(timeAbove1,:) == inventory(previousTime,:) +...制造(timeAbove1:) -销售(timeAbove1:);materialBalance(1,:) = inventory(1,:) == blendInventory{“首字母”,:} +...制造(1,:)-出售(1,:);

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

finalC = inventory(end,:) == blendInventory{“决赛”,:};

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

boundedInv = sum(inventory,2) <= inventoryCapacity;

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

加工极限=总和(制造,2)<=生产能力;

配合ごとに毎月生産される量は、使用する原材料の量です。関数挤压は,合計を尼蒙斯x1xnblendsの配列から尼蒙斯nblends列の配列に変換します。

rawMaterialUse = squeeze(sum(use(months,raws,共混),2))== make(months,共混);

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

blendNutrientsQuality = optimconstr(个月,营养,混合);对于m=1:N个月对于b=1:N贷款对于n = 1:nNutrients blendNutrientsQuality(m,n,b) = rawNutrients{n,raws}*use(m,raws)' == 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]=解决(库存问题)
使用linprog解决问题。找到最优解。
索尔=结构体字段:库存:[12x2双精度]制造:[12x2双精度]销售:[12x2双精度]使用:[12x6x2双精度]
fval=2.2474e+06
exitflag=最优解
输出=结构体字段:迭代次数:162次:5.4570e-12消息:“找到最佳解决方案”。算法:“双单纯形”firstorderopt:6.5235e-12解算器:“linprog”

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

如果exitflag>0 fprintf(“利润:% g \ n”, fval);市场= array2table (sol.make,“RowNames”,月,“变化无常”, strcat (“制造”共混物);sellT=阵列2表(sol.sell,“RowNames”,月,“变化无常”, strcat (“出售”,混合);storeT=array2table(sol.inventory,“RowNames”,月,“变化无常”, strcat (“存储”共混物);productionPlanT=[makeT sellT storeT]图子地块(3,1,1)条形图(sol.make)图例(“平衡”,“高”,“位置”,“eastoutside”)标题(“数量”)子地块(3,1,2)条形图(sol.sell)图例(“平衡”,“高”,“位置”,“eastoutside”)标题(“售出金额”) subplot(3,1,3) bar(sol.inventory) legend(“平衡”,“高”,“位置”,“eastoutside”)标题(“存储量”)包含(“时间”)终止
利润:2.24739 e + 06
productionPlanT =12×6表平衡的makemamamamakemamamamamamamamamamakemamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamama卖卖卖卖卖卖卖平衡卖卖卖卖卖卖卖卖卖高高高卖商店商店商店商店商店商店平衡商店商店商店商店商店平衡商店商店商店商店商店商店商店商店平衡平衡商店商店商店商店商店商店商店商店商店商店商店商店商店商店商店商店商店商店商店平衡的平衡商店商店卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖卖700 300 0 7月700 200 200 0 8月600 60020000年9月60020060020000年10月55020055020000年11月55020055020000年12月750400550200200

图中包含3个轴。标题金额已生成的轴1包含2个条形图类型的对象。这些对象表示平衡的HighN。标题金额已售出的轴2包含2个条形图类型的对象。这些对象表示平衡的HighN。标题金额已存储的轴3包含2个条形图类型的对象。这些对象表示平衡的HighN。

関連するトピック