工厂、仓库、销售分配模型:具体问题具体分析
这个例子展示了如何设置和解决混合整数线性规划问题。问题是寻找最优生产和销售水平一组工厂,仓库,和销售网点。solver-based方法,请参阅工厂、仓库、销售分配模型:Solver-Based。
示例首先生成随机位置工厂,仓库,和销售网点。随意修改缩放参数 ,尺度网格的大小,生产和分配设施存在,而且尺度这些设施的数量,这样设施的每种类型的密度网格区域是独立的 。
设施位置
对于一个给定的尺度参数的值 ,假设有以下:
工厂
仓库
销售网点
这些设施是在不同的整数网格点和1之间 在 和 的方向。为了使设备有不同的地方,你要求 。在这个例子中, , , , 。
生产和销售
有 下载188bet金宝搏产品由工厂。取 。
对每个产品的需求 在一个销售网点 是 。需求是可以卖的数量在一个时间间隔。模型的一个限制是,满足需求,这意味着系统生产和分配数量的需求。
有容量限制每个工厂和仓库。
生产的产品 在工厂 小于 。
仓库的容量 是 。
产品的数量 这可以从仓库运送 的销售网点的时间间隔小于 ,在那里 周转率的产品 。
假设每个销售部接收其供应的一个仓库。问题的一部分是确定最便宜的销售网点映射到仓库。
成本
运输成本的产品从工厂到仓库,和从仓库到销售部,取决下载188bet金宝搏于设施之间的距离,在特定的产品。如果 设施之间的距离吗 和 ,然后运输产品的成本 这些设施之间的距离乘以运输成本 :
在这个例子中是网格距离的距离,也被称为 距离。这是绝对不同的总和 坐标和 坐标。
使单位产品的成本 在工厂 是 。
优化问题
给定一组设备的位置和要求和能力约束,发现:
每个产品的生产水平在每个工厂
产品从工厂到仓库的分配计划下载188bet金宝搏
一个分布安排产品从仓库到销售网点下载188bet金宝搏
这些量必须确保需求被满足,总成本最小化。同时,要求每一个销售网点收到所有的产品从一个仓库。下载188bet金宝搏
变量和方程的优化问题
控制变量,这意味着你可以改变的优化
=产品的数量 从工厂运输 到仓库
=一个二进制变量值1当销售网点 与仓库
目标函数最小化
的约束
(工厂)的能力。
(满足需求)。
(仓库)的能力。
(每个销售部同事一个仓库)。
(非负生产)。
(二进制 )。
的变量 和 出现在目标和约束函数的线性。因为 被限制为整数值,问题是一个混合整数线性规划(MILP)。
生成一个随机的问题:设施的位置
设置的值 , , , 参数,并生成设备的位置。
rng (1)%的再现性N = 20;% N从10到30似乎工作。小心选择大值。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 + 1通过F + W是仓库,通过F和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。自动更新=“关闭”;xlim ([0 N + 1]); ylim ([0 N + 1])
生成随机能力,成本,和要求
生成随机生产成本,能力,流动率和要求。
P = 20;% 20产下载188bet金宝搏品% 20和100之间的生产成本pcost = 80 *兰德(F P) + 20;%的生产能力为每个产品/工厂在500年和1500年之间pcap兰德(F P) + = 1000 * 500;% P * 400和P之间仓库容量* 800为每个产品/仓库wcap = P * 400 *兰德(W, 1) + P * 400;% 1和3之间的产品周转率为每个产品把兰德(1,P) + = 2 * 1;%产品运输成本为每个产品每5和10之间的距离tcost = 5 *兰德(1,P) + 5;%由销售部产品需求在200年和500年之间%的产品/出口d = 300 *兰德(S, P) + 200;
这些随机需求和能力可以导致不可行的问题。换句话说,有时需求超过了生产和仓库容量约束。如果你改变一些参数,得到一个不可行问题,在解决方案你会得到一个exitflag 2。
生成的变量和约束
开始指定问题,生成的距离数组distfw (i, j)
和distsw (i, j)
。
distfw = 0 (F, W);%分配矩阵工厂仓库的距离为2 = 1:F为jj = 1: W distfw (ii, jj) = abs (xloc (ii)——xloc (F + jj)) + abs (yloc (2)…——yloc (F + jj));结束结束distsw = 0 (S, W);%为销售outlet-warehouse距离分配矩阵为2 = 1:S为jj = 1: W distsw (ii, jj) = abs (xloc (F + W + 2)——xloc (F + jj))…+ abs (yloc (F + W + 2)——yloc (F + jj));结束结束
创建变量的优化问题。x
代表生产,连续变量,维度P
——- - - - - -F
——- - - - - -W
。y
代表二进制的销售网点分配仓库,一个年代
——- - - - - -W
变量。
x = optimvar (“x”,F P W,下界的,0);y = optimvar (“y”,年代,W,“类型”,“整数”,下界的0,“UpperBound”1);
现在创建约束。第一个约束是制约生产能力。
capconstr =总和(x, 3) < = pcap ';
下一个约束是满足需求在每一个销售网点。
demconstr =挤压(sum (x, 2)) = = d ' * y;
有一个在每个仓库容量约束。
warecap =总和(诊断接头(1. /把)* (d ' * y), 1) < = wcap ';
最后,还有一个要求,每个销售网点连接到一个仓库。
salesware = (y, 2) = =的总和(S, 1);
创建问题和客观
创建一个优化问题。
factoryprob = optimproblem;
目标函数有三个部分。第一部分是生产成本的总和。
objfun1 =(金额(金额总和(x) 3)。* (pcost”), 2), 1);
第二部分是运输成本之和从工厂到仓库。
objfun2 = 0;为p = 1: p objfun2 = objfun2 + tcost (p) *金额(金额(挤压(x (p::)。* distfw));结束
第三部分是运输成本之和从仓库到销售网点。
r =总和(distsw。* y, 2);% r是长度的向量v = d * (tcost (:));objfun3 = (v * r)之和;
目标函数最小化三个部分之和。
factoryprob。目标= 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 = OptimalSolution
infeas1 = max (max(不可行性(capconstr,索尔)))
infeas1 = 2.3647 e-11
infeas2 = max (max(不可行性(demconstr,索尔)))
infeas2 = 2.2737 e-13
infeas3 = max(不可行性(warecap,索尔))
infeas3 = 0
infeas4 = max(不可行性(salesware,索尔))
infeas4 = 8.8818 e-16
在y
部分解决方案完全整数值。准确理解为什么这些变量可能不是整数,明白了一些“整数”解决方案不是整数金宝搏官方网站。
sol.y =圆(sol.y);%得到整数解金宝搏官方网站
有多少销售网点与每个仓库吗?注意,在这种情况下,一些仓库有0相关媒体,这意味着在用的仓库并不是最优的解决方案。
媒体=总和(sol.y, 1)
媒体=1×203 0 3 2 2 2 3 2 3 1 1 0 0 3 4 3 2 3 2 1
阴谋每个销售渠道及其之间的联系仓库。
图(h);持有在为2 = 1:S jj =找到(sol.y (ii):));%仓库相关的指数xsales = xloc (F + W + 2);ysales = yloc (F + W + 2);xwarehouse = xloc (F + jj);ywarehouse = yloc (F + jj);如果兰特(1)< 0。5%画y方向第一一半的时间情节([xsales、xsales xwarehouse], [ysales、ywarehouse ywarehouse),“g——”)其他的%画x方向第一个其余的时间情节([xsales、xwarehouse xwarehouse], [ysales、ysales ywarehouse),“g——”)结束结束持有从标题(销售网点仓库的映射)
黑色*没有绿线代表了未使用的仓库。