我很快就要结婚并且忙于座位计划,并且遇到了通常的问题:X和Y 必须坐在一起,但A和B不能站在一起其他等。
我正在处理的数字并不大(所以手动选项会很好),但是由于令人讨厌的说服力,我想知道是否有任何软件可供我这样做?
如果没有完全匹配,我应该寻找什么(问题空间,书籍,参考代码)来调整我的目的?
答案 0 :(得分:12)
我是PerfectTablePlan的开发者。我在此发布以及Joel's Business of Software。 ; 0)
组合问题,例如座位分配,在算法上非常讨厌。事实上NP-hard。在60个座位上容纳60位客人的方式是60个! (60阶乘)并且超过已知宇宙中的原子数。
PerfectTablePlan允许您指定A必须位于B旁边,但不能靠近C.它使用遗传算法自动分配座位。这在实践中非常有效 - 它通常会在几秒钟内为100位客人找到一个合适的解决方案。您可能需要为1000多位客人制作咖啡。在实践中,通常还需要进行一些拖拽微调来应对当地风俗和家庭政治的变幻莫测(鲍勃叔叔有点聋,我们最好让他更接近顶级桌子)。
您可以了解有关遗传算法的更多信息here。
Ps /自动座位分配只是制定良好座位计划的一小部分。有关更多详细信息,请参阅PerfectTablePlan tour和tips页面。
答案 1 :(得分:6)
答案 2 :(得分:1)
尝试使用GLPK进行建模。整数线性规划适用于将约束引入具有多种可能结果的基于图的问题中。
答案 3 :(得分:1)
我个人最喜欢的是不指定座位:允许人们坐在任何他们想要的地方。
这可能导致[un]故意的cliquishness,但这意味着你不必担心它。
答案 4 :(得分:0)
我希望这不是一个好的答案,但你可以研究flocking behavior
如果你在每一步都消除了随机的紧张情绪,那么鸡群最终会在每个成员找到相对于其他人的最佳位置的地方定居。
答案 5 :(得分:0)
前一段时间我使用过一个完全适合这个程序的程序......它是一个Java App,你可以定义规则,它会创建满足规则的测试用例。文件扩展名为.als
fact GateRules { all g:Gate | one g.loc // Gates have 1 Location
我会继续抨击我的大脑以获取程序名称。
编辑:那是Alloy 现在我考虑一下,它可能并不理想 - “固定配置中的座位”的概念有点难以建模。我使用它的方式不同:定义规则(机场大门在一个位置,只有一个飞机在跑道上),并测试功能的前后条件(在我降落飞机后,我甚至可以在一个飞机上有一个以上的飞机)跑道?)。
答案 6 :(得分:0)
这听起来像约束满足问题。您应该检查一下也配备了约束求解器的逻辑编程系统。它们通常像prolog一样,只有它们实际上是因为它们的求解器可以解决的问题。
希望有一个可以从您喜欢的语言轻松获取界面,以获取数据。