有几个事件,每个事件都有多个会议时间。我需要找到一种会议时间的安排,使得每个日程表都恰好包含每个给定的事件一次,并使用每个事件的多个会议时间之一。我可以使用蛮力方法,但那很少是最佳解决方案。我更希望能够阅读相关资料的链接,或者只是一个我可以在谷歌上搜索的名字。
我认为你应该使用遗传算法,因为: 它最适合解决大问题实例。 以牺牲精确答案为代价,可以降低时间复杂度(不是终极最优解)。 你可以通过调整未满足偏好的适应度惩罚来轻松指定约束和偏好。 你可以指定程序执行的时间限制。 解决问题的质量取决于你打算花多少时间解决程序。 遗传算法定义 遗传算法教程 使用GA进行课程安排项目
有几种方法可以做到这一点。其中一种方法是使用约束编程。它是feanor建议的动态规划的一个特例。使用一个可以为您执行边界和分支的专业库很有帮助。(搜索“gecode”或“comet-online”以查找库)如果你数学倾向,你也可以使用整数规划来解决问题。基本思想是将问题转化为一组线性不等式。(搜索“整数规划调度”以找到许多实际示例,搜索“Abacus COIN-OR”以获得有用的库)我猜约束编程是最简单的方法,但整数规划在某些时候如果你想包含实数变量是有用的。
您的问题描述不是很清楚,但如果您只是想找一个没有重叠事件的日程安排,那么这就是一个简单的二分图匹配问题。您有两组节点:事件和时间。从每个事件到每个可能的会议时间都要画一条边。然后,您可以使用增广路径有效地构造匹配(节点之间最大可能的边集)。这是可行的,因为您始终可以将二分图转换为等价的流图。一个做到这一点的代码示例是BIM。标准的图形库,如GOBLIN和NetworkX也有二分图匹配实现。