代码之家  ›  专栏  ›  技术社区  ›  Georgy Bolyuba

开放空间坐姿优化算法

  •  5
  • Georgy Bolyuba  · 技术社区  · 14 年前

    由于公司的变化,我们不得不重新安排我们的起居计划:一个房间里有10张桌子。有些书桌比其他的更受欢迎,原因有很多。一种解决办法是从帽子上画一个书桌号码。我们认为有更好的办法。

    重要提示:没有人知道别人在做什么。每个人都必须根据自己的最佳利益做出决定(听起来很熟悉?)

    现在假设我们得到了这些假设结果:

    #  | Desk# >| 1  | 2  | 3  | 4  | 5  | 6  | 7  | 8  | 9  | 10 |
    1  | Alise  | 30 | 2  | 2  | 1  | 0  | 0  | 0  | 15 | 0  | 0  | = 50
    2  | Bob    | 20 | 15 | 0  | 10 | 1  | 1  | 1  | 1  | 1  | 0  | = 50
       ...
    10 | Zed    | 5  | 5  | 5  | 5  | 5  | 5  | 5  | 5  | 5  | 5  | = 50
    

    现在,我们需要找到的是一个(或多个)的配置,使我们最大限度地满足(即,人们得到他们想要的办公桌,考虑到所有的出价和最大限度地提高了整个群体)。当然,假设一个人在桌子上说得越多,他/她就越想要它)。

    因为只有10个人,我想我们可以强迫它查看所有可能的配置,但我想知道有没有更好的算法来解决这类问题?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Aryabhatta Aryabhatta    14 年前

    你好像在看 Assignment Problem 可以用 Hungarian Algorithm

    在您的情况下,您可以使用成本=50出价,并使用上述(任何解决方案的分配问题)。

        2
  •  0
  •   Grembo    14 年前

    甚至更快,如果你有Excel,你应该有一个版本的解算器也可用。只需设置您的出价矩阵(10x10,有出价),分配矩阵(10x10,有0/1分配),使用sumproduct(出价,分配)来计算分配的值,使之成为您的目标函数,并添加约束,这样就只有一个人对桌子和桌子对人的分配。确保您有选项>线性模型“复选框”和“假设非负”并解决掉!我刚刚设置了一个10x10的问题-似乎工作正常。