0

游戏Tiny Tower有各种 0-9 技能的“Bitizens”,具有不同的属性:

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

然后它就有了三个Bitizen可以从事的业务。每项业务都属于零售、创意、服务、娱乐和食品类别之一。企业数量或 Bitizen 数量之间永远不会有任何匹配,但为了让事情更容易,我们可以假设职位数量与 bitizen 数量相匹配。

例如,可能有一家零售业务的帽子店,因此具有高retail价值的Bitizen是有利的。在上面的例子中,迈克尔非常适合从事零售业务。

我怎样才能在算法上用最相关技能的Bitizen来填补职位?我试图解决这个问题,但我很难以一种实际上可以有效解决问题的方式绕开我的脑袋。

4

2 回答 2

4

让我们假设一个额外的“点”无论放在哪里都同样有价值。例如,如果您有两个业务,创意和食品,我们假设创意和食品总共有 20 个,食品总共有 3 个总比每个都有 11 个要好。

在这种情况下,您的问题是分配问题的一个示例。众所周知,这很“容易”,因为它可以在多项式时间内求解:特别是在 O(n^3) 时间内。匈牙利算法是解决这个问题的标准方法。我无法比维基百科页面更好地解释它,它非常详细,但如果你在那里遇到问题,请问。

如果你有大量的比特币和企业,那么这个算法是不可行的,我认为这个问题很容易通过模拟退火进化算法等近似方法来解决。

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

于 2011-07-15T21:44:47.170 回答
0

如果您能够将所有属性集中在一起,使得只有一个目标可以最小化,那么您将能够通过分配问题解决您的问题。否则你的问题就像多索引分配问题,这是 NP 难的。

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

于 2011-07-15T21:47:28.767 回答