manbet体育手机客户端


劳动力1.R


#版权所有2018,Gurobi O狗万app足彩ptimization,LLC##分配工人轮班;每个工人在某一天都可能有空,也可能没有空。如果问题无法解决,请使用IIS查找一组相互冲突的约束。请注意,除了通过IIS报告的内容之外,可能还有其他冲突。库(矩阵)库(gurobi)#定义数据移位<-14 nWorkers<-7 nVAR<-n移位*nWorkers varIdx<-function(w,s){s+(w-1)*n移位<-c('Mon1','Tue2','Wed3','Thu4','Fri5','Sat6','Sun7','Mon8','Tue9','Wed10','Thu11',Fri12','Sat13','Sun14')工人<-c('Amy','Bob','Cathy Dan Ed Fred','Gu工资<-c(3、2、4、4、4、4、5、6、5、5、5、5、5、5、5、2、2、2、3、4、6、6、6、7、7、5)5)可用性)可提供性)可提供性)列表(c(0、1、1、1、1、1、1、10、10、10、10、10、12、12、12、12、12、12、10、12、10、10、10、12、10、10、10、10、10、10、10、10、10、12、10、10、10、10、10、10、10、10、10、10、10、10、10、10、10、10、8、8、10、8、8、8、8、8、8、10、8、8、8、8、8、10、8、8、10、8、8、8、10、8、8、8、10、8、8、10、8、8、8、8、8、8 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,1,1,1,1,1,1,1,1,1,1,1))#设置环境环境<-list()环境$日志文件<-'workforce1.log'#构建模型<-list()模型$modelname<-“workforce1”模型$modelsense<-'min'#初始化分配决策变量:#x[w][s]==1,如果工人w被分配#移位s。由于分配模型总是产生整数解,我们使用连续变量并作为LP.模型进行求解$lb<-0型$ub<-rep(1,nVars)型号$obj<-rep(0,nVars)模型$varnames<-rep(“”,nVars)for(1:nWorkers中的w){for(1:nShifts中的s){model$varnames[varIdx(w,s)]=paste0(工人[w],'.',班次[s])模型$obj[varIdx(w,s)]=付款[w]如果(可用性[[w]][s]==0)模型$ub[varIdx(w,s)]=0}}建立轮班需求约束模型$A<-spMatrix(nShifts,nVars,i=c(mapply(rep,1:nShifts,nWorkers)),j=mapply(varIdx,1:nWorkers,mapply(rep,1:nShifts,nWorkers)),x=rep(1,nShifts*nWorkers))模型$sense<-rep('=',NSHIFT)模型$rhs<-换档要求模型$constrnames<-shift#保存模型gurobi#u write(模型,'workforce1.lp',env)#优化结果<-gurobi(模型,env=env)#如果(结果)显示结果$status=='OPTIMAL'){如果您更改了一些数据,代码可能会在这里输入……否则#这将永远不会执行。cat('OPTIMAL objective is',result$objval,'\n')cat('Schedule:\n')for(1:n中的s移位){cat('\t',移位[s],':')for(1:n中的w工作者){if(结果$x[varIdx(w,s)]>0.9)cat(Workers[w],'')}cat('\n')}else if(result$状态==“不可行”){#查找一个IIS cat(“问题不可行…正在计算IIS\n”)IIS<-gurobi_IIS(模型,env=env)if(IIS$最小)cat('IIS是最小的\n')否则cat('IIS不是最小的\n')cat('IIS中的行:',模型$名称[iis]$Arows])cat('\nLB在IIS:'中,模型$varnames[iis$lb])cat('\nUB在IIS中:',模型$varnames[iis$ub])cat('\n')rm(iis)}else{#仅用于处理用户中断或其他问题cat('Unexpected status',result$状态,“\n正在定岗\n')}净空rm(型号、环境、可用性、轮班、工人、工资、轮班要求、结果)