分配技能的算法'有效地跨越'业务' - 稳定的婚姻问题

时间:2011-07-15 21:08:43

标签: python algorithm stable-marriage

游戏Tiny Tower有各种各样的'Bitizens',在不同的属性中熟练0-9:

Michael:  
 a) retail: 9
 b) creative: 2
 c) service: 7
 d) recreational: 4
 e) food: 6

然后它有三个Bitizens可以工作的业务。每个企业都属于零售,创意,服务,娱乐和食品类别。企业数量或Bitizens之间永远不会有任何匹配,但为了使事情变得更容易,我们可以假设职位数量与比特数相匹配。

例如,可能有一个Hat Shop是零售业务,因此具有高retail值的Bitizens是有利的。在上面的例子中,Micheal非常适合从事零售业务。

我如何在算法上用最相关技能的Bitizens填补这些位置?我试图解决这个问题,但是我无法有效地解决问题。

2 个答案:

答案 0 :(得分:4)

让我们假设一个额外的“点”同样有价值,无论你把它放在哪里。例如,如果您有两个业务,创意和食品,我们认为总共最好有20个创意和3个食物而不是每个11个。

在这种情况下,您的问题是Assignment problem的示例。这已知是“容易的”,因为它可以在多项式时间内解决:特别是在时间O(n ^ 3)中。 Hungarian algorithm是解决此问题的标准方法。我不能比维基百科页面更好地解释它,这个页面非常详细,但是如果你在那里遇到问题,那就问问吧。

如果你有大量的比特和业务,所以这个算法是不可行的,我认为这个问题很容易受到simulated annealingevolutionary algorithms等近似方法的攻击。<​​/ p >

如果我最初的假设是不正确的(例如,如果每个类型至少有一个人员充足的业务可能更好),你几乎肯定应该尝试这些不精确的方法。专注于设计反映任何特定工人 - 企业分配排列价值的目标函数。

答案 1 :(得分:0)

如果您能够将所有属性归结为只有一个目标可以最小化,那么您将能够使用assignment problem来解决您的问题。否则你的问题就像multi-index assignment problem,这是NP难的。

因此,请详细说明您的具体情况,以便找出合理的解决方案。