workforce1。R


workforce1。R


# #版权2021,Gurobi优化狗万app足彩有限责任公司每个工人可能在特定的一天上班,也可能不上班。如果问题无法解决,使用IIS查找一组#冲突约束。请注意,除了通过IIS报告的内容外,可能还有其他冲突#。库(矩阵)库(gurobi) #定义数据nShifts < 7 - 14 nWorkers <据nvar < - nShifts * nWorkers varIdx < -函数(w s) {s + (w1) * nShifts} <转变- c(‘Mon1’,‘Tue2’,‘Wed3’,‘Thu4’,‘Fri5’,‘Sat6’,‘Sun7’,‘Mon8’,‘Tue9’,‘Wed10’,‘Thu11’,‘Fri12’,‘Sat13’,‘Sun14’)工人< - c(“艾米”、“鲍勃”、“凯西”,“丹”,“Ed”,“弗雷德”,“顾”)支付< - c(10、12、10、8、8,9,11)shiftRequirements < - c(3、2、4、4、5、6、5、2、2、3、4、6、7、5)可用性< -列表(c (0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1), c (1, - 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0), c (0, 0, 1, 1, - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1), c (0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1), c (1, 1, 1, 1, - 1, 0, 1, 1, 1,0 1 0, 1, 1), c (1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1), c(1, 1, - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)) #设置参数参数< -()参数列表<- 'workforce1.log' #创建模型<- list()模型Modelname <- 'workforce1'模型modelsense <- 'min' #初始化赋值决策变量:# x[w][s] == 1如果worker w被赋值#到shift s。由于赋值模型总是产生整数#解决方案,我们使用连续变量并作为LP求解。模型Lb <- 0模型ub <- rep(1, nVars)模型obj <- rep(0, nVars)模型varnames <- rep(",nVars) for (w in 1:nWorkers) {for (s in 1: nshift) {model . var . name <- rep(",nVars) for (w in 1:nWorkers)varnames[varIdx(w,s)] = paste0(worker [w],'.', shift [s])模型obj[varIdx(w,s)] = pay[w] if(可用性[[w]][s] == 0) modelub[varIdx(w,s)] = 0}} #建立位移-需求约束模型一个<- spMatrix(nshift,nVars, i = c(mapply(rep,1: nshift,nWorkers)), j = mapply(varIdx,1:nWorkers, mapply(rep,1: nshift,nWorkers)), x = rep(1, nshift * nWorkers))模型感知<- rep('=', nshift)模型rhs <- shiftrerequirements模型constrnames <- shift #保存模型gurobi_write(模型,'workforce1。<- gurobi(model, params = params) #显示结果status == 'OPTIMAL'){#代码可能进入这里,如果你改变一些数据…否则# this将永远不会被执行。cat(‘最佳目标是’,结果if (result . n) for (s in 1:nShifts) {cat(' t', shift [s],':') for (w in 1:nWorkers) {if (result . n:nWorkers)x [varIdx (w s)] > 0.9)猫(工人[w], ' ')}猫(“\ n”)}}如果(结果status == 'INFEASIBLE'){#找到一个IIS的猫('问题是不可行的....计算IIS\n') IIS <- gurobi_iis(model, params = params) if (IIS . confelse cat('IIS is not minimal\n') cat('Rows in IIS: ', model . ') else cat('IIS is not minimal\n'constrnames [iis('\nLB在IIS: ',模型varnames [iis('\nUB在IIS: ',模型varnames [iis} else{#仅用于处理用户中断或其他问题#清除空间rm(model, params, availability, shift, Workers, pay, shiftrerequirement, result)