最佳拟合调度算法

时间:2010-04-30 17:06:02

标签: algorithm scheduling genetic-algorithm genetic-programming

我正在编写一个带有困难编程问题的调度程序。有几个事件,每个事件都有多个会议时间。我需要找到会议时间的安排,以便每个时间表包含任何给定事件一次,使用每个事件的多个会议时间之一。

显然我可以使用蛮力,但这很少是最好的解决方案。我猜这是一个相对基本的计算机科学问题,一旦我开始学习计算机科学课程,我就会学到这些问题。与此同时,我更喜欢任何可以阅读此内容的链接,甚至只是我可以使用谷歌的名称。

4 个答案:

答案 0 :(得分:11)

我认为你应该使用遗传算法,因为:

答案 1 :(得分:5)

有几种方法可以做到这一点

一种方法是进行约束编程。这是feanor建议的动态编程的一个特例。使用可以为您进行边界和分支的专用库是很有帮助的。 (Google用于“gecode”或“comet-online”查找库)

如果您在数学上倾向于那么您也可以使用整数编程来解决问题。这里的基本思想是将您的问题转化为一组线性不等式。 (谷歌为“整数节目安排”找到许多现实生活中的例子,谷歌为“Abacus COIN-OR”寻找一个有用的图书馆)

我的猜测是约束编程是最简单的方法,但如果你想在某些时候在你的问题中包含实变量,那么整数编程很有用。

答案 2 :(得分:3)

您的问题描述并不完全清楚,但如果您要做的只是查找没有重叠事件的计划,那么这是一个简单的bipartite matching问题。

您有两组节点:事件和时间。从每个事件中划出边缘到每个可能的会议时间。然后,您可以使用augmented paths有效地构建匹配(节点之间可能的最大边集)。这是有效的,因为您始终可以将二分图转换为等效的流程图。

执行此操作的代码示例为BIM。标准图表库(例如GOBLINNetworkX)也具有二分匹配实现。

答案 3 :(得分:2)

听起来这可能是dynamic programming解决方案的一个很好的候选者,特别是与interval scheduling问题类似的东西。

具体来说,间隔调度问题有一些视觉效果here,这可能会使概念更清晰。 Here是关于动态编程的一个很好的教程。