我们在软件中遇到了一种类似资源分配问题,我将通过一个例子来解释它。
假设我们需要4个人在白天工作。这个数字以及它是“白班”记录在我们的数据库中。
然而,我们不仅需要任何人来填补这些职位,还有一些需求必须满足才能符合要求。
其中2个人必须是护士,1个人必须是医生。
其中一名医生还必须作为特定团队的一部分工作。
因此,我们有了这些信息:
白班: 4 1名医生 1名医生,需要在A团队工作 1名护士
上面的内容不是问题所在。问题出现在我们开始挑选人员来工作白天,并尝试确定我们已经选择的人员是否真正符合标准时。
例如,假设我们选择James、John、Ursula和Mary来工作,其中James和Ursula是医生,John和Mary是护士。
Ursula还在A团队工作。
现在,根据我们尝试适应法案的顺序,我们可能会得出我们有合适的人员的结论,或者不会,除非我们开始尝试不同的组合。
例如,如果我们按照列表顺序选择Ursula,我们可以与“1名医生”标准匹配。然后我们到达James,并注意到由于他不在A团队工作,关于“1名医生,需要在A团队工作”的其他标准不能用他来满足。由于另外两个人是护士,他们也不符合该标准。
因此,我们回溯并首先尝试James,他也可以符合第一个标准,然后Ursula可以符合需要该团队的标准。
因此,问题对我们来说看起来就像我们需要尝试不同的组合,直到我们已经尝试了所有组合,在这种情况下,即使工作人数与所需总人数相同,我们仍有一些标准未被满足,或者我们已经找到了一个有效的组合。
这是唯一的解决方案吗?有人能想到更好的方法吗?
问题在于这是排班系统的一部分,可能会涉及到很多人,既有“我们需要X个人在白天上班”,也有“我们有这个Y人的人员池”,还有一个大的“我们有这个Z标准列表,这些X人必须与这些Y人匹配”,然后你要为同样的计算做出贡献,因为领导正在调整排班,并且需要实时进行,在此基础上需要快速解决方案。
基本上,领导将在屏幕上看到实时的汇总信息,显示还缺少多少人,无论是整个白天班还是符合各种标准的人数,以及我们实际上需要增加多少人。这个显示屏将在领导调整排班时半实时更新,“如果詹姆斯代替乌苏拉上白班,乌苏拉代替夜班”等。
非常感谢到目前为止回答过这个问题的人们,约束满足问题听起来像我们需要走的路,但我们肯定会认真查看这里所有链接和算法名称。
这就是为什么我喜欢StackOverflow :)