workforce2.R


# 2023年版权,Gurobi优化狗万app足彩,LLC # #分配工人的变化;每个工人可能是也可能不是在#特别的一天。如果问题不能解决,使用IIS迭代#找到所有矛盾的约束。库(矩阵)库(gurobi) #函数来显示结果printsolution < -函数(结果){如果(结果美元状态= = '最佳'){猫(最优目标是,结果美元objval,猫“\ n”)(“时间表:\ n”)(在1:nShifts){猫(‘\ t’,转变[s], ': ') (w 1: nWorkers){如果(结果美元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)) #设置参数参数< -()参数列表美元日志文件< - workforce2。日志' #构建模型模型< -列表()模型美元modelname < -“workforce2”模型美元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 < -转移#保存模型(模型,workforce2。lp ', params) #优化结果< - gurobi(模型、params = params) #显示结果(结果美元状态= = '最佳'){#代码可以进入这里如果你改变一些数据的…否则#这永远不会被执行。printsolution(结果);}else if(结果美元状态= =“不可行”){#我们将循环直到我们减少一个模型,可以解决numremoved < - 0时(结果美元状态= =“不可行”){iis < - gurobi_iis(模型、params = params) < - (! iis美元持续地)猫(“删除行”模型美元constrnames [iis美元持续地,“……\ n”)模型美元< -模型美元(保持,,= FALSE)模型美元<——模型美元(保持)模式美元rhs < -模型美元园艺学会(保持)模型美元constrnames < -模型美元constrnames[继续]numremoved < - numremoved + 1 gurobi_write(模型、paste0 (workforce2——“, numremoved .lp), params)结果< - gurobi(模型、params = params)} printsolution rm(结果)其他(iis)}{#来处理用户中断或其他问题猫(意想不到的状况,结果美元状态,“现在\ nEnding \ n”)} #腾出rm(模型、参数、可用性、转移、工人,工资,shiftRequirements,结果)