这一部分是第二部分的供应链网络的设计(二)供应链的网络设计第六部分在区域内识别潜在地点的模型。

目录

一、所需输入

二、将需求分配给现有生产设施的需求分配模型

三、生产设施选址模型

四、更复杂的、有能力约束的生产设施选址模型

1.单一供货源、有能力约束的工厂选址模型

2.工厂和仓库同时选址

(1)理论模型

(2)基于java和cplex的案例


在确定了潜在设施地点后,管理者就要决定具体的设施选址并进行产能分配。除了设施选址,管理者还要决定如何将每个市场的需求分配给各个设施。进行产能分配时必须考虑到响应时间方面的顾客服务约束。随着成本和市场的变化,需求分配决策可定期进行调整。在网络设计时,通常选址决策和分配决策时同时进行的。

一、所需输入

在这一阶段,管理者需要了解以下信息:每个市场的需求、期望的响应时间、建立一个设施的固定成本、劳动力和物料的可变成本、库存持有成本、各潜在地点和市场间的运输成本、产品销售价格、税收和关税、潜在设施产能。根据以上各中成本以及税收和关税数据,就可以了解在每个地点建立设施的年固定成本,以及每个潜在地点为每个市场提供一单位供给的可变成本。

下面以两个电脑设备制造商MoonLight公司和SunShine公司为例来说明相关的网络优化模型。MoonLight公司专注于美国东部的市场,SunShine公司专注于美国西部的市场。

每个工厂的产能、市场需求、运送没钱单位产品的可变成本和运输成本,以及每个工厂的年固定成本如下表所示。

二、将需求分配给现有生产设施的需求分配模型

管理者利用该模型将需求在现有生产设施间进行分配。虽然生产设施的地点和产能变化很少,但随着需求和成本的变化,分配给每个设施的需求可以更频繁地改变。需求分配模型需要以下输入:        

该模型假设所有工厂都是运行的,所以不管实际产量如何,固定成本都会发生。目标是将来自不同市场的需求分配给不同的工厂以使设施、运输和库存的总成本变小。决策变量定义如下:

需求分配问题可以表述为以下线性规划问题:

约束条件为:

第一个约束条件是为确保所有的市场需求得到满足;第二个约束条件是为确保工厂产量不超过其产能。

这里的求解方法可参考补充1的内容,过程和结果在这里就省略了。

三、生产设施选址模型

管理者可利用这个模型进行新生产设施的选址,或者决定哪些生产设施应该关闭或继续开工。最有选址和产能分配问题与前面讨论的区域配置问题非常类似。唯一的区别在于这里使用的不是一个区域所发生的成本和关税,而是具体地点的成本和关税。

算法实现过程简单,参见补充一。

四、更复杂的、有能力约束的生产设施选址模型

现在介绍更复杂的有能力约束的生产设施选址模型。第一个模型主要用于一个市场仅由一个工厂来供货的情况。第二个模型解决的问题可概括为,在供应链中工厂和市场之间增加了一个仓库环节,所有工厂和仓库的选址都应使生产和配送的总成本最小。

1.单一供货源、有能力约束的工厂选址模型

在某些情况下,企业希望将供应链网络设计成一个市场仅由一个工厂供货,这称为单一供货源(single source)。企业之所以会强行假如这个约束,是因为它能降低网络协调的复杂度,而且对每个设施的柔性要求较低。针对这一约束条件,需要对前面讨论的工厂选址模型进行一些调整。决策变量重新定义如下:

那么,该决策问题可以表述为以下整数规划问题:

约束条件为:

第一个和第二个约束条件强制规定每个市场都是由一个工厂来供货。

这里的求解过程和前面一样,具体求解方法请参考1。

2.工厂和仓库同时选址

(1)理论模型

如果要设计的是从供应商到顾客的整个供应链网络,则要考虑一种更为普遍的工厂选址模型。让我们考虑这样一种供应链,其中供应商为工厂供应原材料,工厂想仓库供货,仓库在供货给市场。所有工厂及仓库的选址和产能分配决策必须同时确定。可以用多个仓库来满足一个市场的需求,也可以用多个工厂来对仓库进行补货。同时假设已经对计量单位进行了适当的调整,是的供应源提供的一个单位输入可以生产一个单位的产成品。该模型要求已知以下变量:        

该模型的目标是找到可以使固定成本和可变成本之和最小的工厂和仓库的选址以及各点之间的运输量。决策变量定义如下:

该决策问题可以表述为以下整数规划问题:

该目标函数是使服从以下约束条件的供应链网络的固定成本和可变成本之和最小:

上式的约束条件规定一个供应商运出的总量不能超过该供应商的产能。

