繁体   English   中英

如何使用MS Solver Foundation为简单的调度问题建模?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM