[英]How to model simple scheduling problem using MS Solver Foundation?
我有以下简单的问题,想使用MS Solver Foundation进行实验:
我有一个日程安排,每天需要2名工人,持续30天。 我需要遵守以下约束:
我计划使用C#填充模型,但是在建模入门方面我需要帮助。 我不确定如何设置决策,参数和约束来解决此类问题。
更新:虽然“愤怒与诅咒”有一个良好的开端,但我不得不想象,有一种更具声明性的方法可以使用框架来表达这些约束,而不必为每个人单独编码。 对MSF更熟悉的人可以帮助这种构造吗?
如果您有n
个人,则必须定义30n
二进制整数参数,每个参数指示一个人是否在特定的一天工作。
P<xx>D<yy> == 1 => Person <xx> works on day <yy>
P<xx>D<yy> == 0 => Person <xx> does not work on day <yy>
然后,您需要约束以防止连续两天工作。 这将是29n
约束。
P<xx>D<yy> + P<xx>D<yy+1> <= 1
然后,您需要限制每周只工作一次。 这将是第一周的以下内容,以及接下来三周的类似内容。
P<xx>D00 + P<xx>D01 + P<xx>D02 + P<xx>D03 + P<xx>D04 + P<xx>D05 + P<xx>D06 <= 1
最后一周如下。
P<xx>D28 + P<xx>D29 <= 1
这将产生另一个5n
约束。 然后仅在工作日添加约束
P<xx>D05 + P<xx>D06 == 0
P<xx>D12 + P<xx>D13 == 0
P<xx>D19 + P<xx>D20 == 0
P<xx>D26 + P<xx>D27 == 0
仅周末
P<xx>D00 + P<xx>D01 + P<xx>D02 + P<xx>D03 + P<xx>D04 == 0
P<xx>D07 + P<xx>D08 + P<xx>D09 + P<xx>D10 + P<xx>D11 == 0
P<xx>D14 + P<xx>D15 + P<xx>D16 + P<xx>D17 + P<xx>D18 == 0
P<xx>D21 + P<xx>D22 + P<xx>D23 + P<xx>D24 + P<xx>D25 == 0
P<xx>D28 + P<xx>D29 == 0
最后添加目标函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.