上式的约束条件规定从一个工厂运出的数量不能超出其所接受的原材料数量。

上式的约束条件规定工厂所生产的数量不能超出其产能。

上式的约束条件规定从一个仓库的运出的数量不能超出启聪工厂所接受到的数量。

上式的约束条件规定从一个仓库运出的数量不能超过其产能。

上式的约束条件规定运送给一个顾客的数量必须满足其需求。

上式的约束条件规定每个工厂或仓库要么开工,要么关闭。

(2)基于java和cplex的案例

数据是瞎编的,代码思路大概如下,可能某个细节出错导致模型不可解,用的时候检查一下代码,也可在评论区指出错误。

public class ComplexData {//市场j的年需求double[] demands = {10,8,14,6,7,11};//工厂的潜在产能double[] productivity = {5,8,13,10,9};//供应商的供应能力double[] supplyCapacity = {20,20,20};//潜在仓库的产能double[] storeCapacity = {8,10,15,20,21,20};//工厂的固定成本double[] factoryFixedCost = {7650,3500,5000,4100,2200};//仓库的固定成本double[] storeFixedCost = {800,850,900,870,920,850};//从供货源运送一单位原材料到工厂i的成本double[][] supToComCost = {{2200,1500,600,1800,1200},{1600,2000,1300,700,600},{1700,1000,900,850,1250},};//从工厂到仓库的成本double[][] ComToStrCost = {{2200,1500,600,1800,1200,900},{1600,2000,1300,700,600,500},{1700,1000,900,850,1250,700},{1100,300,550,850,1250,700},{2500,1572,1320,980,750,1650},};//从仓库运送到市场的成本double[][] StrToMarCost = {{850,640,520,450,600,700},{500,600,550,350,450,580},{1200,1150,550,800,950,700},{1350,1150,550,800,950,650},{1503,520,550,800,600,840},{1235,950,750,1800,300,900},};//供应商的数量int supplierNumber = supplyCapacity.length;//潜在工厂选址的数量int companyNumber = productivity.length;//市场的数量int marketNumber = demands.length;//仓库的数量int storeNumber = storeCapacity.length;
}
import ilog.concert.IloException;
import ilog.concert.IloNumExpr;
import ilog.concert.IloNumVar;
import ilog.concert.IloNumVarType;
import ilog.cplex.IloCplex;public class ComplexModel {ComplexData data;public ComplexModel(ComplexData data) {this.data = data;}//定义cplexn内部对象IloCplex model;//定义变量//yi变量public IloNumVar[] yi;//ye变量public IloNumVar[] ye;//xej变量public IloNumVar[][] xej;//xie变量public IloNumVar[][] xie;//xhi变量public IloNumVar[][] xhi;//求解函数public void solve() throws IloException {if(model.solve()==false){System.out.println(model);System.out.println("模型不可解");} else {System.out.println(model);System.out.println("目标值:"+model.getObjValue());System.out.println("=========选择变量===========");for(int i=0;i<data.companyNumber;i++){if (model.getValue(yi[i]) != 0) {System.out.println("变量值yi[" + (i + 1) + "]");}}for(int i=0;i<data.companyNumber;i++){if (model.getValue(ye[i]) != 0) {System.out.println("变量值ye[" + (i + 1) + "]");}}System.out.println("=========分配关系===========");for(int i=0;i<data.storeNumber;i++){for(int j=0;j<data.marketNumber;j++) {if (model.getValue(xej[i][j]) != 0) {System.out.println("变量值xej[" + (i + 1) + "]["+(j+1)+"]:" + model.getValue(xej[i][j]));}}}for(int i=0;i<data.companyNumber;i++){for(int j=0;j<data.storeNumber;j++) {if (model.getValue(xie[i][j]) != 0) {System.out.println("变量值xie[" + (i + 1) + "]["+(j+1)+"]:" + model.getValue(xie[i][j]));}}}for(int i=0;i<data.supplierNumber;i++){for(int j=0;j<data.companyNumber;j++) {if (model.getValue(xhi[i][j]) != 0) {System.out.println("变量值xhi[" + (i + 1) + "]["+(j+1)+"]:" + model.getValue(xhi[i][j]));}}}}}//根据数学模型建立求解模型public void BuildModel() throws IloException{//初始化modelmodel = new IloCplex();model.setOut(null);//定义决策变量的数据类型及取值范围yi = new IloNumVar[data.companyNumber];ye = new IloNumVar[data.storeNumber];xej = new IloNumVar[data.storeNumber][data.marketNumber];xie = new IloNumVar[data.companyNumber][data.storeNumber];xhi = new IloNumVar[data.supplierNumber][data.companyNumber];for (int i = 0; i < data.companyNumber; i++) {yi[i] = model.numVar(0,1, IloNumVarType.Bool, "yi[" + i + "]");}for (int i = 0; i < data.storeNumber; i++) {ye[i] = model.numVar(0,1, IloNumVarType.Bool, "ye[" + i + "]");}for (int i = 0; i < data.storeNumber; i++) {for(int j=0;j<data.marketNumber;j++) {xej[i][j] = model.numVar(0,Double.MAX_VALUE, IloNumVarType.Int, "xej[" + i + "]["+j+"]");}}for (int i = 0; i < data.companyNumber; i++) {for(int j=0;j<data.storeNumber;j++) {xie[i][j] = model.numVar(0,Double.MAX_VALUE, IloNumVarType.Int, "xie[" + i + "]["+j+"]");}}for (int i = 0; i < data.supplierNumber; i++) {for(int j=0;j<data.companyNumber;j++) {xhi[i][j] = model.numVar(0,Double.MAX_VALUE, IloNumVarType.Int, "xhi[" + i + "]["+j+"]");}}//设置目标函数IloNumExpr obj = model.numExpr();for(int i=0;i<data.companyNumber;i++){obj = model.sum(obj,model.prod(data.factoryFixedCost[i],yi[i]));}for (int i = 0; i < data.storeNumber; i++) {obj = model.sum(obj,model.prod(data.storeFixedCost[i],ye[i]));}for (int i = 0; i < data.supplierNumber; i++) {for (int j = 0; j < data.companyNumber; j++) {obj = model.sum(obj,model.prod(data.supToComCost[i][j],xhi[i][j]));}}for (int i = 0; i < data.companyNumber; i++) {for (int j = 0; j < data.storeNumber; j++) {obj = model.sum(obj,model.prod(data.ComToStrCost[i][j],xie[i][j]));}}for (int i = 0; i < data.storeNumber; i++) {for (int j = 0; j < data.marketNumber; j++) {obj = model.sum(obj,model.prod(data.StrToMarCost[i][j],xej[i][j]));}}model.addMinimize(obj);//设置约束条件1for (int i = 0; i < data.supplierNumber; i++) {IloNumExpr expr1 = model.numExpr();for (int j = 0; j < data.companyNumber; j++) {expr1 = model.sum(expr1, xhi[i][j]);}model.addLe(expr1,data.supplyCapacity[i]);}//设置约束条件2for (int i = 0; i < data.companyNumber; i++) {IloNumExpr expr1 = model.numExpr();for (int j = 0; j < data.supplierNumber; j++) {expr1 = model.sum(expr1, xhi[j][i]);}IloNumExpr expr2 = model.numExpr();for (int j = 0; j < data.storeNumber; j++) {expr2 = model.sum(expr2, xie[i][j]);}model.addGe(expr1,expr2);}//设置约束条件3for (int i = 0; i < data.companyNumber; i++) {IloNumExpr expr1 = model.numExpr();for (int j = 0; j < data.storeNumber; j++) {expr1 = model.sum(expr1,xie[i][j]);}model.addLe(expr1,model.prod(data.productivity[i],yi[i]));}//设置约束条件4for (int i = 0; i < data.storeNumber; i++) {IloNumExpr expr1 = model.numExpr();for (int j = 0; j < data.companyNumber; j++) {expr1 = model.sum(expr1,xie[j][i]);}IloNumExpr expr2 = model.numExpr();for (int j = 0; j < data.marketNumber; j++) {expr2 = model.sum(expr1,xej[i][j]);}model.addGe(expr1,expr2);}//设置约束条件5for (int i = 0; i < data.storeNumber; i++) {IloNumExpr expr1 = model.numExpr();for (int j = 0; j < data.marketNumber; j++) {expr1 = model.sum(expr1,xej[i][j]);}model.addLe(expr1,model.prod(data.storeCapacity[i],ye[i]));}//约束条件6for (int i = 0; i < data.marketNumber; i++) {IloNumExpr expr1 = model.numExpr();for (int j = 0; j < data.storeNumber; j++) {expr1 = model.sum(expr1,xej[j][i]);}model.addEq(expr1,data.demands[i]);}//约束条件7在变量定义时已满足}
}

