[英]Nurse scheduling Problem (Pair Distribution) in OR-Tools (C#)
这是关于护士调度问题。 如何在 OR-Tools (C#) 中实现护士配对? 即:
先感谢您。
你可以看看这个更完整的例子: https://github.com/google/or-tools/blob/stable/examples/dotnet/ShiftSchedulingSat.cs
您有两个 Boolean 变量,指示nurse_a 或nurse_b 是否正在工作。
问题 1 是:nurse_a 暗示 not(nurse_b) 而nurse_b 暗示 not(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, s.Index, 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, s.Index, d],
work[e2, s.Index, d]
};
IntVar employee_pairVar_AfternoonShifts = model.NewBoolVar($"employee_pairVar_AfternoonShifts (employee {e1}, shift {s}, 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, s.Index, d],
work[e2, s.Index, d]
};
IntVar employee_pairVar = model.NewBoolVar($"employee_pair (employee {e1}, shift {s}, day={d}");
employee_pair.Add(employee_pairVar);
model.AddBoolOr(employee_pair);
objBoolVars.Add(employee_pairVar);
objBoolCoeffs.Add(4);
}
}
}
}
`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.