【问题标题】:Seating plan software recommendations (does such a beast even exist?)座位计划软件推荐(这样的野兽甚至存在吗?)
【发布时间】:2008-10-08 18:34:18
【问题描述】:

我马上要结婚了,忙于座位安排,遇到了常见的问题,即谁坐在哪里:X 和 Y 必须坐在一起,但 A 和 B 不能各自站立其他等

我要处理的数字并不大(因此手动选项可以正常工作),但出于极客的说服力,我想知道是否有任何软件可以为我做这件事?

如果没有完全匹配,我应该寻找什么(问题空间、书籍、参考代码)来调整以达到我的目的?

【问题讨论】:

    标签: language-agnostic


    【解决方案1】:

    我是 PerfectTablePlan 的开发者。我在这里以及Joel's Business of Software 发帖。 ;0)

    组合问题,例如座位分配,在算法上是相当讨厌的。 NP-hard 事实上。 60个座位能容纳60位客人的方式有60种! (60 阶乘),这比已知宇宙中的原子数还多。

    PerfectTablePlan 允许您指定 A 必须坐在 B 旁边,但不能靠近 C。它使用遗传算法自动分配座位。这在实践中效果很好——它通常会在几秒钟内为 100 位客人找到一个不错的解决方案。您可能需要为 1000 多名客人煮咖啡。在实践中,通常还需要进行一些拖放微调,以应对多变的当地习俗和家庭政治(鲍勃叔叔有点耳聋,我们最好把他放在靠近顶桌的位置)。

    您可以了解更多关于遗传算法here的信息。

    Ps/ 自动分配座位只是创建良好座位计划的一小部分。有关详细信息,请参阅 PerfectTablePlan tourtips 页面。

    【讨论】:

    • 这不是离散约束满足问题吗?当然,约束规划求解器可以很容易地做到这一点?
    • 顺便说一句,这不会降低您的产品功能,这对于自制解决方案来说会很痛苦 - 就像任何不是一堆文本的东西一样。
    • 如果您有 100 位客人,并且每个客人都有 5 位其他客人的偏好,他想坐得近或远,那么在标准台式 PC 上,约束编程能否在几秒钟内解决这个问题?为 35 美元的产品购买或编写约束规划求解器在财务上是否可行?
    • 这篇文章展示了一个 MINLP 求解器需要 36 小时来解决一个 107 位客人的问题,并且分配的是桌子而不是座位:improbable.com/news/2012/Optimal-seating-chart.pdf
    【解决方案2】:

    http://www.perfecttableplan.com/

    我相信这是来自一个经常在 Joel On Software 发帖的人。

    虽然没试过。 希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      尝试使用 GLPK 对此进行建模。整数线性规划适用于将约束引入具有多种可能结果的基于图的问题。

      【讨论】:

        【解决方案4】:

        我个人最喜欢的是不分配座位:让人们可以随便坐。

        这可能会导致 [un] 故意的小圈子,但这意味着您不必担心。

        【讨论】:

        • @nwahmeat:因为邀请者通常可以比单独的人更有效地将具有共同兴趣的人分组 - 特别是如果他们不认识对方
        • 84% 的客人更喜欢指定座位,请参阅:prweb.com/releases/2006/2/prweb344508.htm。 ;0)
        【解决方案5】:

        我认为这不是一个很好的答案,但你可以研究一下flocking behavior

        如果您消除每一步的随机抖动,群体最终会安顿在每个成员相对于群体其他成员找到最佳位置的位置。

        【讨论】:

          【解决方案6】:

          这听起来像是一个约束满足问题。您可能应该检查也配备约束求解器的逻辑编程系统。它们通常像序言,只是它们实际上是对求解器可解决的问题的声明。

          希望有一个可以使用您最喜欢的语言的简单界面来输入和输出数据。

          【讨论】:

            【解决方案7】:

            我不久前使用了一个程序,它可以完美地适应这个...它是一个 Java 应用程序,你可以定义规则,它会创建满足规则的测试用例。文件扩展名为 .als

            fact GateRules {
               all g:Gate | one g.loc // Gates have 1 Location
            

            我会继续为程序名称绞尽脑汁。

            编辑:它是Alloy 现在想想,它可能并不理想——“固定配置的座椅”的概念很难建模。我以不同的方式使用它:定义规则(机场登机口在一个位置,只有一架飞机在跑道上),并测试功能的前后条件(在我降落飞机后,我什至可以在一个跑道?)。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-07-24
              • 2014-11-21
              • 2013-02-23
              • 1970-01-01
              • 1970-01-01
              • 2011-01-31
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多