主要内容

工厂,仓库,销售分配模型:基于问题的

此示例显示了如何设置和解决混合整数线性编程问题。问题是在一套工厂,仓库和销售网点中找到最佳的生产和分销水平。对于基于求解器的方法,请参阅工厂,仓库,销售分配模型:基于求解器

该示例首先为工厂,仓库和销售网点生成随机位置。随时修改缩放参数 N ,它缩放了生产和配送设施所在的网格的大小,但也缩放了这些设施的数量,使每个网格区域的每种类型的设施密度独立于 N

设施位置

对于给定的缩放参数值 N ,假设有以下内容:

  • F N 2 工厂

  • W. N 2 仓库

  • S. N 2 销售网点

这些设施位于1和之间的单独整数网格点上 N X y 的方向。为了让这些设施有单独的位置,你需要这样做 F + W. + S. 1 .在本例中,取 N = 2 0. F = 0. 0. 5. W. = 0. 0. 5. , S. = 0. 1

生产和分配

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

每一种产品的需求 P. 在销售出口 S. D. S. P. .需求是一段时间内可以出售的数量。模型的一个约束条件是需求得到满足,这意味着系统生产和分配的数量恰好满足需求。

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

  • 产品的生产 P. 在工厂 F 小于 P. C 一种 P. F P.

  • 仓库容量 W. W. C 一种 P. W.

  • 产品数量 P. 可以从仓库运输 W. 给一个销售网点的时间间隔小于 T. R. N P. * W. C 一种 P. W. ,在那里 T. R. N P. 是产品的营业额率 P.

假设每个销售插座从一个仓库收到其耗材。部分问题是确定销售网点的最便宜映射到仓库。

成本

从工厂到仓库以及从仓库到销售点运输产品的成本取决于下载188bet金宝搏设备之间的距离,以及具体的产品。如果 D. 一世 S. T. 一种 B. 设施之间的距离如何 一种 B. ,然后是产品的运输成本 P. 这些设施之间的距离乘以运输成本 T. C O. S. T. P.

D. 一世 S. T. 一种 B. * T. C O. S. T. P.

该示例中的距离是网格距离,也称为 L. 1 距离。这是绝对差异的总和 X 坐标和 y 坐标。

制作产品单位的成本 P. 在工厂 F P. C O. S. T. F P.

优化问题

给定一套设施位置,以及需求和容量约束,查找:

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

  • 从工厂到仓库的产品的分配时间表下载188bet金宝搏

  • 产品从仓库到销售点的分配时间表下载188bet金宝搏

这些数量必须确保满足需求,并且总成本最小化。此外,每个销售渠道都需要从一个仓库中收到所有产品。下载188bet金宝搏

优化问题的变量和方程

控制变量,也就是你可以在优化过程中改变的变量

  • X P. F W. =产品数量 P. 那是从工厂运来的 F 到仓库 W.

  • y S. W. =一个值为1的二元变量 S. 与仓库相关 W.

最小化的目标函数为

F P. W. X P. F W. P. C O. S. T. F P. + T. C O. S. T. P. D. 一世 S. T. F W.

+ S. W. P. D. S. P. T. C O. S. T. P. D. 一世 S. T. S. W. y S. W.

的约束

W. X P. F W. P. C 一种 P. F P. (工厂)的能力。

F X P. F W. = S. D. S. P. y S. W. (满足需求)。

P. S. D. S. P. T. R. N P. y S. W. W. C 一种 P. W. (仓库的容量)。

W. y S. W. = 1 (每个销售网点对应一个仓库)。

X P. F W. 0. (非负生产)。

y S. W. ϵ { 0. 1 } (二进制 y )。

的变量 X y 线性地出现在目标函数和约束函数中。因为 y 仅限于整数值,问题是混合整数线性程序(MILP)。

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

设置值的值 N F W. , S. 参数,并生成设施位置。

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+W+1到F+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 * rand(f,p)+ 20;每种产品/工厂的500平方程的产能率为500和1500pcap = 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到10之间tcost = 5*rand(1,P) + 5;%各销售网点的产品需求在200 - 500之间%的产品/出口d = 300*rand(S,P) + 200;

这些随机需求和容量可能导致不可行的问题。换句话说,有时需求超过了生产和仓库容量限制。如果您更改了一些参数并获得了一个不可行的问题,在解决方案期间,您将获得-2的ExitFlag。

生成变量和约束

要开始指定问题,请生成距离数组distfw (i, j)DISTSW(I,J)

