Optimization 或基于工作负载的员工调度工具

Optimization 或基于工作负载的员工调度工具,optimization,or-tools,Optimization,Or Tools,下面,每天只有一名工人(w)可以工作(d)。我想根据剩余工作量/工作安排员工。当前的解决方案将每天安排1或3名工人,因为他们的工作量最大。假设每天工作将导致工作量减少2,我想将其合并。这将导致工人1和3工作两天(工作量:6>4>2),工人2工作一天(5>3)。我试图将“jobs_remaining”变量减少2(如果“Worked”),但它不会像这样工作 我想知道是否有可能在。。。 (A) 任何特定订单,以及 (B) 根据每天剩余的作业排序: 第1天=工人1或3(剩余6名),第2天=工人1或3(剩

下面,每天只有一名工人(w)可以工作(d)。我想根据剩余工作量/工作安排员工。当前的解决方案将每天安排1或3名工人,因为他们的工作量最大。假设每天工作将导致工作量减少2,我想将其合并。这将导致工人1和3工作两天(工作量:6>4>2),工人2工作一天(5>3)。我试图将“jobs_remaining”变量减少2(如果“Worked”),但它不会像这样工作

我想知道是否有可能在。。。 (A) 任何特定订单,以及 (B) 根据每天剩余的作业排序: 第1天=工人1或3(剩余6名),第2天=工人1或3(剩余6名),第3天=工人2(剩余5名),第5天=工人1或3(剩余4名)

days=[1,2,3,4,5]
工人=[1,2,3,4]
工人的工作数量=[6,5,6,2]
工作数组=[]
对于w,剩余的工作(工人,工作由工人完成):
对于d(以天为单位):
worked=model.NewBoolVar('name')
model.Add(分配[(w,d)]==1。仅限强制执行(已工作)
model.Add(分配[(w,d)]!=1.OnlyEnforceIf(worked.Not())
已工作数组。追加(已工作*剩余作业)
####剩余工作=剩余工作-(已工作*2)####
最大化(和(工作数组))

因此,每天您都想在jobs\u to\u do\u by \u worker数组中选择一个值为max的索引,删除两个,然后重复?

因此,每天您都想在jobs\u to\u do\u by \u worker数组中选择一个值为max的索引,删除两个,然后重复?

您好,谢谢您的回复。这是正确的。在第一天,分配了工人1。jobs_to_do_by_worker数组更新为[4,5,6,2]。第2天=分配的工人3,[4,5,4,2]。第三天=工人2、[4,3,4,2]等。对这个米苏克斯有什么想法吗?最后,我想根据真/假结果更新一个变量。这样的事情可能吗?谢谢你的回复。这是正确的。在第一天,分配了工人1。jobs_to_do_by_worker数组更新为[4,5,6,2]。第2天=分配的工人3,[4,5,4,2]。第三天=工人2、[4,3,4,2]等。对这个米苏克斯有什么想法吗?最后,我想根据真/假结果更新一个变量。这样的事情可能吗?谢谢