CPLEX排班调度模型约束冲突引发不可行解,寻求解决办法
排班调度模型不可行解问题求助
我正在构建一个排班调度模型,按以下方式开发后,在CPLEX中得到不可行解。经排查发现约束1与约束2存在冲突,但不知如何解决,恳请帮助。
原模型代码:
// 索引与集合 range I = 1..24; //员工 range T = 1..24; //时段 {string} D = {"Rooms", "F&B", "Banquet"}; //部门 range W = 1..2; //任务类型 tuple m_tdw{ key int t; key string d; key int w; float value; } {m_tdw} m_ = ...; // 时段T、部门D、任务类型W所需的人数 float manpower[t in T][d in D][w in W] = item(m_, <t, d, w>).value; //决策变量 dvar boolean X[I][T][D][W]; // 员工i在时段t被分配到部门d做任务w则为1,否则为0 dvar boolean Y[I]; // 员工i被安排工作则为1,否则为0 minimize sum(i in I, t in T, d in D, w in W)(20000*X[i][t][d][w])+sum(i in I)Y[i]*1000000; subject to{ // 1. 每日工作时长约束 forall(i in I) sum(t in T, d in D, w in W) X[i][t][d][w] <= 8; // 2. 确保若t+1时段有工作,则t时段也必须有工作的约束 forall(i in I, t in 1..23) sum(d in D, w in W) X[i][t][d][w] >= sum(d in D, w in W) X[i][t+1][d][w]; // 人员需求约束 forall(t in T, d in D, w in W) sum(i in I) X[i][t][d][w] >= manpower[t][d][w]; // 计算人员固定成本的约束 forall(i in I, t in T, d in D, w in W) M*Y[i] >= X[i][t][d][w]; }
我曾尝试将约束2修改为以下形式,但仍得到不可行解:
forall(i in I, t in 1..23) sum(d in D, w in W) (X[i][t][d][w]+ X[i][t+1][d][w]) <= sum(d in D, w in W) (X[i][t+1][d][w]+ X[i][t+2][d][w]);
内容的提问来源于stack exchange,提问作者tab
相关产品推荐
相关产品推荐

