如果找不到精确匹配的软件,我应该寻找什么(问题空间、书籍、参考代码)来调整以适应我的需求?
我是PerfectTablePlan的开发者。我在Joel's Business of Software上也发布了一些内容。 ;0)
组合问题,如座位分配,在算法上非常棘手。实际上是NP-hard问题。将60个客人安排在60个座位上的方式有60!(60的阶乘)种,这比已知宇宙中的原子数量还要多。
PerfectTablePlan允许您指定A必须坐在B旁边,但不能坐在C附近。它使用遗传算法自动分配座位。实际上,这在实践中效果很好 - 它通常可以在几秒钟内为100个客人找到一个不错的解决方案。对于1000+客人,您可能需要泡一杯咖啡。实际上,通常还需要进行一些拖放微调,以应对当地习俗和家庭政治的变幻莫测(Bob叔叔听力有点差,我们最好把他放在靠近主桌的位置)。
您可以在这里了解更多关于遗传算法的信息。
Ps/ 自动座位分配只是创建良好座位计划的一小部分。请参阅PerfectTablePlan tour 和 tips 页面以获取更多详细信息。
我个人喜欢不指定座位:让人们坐在他们想坐的地方。
这可能会导致有意或无意的小圈子,但这意味着你不必担心它。
fact GateRules { all g:Gate | one g.loc // Gates have 1 Location
我会继续费尽心思想出程序名称。
编辑:它是Alloy 现在我想起来了,这可能不是理想的 - “固定配置的座位”概念可能有点难以建模。 我使用它的方式不同:定义规则(机场登机口在一个位置,只有一架飞机在跑道上),并测试函数的前后条件(在我降落飞机后,我是否可以在跑道上有多架飞机?)。