可以对前面所讨论的模型,通过改变目标函数和约束条件,将模型改为实现利润最大化,而不是成本最小化。

还可以对前面所讨论的模型进行调整以允许在工厂和市场之间直接运输。还可以将规模经济考虑在内。这些要求会使模型求解更难。

补充3 需求分配和工厂选址模型(工厂和仓库同时选址)——基于java和cplex的实现相关推荐

  1. 补充1 设计区域网络配置的优化模型(工厂选址模型)——基于java和cplex的实现

    这一部分是第二部分的供应链网络的设计(二)供应链的网络设计第四部分设计区域网络配置的优化模型. 目录 一.所需输入 二.有能力约束的工厂选址模型 1.利用excel进行规划求解 2.利用java和cp ...

  2. 徐州数字孪生智能工厂3D模型,3d可视化工业建模,数字工厂智能车间建设

    徐州数字孪生智能工厂3D模型,3d可视化工业建模,数字工厂智能车间建设.随着工厂车间的自动化和信息化建设,管理工厂车间的技术手段也要同步升级迭代,数字孪生工厂车间大屏可视化是利用数字孪生技术和三维可视 ...

  3. 深圳3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型

    深圳3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型.纸箱机械生产工艺流程三维建模可视化,能清楚的展示出瓦楞纸板的生产,纸板印刷工艺和纸箱成型工艺的各个环节及运行原理.造纸厂生产的卷 ...

  4. 北京3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型

    北京3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型.无论是工业4.0还是中国制造2025,智能工厂是实现以上目标的载体,更是中国制造业企业未来的发展方向.面对许多智能制造设备.生产 ...

  5. 兰州3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型

    兰州3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型.兰州在3D智慧工厂数字化建模的基础上,得出一套符合生产领域发展的定向数字化工厂建设路径.3D工厂数字化建模的基础,工厂数字化的发 ...

  6. 临沂3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维仿真模型

    临沂3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维仿真模型.智慧工厂数字化工厂建模工厂模型是对工厂布局和设备的抽象形容,智慧工厂3D设备可视化数字工厂是使用数字技术进行建模,将对智慧工 ...

  7. 芜湖3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型

    芜湖3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型.随着5G时代物联网数字孪生3D可视化的发展,芜湖3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维仿真模型在场景应用 ...

  8. 南京3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型

    南京3d可视化建模,数字孪生智慧工厂3D模型开发,智慧城市园区三维模型.伴随我国工业转型数字化的不断推进,企业厂区以智能制造为核心的智慧厂房计划正不断加速落地实施,越来越多的制造企业逐步加入工业数字化 ...

  9. 成都数字孪生工厂3D模型,三维可视化建模,三维虚拟仿真交互模型

    成都数字孪生工厂3D模型,三维可视化建模,三维虚拟仿真交互模型.数字孪生工厂基于用户需求,巨蟹数字科技采用数字孪生技术对工厂建筑在内的全要素进行1:1数字化3D建模,再集成融合现有的各类多源异构系统, ...

