如何避免时间表问题的安排冲突
How to avoid scheduling conflicts for a timetable problem
我正在尝试根据员工轮班时间为每位员工创建轮班时间表。我定义了一个元组,其中包括轮班开始时间、轮班结束时间、轮班人数上限。输入还包括员工轮班偏好的数组列表,例如 [[1 0 0 1 1],...] 表示员工 1 可以轮班 1、4、5 但不能轮班 2、3。请注意轮班时间不是相互排斥的,可以重叠。
我有一个决策变量 x[i,j] 如果员工 i 为第 j 个班次配备人员,则为 1,否则为 0。执行后,我期望 x[i,j] 是一个矩阵,指示每个员工被分配到哪个班次。我还有其他限制,包括轮班能力。但我一直在研究如何创建约束以确保分配的班次不重叠。
我的一个想法是比较 x[i,j] 和 x[i,k],其中 j =/= k,看看他们是否检查 i 的开始时间 > j 的结束时间或开始时间j > i 的结束时间。但是我不确定如何在 OPL 中实现它。
如果我没理解错的话,每个班次的开始和结束时间j
是已知常数。让我称它们为 start[j]
和 end[j]
。所以你应该能够使用这些来指定,使用 forall
结构,(j,k)
对使得 j
和 k
不重叠。
您将在 [InstallDir]/opl/examples/opl
的子目录中随产品安装的示例中找到使用 forall
的示例。更具体地说,包含您可以查看的构造的模型是 models/Staffing/staffing.mod
、timetabling/timetabling.mod
和 teambuilding/teambuilding.mod
.
我正在尝试根据员工轮班时间为每位员工创建轮班时间表。我定义了一个元组,其中包括轮班开始时间、轮班结束时间、轮班人数上限。输入还包括员工轮班偏好的数组列表,例如 [[1 0 0 1 1],...] 表示员工 1 可以轮班 1、4、5 但不能轮班 2、3。请注意轮班时间不是相互排斥的,可以重叠。
我有一个决策变量 x[i,j] 如果员工 i 为第 j 个班次配备人员,则为 1,否则为 0。执行后,我期望 x[i,j] 是一个矩阵,指示每个员工被分配到哪个班次。我还有其他限制,包括轮班能力。但我一直在研究如何创建约束以确保分配的班次不重叠。
我的一个想法是比较 x[i,j] 和 x[i,k],其中 j =/= k,看看他们是否检查 i 的开始时间 > j 的结束时间或开始时间j > i 的结束时间。但是我不确定如何在 OPL 中实现它。
如果我没理解错的话,每个班次的开始和结束时间j
是已知常数。让我称它们为 start[j]
和 end[j]
。所以你应该能够使用这些来指定,使用 forall
结构,(j,k)
对使得 j
和 k
不重叠。
您将在 [InstallDir]/opl/examples/opl
的子目录中随产品安装的示例中找到使用 forall
的示例。更具体地说,包含您可以查看的构造的模型是 models/Staffing/staffing.mod
、timetabling/timetabling.mod
和 teambuilding/teambuilding.mod
.