manbet体育手机客户端


workforce3。R


# Copyright 2018, 狗万app足彩Gurobi Optimization, LLC # #分配工人轮班;每个工人可能在某一天上班,也可能不在。如果问题不能解决,放松模型#,以确定哪些约束不能满足,以及需要放松多少#。printsolution <- Function (result) {if(result . printsolution <- Function (result .) {if(result .status == 'OPTIMAL') {cat('最佳目标是',结果objval,'\n') cat('Schedule:\n') for (s in 1:nShifts) {cat('\t',班次[s],':') for (w in 1:nWorkers) {if (result . ' ' s '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 < -列表()envlogfile <- 'workforce3.log' #构建模型模型<- list()模型Modelname <- 'workforce3'模型modelsense <- 'min' #初始化分配决策变量:# x[w][s] == 1,如果工人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:nShifts) {modelvarnames[varIdx(w,s)] = paste0(Workers[w],'.', shift [s])模型obj[varIdx(w,s)] = pay[w] if (availability[[w]][s] == 0) modelub[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('=',nShifts)模型rhs <- shift需求模型gurobi_write(模型,'workforce3. ')#优化结果<- gurobi(模型,env = env) #显示结果if (result . lp', envstatus == 'OPTIMAL'){#如果你更改一些数据,代码可能会在这里输入…否则# this将永远不会被执行。printsolution(结果);} else if (result .status == ' in可行性'){#使用gurobi_feasrelax来找出应该放松哪些约束#以及放松多少才能让问题变得可行。惩罚<- list()惩罚Inf惩罚ub <- Inf处罚rhs < -代表(1,长度(模型(rhs)) feasrelax <- gurobi_feasrelax(模型,0,FALSE,罚金,env = env) result <- gurobi(feasrelax . env模型,env = env) if(结果status == 'OPTIMAL') {printsolution(result) cat('松弛值:n') for (j in (nVars+1):length(result . result)x)){如果(结果X [j] > 0.1) cat('\t',盛宴放松模型varnames [j],结果x[j],'\n')}} else {cat('意外状态',结果} rm(惩罚,feasrelax)} else{#只是为了处理用户中断或其他问题cat(“意外状态”,结果} #清除空间rm(model, env, availability, Shifts, Workers, pay, shiftrequients, result)