manbet体育手机客户端


Workforce2.r.


#版权所有2019,Gurobi O狗万app足彩ptimization,LLC##分配工人转移;每个工人都可能或可能无法在#特定日期使用。如果问题无法解决,请迭代地使用IIS#查找所有冲突的约束。图书馆(矩阵)库(Gurobi)#函数显示结果Printsolution < - 函数(结果){if(结果$status =='最佳'){cat('最佳目标',结果$Objval,'\ n')cat('schedule:\ n')for(s中的1:nshifts){cat('\ t',shift [s],':')for(w在1:nworkers){if(结果$x [varIdx (w s)] > 0.9)猫(工人[w], ' ')}猫(' \ n ') } } } # 定义数据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)) #设置环境env < -列表()env$logfile < - 'workforce2.log'#build模型模型< -  list()模型$ModelName < - 'Workforce2'模型$模型< - 'min'#初始化分配判定变量:#x [w] [s] == 1如果为work w被分配#换档。由于赋值模型始终产生整数的#解决方案,因此我们使用连续变量并作为LP来解决。模型$LB < -  0型号$UB < -  rep(1,nvars)模型$obj < -  rep(0,nvars)模型$varnames < -  rep('',nvars)(w在1:nworkers){for(在1:nshifts){model$varnames [varidx(w,s)] = paste0(工人[w],'。',换档[s])模型$obj [varidx(w,s)] = pay [w] if(可用性[[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))模型$感觉< -  rep('=',nshifts)模型$RHS < -  ShiftRequiress Model$constrame < -  shifts#保存型号gurobi_write(型号,'workforce2.lp',env)#优化结果< -  gurobi(型号,env = env)#显示结果(结果$status =='最佳'){#代码可以在这里输入如果更改了一些数据...否则#将永远不会被执行。printsolution(结果);}否则如果(结果)$status =='不可行的'){#我们将循环直到我们减少可以解决numremoved < -  0的模型(结果$status =='Ifisible'){IIS < -  gurobi_IIS(Model,Env = Env)保持< - (!IIS$arows)cat('删除行',型号$constrames [IIS.$arows],'... \ n')模型$< -模型$a [保留,下降= false]模型$感觉< - 型号$感觉[保留]模型$RHS < - 型号$RHS [保持]模型$constrames < - 型号$constrammenes [保留] numremoved < -  numremoved + 1 gurobi_write(edite0('workforce2  - ',numremoved,'。lp'),env)结果< -  gurobi(model,env = env)} printsolution(结果)Rm(IIS)} else {#只是为了处理用户中断或其他问题cat('意外状态',结果$状态,'\ now \ n')} #clear space rm(型号,env,可用性,班次,工人,工资,换精,结果)