如何解决OR-Tools (C#) 中的护士排班问题Pair Distribution
这是一个护士排班问题。如何在 OR-Tools (C#) 中实现护士对? 即:
- Nurse-1 不得与 Nurse-2 一起工作。
- 如果nurse-1 工作,那么nurse-2 也必须工作。
提前致谢。
解决方法
你可以看看这个更完整的例子:https://github.com/google/or-tools/blob/stable/examples/dotnet/ShiftSchedulingSat.cs
您有两个布尔变量,指示nurse_a 或nurse_b 是否正在工作。
问题 1 是:nurse_a 暗示不(nurse_b),nurse_b 暗示不(nurse_a)
问题 2 是:nurse_1 暗示着护士 2
,我有超过 3 个班次 - 总共 17 个。下面的代码部分有效,但我没有管理所有班次(上午 + 下午)的“允许”分支,只有早班或下午班。 #`
//// Employee Pairs
///
List<ILiteral> employee_pair = null;
List<ILiteral> employee_pair_MorningShifts = null;
List<ILiteral> employee_pair_AfternoonShifts = null;
foreach (var (e1,e2,allowed) in EmployeePairs)
{
foreach (int d in Range(numDays))
{
// Pair is allowed
if (allowed)
{
//foreach (var s in MorningShifts)
//{
// employee_pair_MorningShifts = new List<ILiteral>()
// {
// work[e1,s.Index,d],// work[e2,d]
// };
// IntVar employee_pairVar_MorningShifts = model.NewBoolVar($"employee_pairVar_MorningShifts (employee {e1},shift {s},day={d}");
// employee_pair_MorningShifts.Add(employee_pairVar_MorningShifts);
// model.AddBoolOr(employee_pair_MorningShifts);
// objBoolVars.Add(employee_pairVar_MorningShifts);
// objBoolCoeffs.Add(4);
//}
foreach (var s in AfternoonShifts)
{
employee_pair_AfternoonShifts = new List<ILiteral>()
{
work[e1,work[e2,d]
};
IntVar employee_pairVar_AfternoonShifts = model.NewBoolVar($"employee_pairVar_AfternoonShifts (employee {e1},day={d}");
employee_pair_AfternoonShifts.Add(employee_pairVar_AfternoonShifts);
model.AddBoolOr(employee_pair_AfternoonShifts);
objBoolVars.Add(employee_pairVar_AfternoonShifts);
objBoolCoeffs.Add(4);
}
}
else
{
// Pair is forbidden
foreach (var s in shifts)
{
employee_pair = new List<ILiteral>()
{
work[e1,d]
};
IntVar employee_pairVar = model.NewBoolVar($"employee_pair (employee {e1},day={d}");
employee_pair.Add(employee_pairVar);
model.AddBoolOr(employee_pair);
objBoolVars.Add(employee_pairVar);
objBoolCoeffs.Add(4);
}
}
}
}
`
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。