【发布时间】:2008-10-08 18:34:18
【问题描述】:
我马上要结婚了,忙于座位安排,遇到了常见的问题,即谁坐在哪里:X 和 Y 必须坐在一起,但 A 和 B 不能各自站立其他等
我要处理的数字并不大(因此手动选项可以正常工作),但出于极客的说服力,我想知道是否有任何软件可以为我做这件事?
如果没有完全匹配,我应该寻找什么(问题空间、书籍、参考代码)来调整以达到我的目的?
【问题讨论】:
我马上要结婚了,忙于座位安排,遇到了常见的问题,即谁坐在哪里:X 和 Y 必须坐在一起,但 A 和 B 不能各自站立其他等
我要处理的数字并不大(因此手动选项可以正常工作),但出于极客的说服力,我想知道是否有任何软件可以为我做这件事?
如果没有完全匹配,我应该寻找什么(问题空间、书籍、参考代码)来调整以达到我的目的?
【问题讨论】:
我是 PerfectTablePlan 的开发者。我在这里以及Joel's Business of Software 发帖。 ;0)
组合问题,例如座位分配,在算法上是相当讨厌的。 NP-hard 事实上。 60个座位能容纳60位客人的方式有60种! (60 阶乘),这比已知宇宙中的原子数还多。
PerfectTablePlan 允许您指定 A 必须坐在 B 旁边,但不能靠近 C。它使用遗传算法自动分配座位。这在实践中效果很好——它通常会在几秒钟内为 100 位客人找到一个不错的解决方案。您可能需要为 1000 多名客人煮咖啡。在实践中,通常还需要进行一些拖放微调,以应对多变的当地习俗和家庭政治(鲍勃叔叔有点耳聋,我们最好把他放在靠近顶桌的位置)。
您可以了解更多关于遗传算法here的信息。
Ps/ 自动分配座位只是创建良好座位计划的一小部分。有关详细信息,请参阅 PerfectTablePlan tour 和 tips 页面。
【讨论】:
【讨论】:
尝试使用 GLPK 对此进行建模。整数线性规划适用于将约束引入具有多种可能结果的基于图的问题。
【讨论】:
我个人最喜欢的是不分配座位:让人们可以随便坐。
这可能会导致 [un] 故意的小圈子,但这意味着您不必担心。
【讨论】:
我认为这不是一个很好的答案,但你可以研究一下flocking behavior
如果您消除每一步的随机抖动,群体最终会安顿在每个成员相对于群体其他成员找到最佳位置的位置。
【讨论】:
这听起来像是一个约束满足问题。您可能应该检查也配备约束求解器的逻辑编程系统。它们通常像序言,只是它们实际上是对求解器可解决的问题的声明。
希望有一个可以使用您最喜欢的语言的简单界面来输入和输出数据。
【讨论】:
我不久前使用了一个程序,它可以完美地适应这个...它是一个 Java 应用程序,你可以定义规则,它会创建满足规则的测试用例。文件扩展名为 .als
fact GateRules { all g:Gate | one g.loc // Gates have 1 Location
我会继续为程序名称绞尽脑汁。
编辑:它是Alloy 现在想想,它可能并不理想——“固定配置的座椅”的概念很难建模。我以不同的方式使用它:定义规则(机场登机口在一个位置,只有一架飞机在跑道上),并测试功能的前后条件(在我降落飞机后,我什至可以在一个跑道?)。
【讨论】: