workforce1.R


# 2023年版权,Gurobi优化狗万app足彩,LLC # #分配工人的变化;每个工人可能是也可能不是在#特别的一天。如果问题不能解决,使用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。日志' #构建模型模型< -列表()模型美元modelname < -“workforce1”模型美元modelsense < -“min”#初始化任务决策变量:# x [w] [s] = = 1 #年代转移分配如果工人w。由于一个分配模型总是产生整数#解决方案,我们使用连续变量作为LP和解决。模型美元磅< - 0模型美元乌兰巴托< -代表(1,据nvar)模型美元obj < -代表(0,据nvar)模型美元varnames < -代表(”,据nvar) (w在1:nWorkers){(在1:nShifts){模型美元varnames [varIdx (w s)] = paste0(工人[w],“。”,转变[s])模型美元obj [varIdx (w s)] = [w]如果支付(可用性[[w]] [s] = = 0)模型美元乌兰巴托(varIdx (w s)] = 0}} #设置shift-requirements约束模型美元据nvar < - spMatrix (nShifts,我= c (mapp(代表,1:nShifts, nWorkers)), j = mapp (varIdx, 1: nWorkers,宾州(代表,1:nShifts, nWorkers)), x =代表(1,nShifts * nWorkers))模型美元<——代表(“=”,nShifts)模型美元rhs < - shiftRequirements模型美元gurobi_write constrnames < -转移#保存模型(模型,workforce1。lp ', params) #优化结果< - gurobi(模型、params = params) #显示结果(结果美元状态= = '最佳'){#代码可以进入这里如果你改变一些数据的…否则#这永远不会被执行。猫(最优目标是,结果美元objval,猫“\ n”)(“时间表:\ n”)(在1:nShifts){猫(‘\ t’,转变[s], ': ') (w 1: nWorkers){如果(结果美元x [varIdx (w s)] > 0.9)猫(工人[w], ' ')}猫(“\ n”)}}如果(结果美元状态= =“不可行”){#找到一个IIS猫('问题是不可行的....计算IIS \ n”) IIS < - gurobi_iis(模型、params = params)如果(IIS美元最小)猫(IIS很小\ n)其他猫(IIS不是最小\ n)猫(IIS行:,模型美元constrnames [iis美元持续地])猫(\活检在IIS,模型美元varnames [iis美元磅)猫(“在IIS \要点:”模型美元varnames [iis美元乌兰巴托)猫(“\ n”)其他rm (iis)}{#来处理用户中断或其他问题猫(意想不到的状况,结果美元状态,“现在\ nEnding \ n”)} #腾出rm(模型、参数、可用性、转移、工人,工资,shiftRequirements,结果)