distfw = 0 (F, W);按工厂-仓库距离分配矩阵为了2 = 1: F为了jj = 1:W disfw (ii,jj) = abs(xloc(ii) - xloc(F + jj)) + abs(yloc(ii))...- yloc(F + jj);结尾结尾distsw = 0 (S, W);%分配销售网点-仓库距离矩阵为了2 = 1: S为了JJ = 1:W DISTSW(II,JJ)= ABS(XLOC(F + W + II) -  XLOC(F + JJ))...+ ABS(YLOC(F + W + II) -  YLOC(F + JJ));结尾结尾

为优化问题创建变量。X表示生产,一个连续变量,带有维度P.——- - - - - -F——- - - - - -W.y表示销售渠道到仓库、仓库和仓库的二元分配S.——- - - - - -W.变量。

x = Optimvar('X', F P W,下界的,0);y = Optimvar('是',年代,W,“类型”“整数”下界的0,'上行',1);

现在创建约束。第一个约束是生产能力的约束。

Capconstr = sum(x,3) <= pcap';

下一个约束是每个销售插座都会满足需求。

Demconstr =挤压(总和(x,2))== d'* y;

每个仓库都有容量限制。

warecap = sum(diag(1./turn)*(d'* y),1)<= wcap';

最后,还要求每个销售网点精确地连接到一个仓库。

salesware = sum(y,2) = ones(S,1);

创造问题和目标

创造一个优化问题。

FactoryProb = OptimProbled;

目标函数由三部分组成。第一部分是生产成本的总和。

objfun1 = sum(sum(sum(x,3)。*(pcost'),2),1);

第二部分是工厂到仓库的运输成本之和。

objfun2 = 0;为了p = 1:p objfun2 = objfun2 + tcost(p)* sum(sum(queeze(p::))。* distfw));结尾

第三部分是仓库到销售点的运输成本之和。

r = sum(distsw。* y,2);% r是一个长度s的向量v = d *(tcost(:));objfun3 = sum(v。* r);

最小化的目标函数是三个部分的总和。

factoryprob。对象= objfun1 + objfun2 + objfun3;

在问题中包含约束条件。

factoryprob.Constraints.capconstr = capconstr;factoryprob.Constraints.demconstr = demconstr;factoryprob.Constraints.warecap = warecap;factoryprob.Constraints.salesware = salesware;

解决这个问题

关闭迭代显示,以便您没有获得数百行输出。包括监视解决方案进度的绘图功能。

opts = Optimoptions('intlinprog'“显示”“关闭”'plotfcn', @optimplotmilp);

调用求解器来找到解决方案。

[SOL,FVAL,EXITFLAG,输出] =求解(FactoryProb,“选项”、选择);

图优化Plot函数包含一个轴。最佳目标:3.0952e+07,相对间隙:0。包含4个类型为line的对象。这些对象代表Root LB, Cuts LB, Heuristics UB, New Solution。

如果isempty(sol)如果问题不可行,或者你因为没有解决方案而提前停止disp (解算器没有返回解。返回%停止脚本,因为没有要检查的内容结尾

检查解决方案

检查退出标志和解决方案的不可行性。

ExitFlag.
exitflag = OptimalSolution
infeas1 = max (max(不可行性(capconstr,索尔)))
Infeas1 = 9.0949e-13
infeas2 = max (max(不可行性(demconstr,索尔)))
Infeas2 = 8.0718E-12
infeas3 = max(不可行性(warecap,索尔))
infeas3 = 0
infeas4 = max(不可行性(salesware,索尔))
infeas4 = 2.4425 e15汽油

y解的一部分是整数值。要理解为什么这些变量可能不是整数,请参见一些“整数”解不是整数金宝搏官方网站

sol.y =圆(sol.y);得到整数解金宝搏官方网站

每个仓库有多少销售网点?请注意,在本例中,有些仓库有0个关联出口,这意味着在最佳解决方案中没有使用这些仓库。

Outlets = sum(sol.y,1)
outlets =1×202 0 3 2 2 2 3 2 3 2 1 0 0 3 4 3 2 3 2 1

绘制每个销售网点与仓库之间的联系图。

图(h);抓住为了ii = 1:S jj = find(sol.y(ii,:));与ii相关的仓库指数%xsales = xloc (F + W + 2);ysales = yloc (F + W + 2);xwarehouse = xloc (F + jj);ywarehouse = yloc (F + jj);如果兰特(1)< 0。5前半段时间画y方向plot([xsales,xsales,xwarehouse],[ysales,ywarehouse,ywarehouse],“g——”别的%其余时间先画x方向情节([xsales、xwarehouse xwarehouse], [ysales、ysales ywarehouse),“g——”结尾结尾抓住离开标题(“销售网点到仓库的映射”

图中包含一个坐标轴。标题为“sales outlets to warehouse Mapping”的坐标轴包含43个line类型的对象。这些对象代表工厂、仓库、销售网点。

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

相关的话题