0

我有一个班次数组(我将其呈现为字典),其中每一行都是一个人,他们有资格获得的每个班次可以是多个班次。我在示例中使用字母来传达数据如何匹配。对于字母表示,实际数据集为 0 或 1 即 shifts = {Bob: (A, C, E), George: (B, C), Steve: (B, C, E), Greg: (C), Jose:(B,E)} 本质上变成 [[(A, 0, C, 0, E),(0, B, C, 0, 0), (0, 0, C, 0, 0), (0 , B, 0, D, E)]]

我有一定数量的个人配额来填补每个班次。一个人不能被分配到 2 个不同的班次。

基本上=> totalshifts = A=1 + B=1 + C=2 + E=1 => 5 个总位置约束是 A<=1:A>=0 , B<=1:B>=0, C<= 2:C>=0, E<=1:E>=0

这目前正在 Excel 求解器中解决,其中单纯形 LP 设置为最大化。我一直在研究使用 scipy.optimize.linprog,但我正在努力正确设置它,或者当输入数组不足以满足轮班所需的人数时如何处理它。

我希望输出是为个人分配正确的班次以最大化每个班次的功能,或者尽可能接近最大化它,类似于以下内容:Bob:A,George:B,Steve:C,Greg: C, Jose:E 本质上答案矩阵需要是 [(A, 0, 0, 0, 0),(0, B, 0, 0, 0),(0 , 0, C, 0 ,0), ( 0, 0, C, 0, 0), (0, 0, 0, 0, E)] 这样我就可以用正确的班次引用正确的候选人。这是一个简单的案例,更多的是 10 个不同的班次和 100 到 1000 个人。

Excel 示例:目前没有 10 个代表发布图片 http://i.imgur.com/ZZET86D.jpg

4

0 回答 0