You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 07:53:09