游戏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填补这些位置?我试图解决这个问题,但是我无法有效地解决问题。
答案 0 :(得分:4)
让我们假设一个额外的“点”同样有价值,无论你把它放在哪里。例如,如果您有两个业务,创意和食品,我们认为总共最好有20个创意和3个食物而不是每个11个。
在这种情况下,您的问题是Assignment problem的示例。这已知是“容易的”,因为它可以在多项式时间内解决:特别是在时间O(n ^ 3)中。 Hungarian algorithm是解决此问题的标准方法。我不能比维基百科页面更好地解释它,这个页面非常详细,但是如果你在那里遇到问题,那就问问吧。
如果你有大量的比特和业务,所以这个算法是不可行的,我认为这个问题很容易受到simulated annealing或evolutionary algorithms等近似方法的攻击。</ p >
如果我最初的假设是不正确的(例如,如果每个类型至少有一个人员充足的业务可能更好),你几乎肯定应该尝试这些不精确的方法。专注于设计反映任何特定工人 - 企业分配排列价值的目标函数。
答案 1 :(得分:0)
如果您能够将所有属性归结为只有一个目标可以最小化,那么您将能够使用assignment problem来解决您的问题。否则你的问题就像multi-index assignment problem,这是NP难的。
因此,请详细说明您的具体情况,以便找出合理的解决方案。