设施。R


设施。R


# #设施位置:一家公司目前将其产品狗万app足彩从5个工厂#运往4个仓库。狗万滚球球它正在考虑关闭一些工厂以降低成本。为了减少运输和固定成本,公司应该关闭哪些工厂?狗万滚球球# #注意这个例子使用的是列表而不是字典。因为#不能处理稀疏数据,所以列表是一个合理的选择。# #基于来自Frontline Systems的例子:# http://www.solver.com/disfacili手机万博登录ty.htm #经过许可使用。库(矩阵)库(gurobi) #定义原始数据nPlants < - 5 nWarehouses < - 4 #仓库需求在成千上万的单位需求< - c(14日,15日,18日20)#工厂生产能力在成千上万的单位容量< - c(18) 20日,22日,17日,19日#固定成本为每个工厂FixedCosts < - c(12000、15000、17000、13000、(w, p) {nPlants * (w-1) + p} #建立模型模型<- list()模型Modelname <- 'facility'模型Modelsense <- 'min' #初始化模型变量的数据Lb <- 0模型ub <- c(rep(1, nPlants), rep(Inf, nPlants * nwarehouse))模型vtype <- c(rep('B', nPlants), rep(' c ', nPlants * nwarehouse))模型obj <- c(固定成本,transcost)模型varnames < - c (paste0(代表(“开放”,nPlants), 1: nPlants), sprintf(反式% d % d, c (mapp(代表,1:nWarehouses, nPlants)), 1: nPlants)) #构建生产约束矩阵A1 < - spMatrix (nPlants nPlants,我= c (1: nPlants), j = (1: nPlants), x =能力)A2 < spMatrix (nPlants nPlants * nWarehouses,我= c (mapp(代表,1:nPlants, nWarehouses)),j = mapp (flowidx 1: nWarehouses, c (mapp(代表,1:nPlants, nWarehouses))), x =代表(1,nWarehouses * nPlants) A3 < - spMatrix (nWarehouses nPlants) A4 < - spMatrix (nWarehouses nPlants * nWarehouses,我= c (mapp(代表,1:nWarehouses, nPlants)), j = mapp (flowidx c (mapp(代表,1:nWarehouses, nPlants)), 1: nPlants), x =代表(1,nPlants * nWarehouses))模型A < -  RBIND(CBIND(A1,A2),CBIND(A3,A4))模型rhs <- c(rep(0, nPlants),需求)模型感知<- c(rep('<', nPlants), rep('=', nwarehouse))模型# Save model gurobi_write(model,'facilityR.lp') #猜测在起始点:关闭固定成本最高的工厂#打开所有其它的先打开所有的工厂模型start <- c(rep(1,nPlants),rep(NA, nPlants * nwarehouse)) #找到最昂贵的工厂,并在mipstart cat('Initial guess: n') worstidx <- which.max(FixedCosts)模型中关闭它start[worstidx] <- 0 cat(' close plant',worstidx,'\n') #设置参数params <- list()参数方法<- 2 #优化res <- gurobi(模型,参数)#打印解决方案status == 'OPTIMAL') {cat('\nTotal Costs:',res . ')objval, ' \ nsolution: \ n”)猫(“设施:”模型varnames [(resx[1:nPlants]>1e-5)], '\n') active <- nPlants + which(res .x [(nPlants + 1): (nPlants * (nWarehouses + 1))) > 1 e-5)猫的流动:猫(sprintf(“% s = % g”模型varnames[活动],res} else {cat('No solution\n')} #清除空间rm(res, model, params, A1, A2, A3, A4)