主要内容

工厂、仓库、销售分配模型:具体问题具体分析

这个例子展示了如何设置和解决混合整数线性规划问题。问题是寻找最优生产和销售水平一组工厂,仓库,和销售网点。solver-based方法,请参阅工厂、仓库、销售分配模型:Solver-Based

示例首先生成随机位置工厂,仓库,和销售网点。随意修改缩放参数 N ,尺度网格的大小,生产和分配设施存在,而且尺度这些设施的数量,这样设施的每种类型的密度网格区域是独立的 N

设施位置

对于一个给定的尺度参数的值 N ,假设有以下:

  • f N 2 工厂

  • w N 2 仓库

  • 年代 N 2 销售网点

这些设施是在不同的整数网格点和1之间 N x y 的方向。为了使设备有不同的地方,你要求 f + w + 年代 1 。在这个例子中, N = 2 0 , f = 0 0 5 , w = 0 0 5 , 年代 = 0 1

生产和销售

P 下载188bet金宝搏产品由工厂。取 P = 2 0

对每个产品的需求 p 在一个销售网点 年代 d ( 年代 , p ) 。需求是可以卖的数量在一个时间间隔。模型的一个限制是,满足需求,这意味着系统生产和分配数量的需求。

有容量限制每个工厂和仓库。

  • 生产的产品 p 在工厂 f 小于 p c 一个 p ( f , p )

  • 仓库的容量 w w c 一个 p ( w )

  • 产品的数量 p 这可以从仓库运送 w 的销售网点的时间间隔小于 t u r n ( p ) * w c 一个 p ( w ) ,在那里 t u r n ( p ) 周转率的产品 p

假设每个销售部接收其供应的一个仓库。问题的一部分是确定最便宜的销售网点映射到仓库。

成本

运输成本的产品从工厂到仓库,和从仓库到销售部,取决下载188bet金宝搏于设施之间的距离,在特定的产品。如果 d 年代 t ( 一个 , b ) 设施之间的距离吗 一个 b ,然后运输产品的成本 p 这些设施之间的距离乘以运输成本 t c o 年代 t ( p ) :

d 年代 t ( 一个 , b ) * t c o 年代 t ( p )

在这个例子中是网格距离的距离,也被称为 l 1 距离。这是绝对不同的总和 x 坐标和 y 坐标。

使单位产品的成本 p 在工厂 f p c o 年代 t ( f , p )

优化问题

给定一组设备的位置和要求和能力约束,发现:

  • 每个产品的生产水平在每个工厂

  • 产品从工厂到仓库的分配计划下载188bet金宝搏

  • 一个分布安排产品从仓库到销售网点下载188bet金宝搏

这些量必须确保需求被满足,总成本最小化。同时,要求每一个销售网点收到所有的产品从一个仓库。下载188bet金宝搏

变量和方程的优化问题

控制变量,这意味着你可以改变的优化

  • x ( p , f , w ) =产品的数量 p 从工厂运输 f 到仓库 w

  • y ( 年代 , w ) =一个二进制变量值1当销售网点 年代 与仓库 w

目标函数最小化

f p w x ( p , f , w ) ( p c o 年代 t ( f , p ) + t c o 年代 t ( p ) d 年代 t ( f , w ) )

+ 年代 w p ( d ( 年代 , p ) t c o 年代 t ( p ) d 年代 t ( 年代 , w ) y ( 年代 , w ) )

的约束

w x ( p , f , w ) p c 一个 p ( f , p ) (工厂)的能力。

f x ( p , f , w ) = 年代 ( d ( 年代 , p ) y ( 年代 , w ) ) (满足需求)。

p 年代 d ( 年代 , p ) t u r n ( p ) y ( 年代 , w ) w c 一个 p ( w ) (仓库)的能力。

w y ( 年代 , w ) = 1 (每个销售部同事一个仓库)。

x ( p , f , w ) 0 (非负生产)。

y ( 年代 , w ) ϵ { 0 , 1 } (二进制 y )。

的变量 x y 出现在目标和约束函数的线性。因为 y 被限制为整数值,问题是一个混合整数线性规划(MILP)。

生成一个随机的问题:设施的位置

设置的值 N , f , w , 年代 参数,并生成设备的位置。

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])

图包含一个坐标轴对象。坐标轴对象包含3线类型的对象。一个或多个行显示的值只使用这些对象标记代表工厂,仓库,销售网点。

生成随机能力,成本,和要求

生成随机生产成本,能力,流动率和要求。

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:Fjj = 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:Sjj = 1: W distsw (ii, jj) = abs (xloc (F + W + 2)——xloc (F + jj))+ abs (yloc (F + W + 2)——yloc (F + jj));结束结束

创建变量的优化问题。x代表生产,连续变量,维度P——- - - - - -F——- - - - - -Wy代表二进制的销售网点分配仓库,一个年代——- - - - - -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,“选项”、选择);

图优化函数包含一个坐标轴对象。坐标轴对象和标题最好的目的:3.0952 e + 07年,相对间隙:0。,xlabel Number of nodes, ylabel Objective value contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Root LB, Cuts LB, Heuristics UB, New Solution.

如果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——”)结束结束持有标题(销售网点仓库的映射)

图包含一个坐标轴对象。坐标轴对象与标题映射的销售网点仓库包含43行类型的对象。一个或多个行显示的值只使用这些对象标记代表工厂,仓库,销售网点。

黑色*没有绿线代表了未使用的仓库。

相关的话题