如何避免为时间表问题安排冲突

问题描述 投票:1回答:1

考虑到员工轮班的可用性,我正在尝试为每位员工制定轮班计划。我有一个元组定义包括班次开始时间,班次结束时间,班次最大人数。输入还包括员工班次偏好的数组列表,例如[[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>结束时间的开始时间我但我不确定如何在OPL中实现这一点。

linear-programming cplex integer-programming opl
1个回答
0
投票

如果我理解正确,每个班次j的开始和结束时间都是已知的常数。我叫他们start[j]end[j]。所以你应该能够使用这些来使用forall构造来指定对(j,k),使得jk的移位不重叠。

您将在forall子目录中的产品安装示例中找到使用[InstallDir]/opl/examples/opl的示例。更具体地说,包含你可以看到的结构的模型是models/Staffing/staffing.modtimetabling/timetabling.modteambuilding/teambuilding.mod

© www.soinside.com 2019 - 2024. All rights reserved.