最新文章

  1. 【专家观点】张亚勤、张宏江:人工智能的未来是什么?
  2. 记一次通过c#运用GraphQL调用Github api
  3. mysql 一行取最大值_mysql 分组取最大值的同时获取包含最大值的行的其他字段
  4. 速修复!开源企业自动化软件 Apache OFBiz 出现严重的 RCE 漏洞
  5. sed与正则用法收集
  6. 21世纪青年人最该阅读的书籍清单
  7. http301重定向IIS 301重定向域名转向新旧域名更替
  8. vue项目中Echarts两个图表之间连接两条线
  9. 串口通信 数据采集软件 上位机 数据采集软件,可以采集plc,串口通信设备,tcp通信设备的数据
  10. 编译指示_#pragma在DSP中的编程技巧
  11. 【软考三】软设下午题第一大题--数据流图(做题)
  12. 话题 | 手机充电越充越少,90%的人都遇过这些囧事,有你吗?
  13. Gate用户手册(二)怎样运行Gate以及可视化
  14. JVM中引用计数法与可达性分析
  15. nasa注册_“NASA”商标注册案例分析
  16. C语言链表超简单教程
  17. Intellij IDEA 去除警告波浪线(Weak Warning)
  18. Unity数据读写与存档(2)Json:成为神笔马良
  19. 公告:CSDN新版首页上线
  20. 转载:群联PS2251-07主控(Kingston64G)量产CD-ROM+移动磁盘模式过程记录

热门文章

  1. vue版pdf.js 在线预览pdf文件流
  2. 【datawhale202206】pyTorch推荐系统:召回模型 DSSMYoutubeDNN
  3. 常见web中间件及其漏洞
  4. 数据压缩学习笔记(四)语音参数编码与随机信号的AR模型参数建模
  5. Centos7环境启动docker报polkit服务启动失败
  6. 笔记本 linux 还是mac,我为什么决定要买一台Mac笔记本电脑
  7. 【ogg】GoldenGate介绍
  8. GHOST系统制作教程(第一部分:实体机下进行GHOST系统制作)
  9. 核心频率个加速频率_32个框框!锐龙9 3800X上架:如此频率 不敢相信
  10. 完全卸载Solidworks