我正在编写一个带有困难编程问题的调度程序。有几个事件,每个事件都有多个会议时间。我需要找到会议时间的安排,以便每个时间表包含任何给定事件一次,使用每个事件的多个会议时间之一。
显然我可以使用蛮力,但这很少是最好的解决方案。我猜这是一个相对基本的计算机科学问题,一旦我开始学习计算机科学课程,我就会学到这些问题。与此同时,我更喜欢任何可以阅读此内容的链接,甚至只是我可以使用谷歌的名称。
答案 0 :(得分:11)
我认为你应该使用遗传算法,因为:
解决方案的质量取决于您打算花多少时间来解决该计划..
答案 1 :(得分:5)
有几种方法可以做到这一点
一种方法是进行约束编程。这是feanor建议的动态编程的一个特例。使用可以为您进行边界和分支的专用库是很有帮助的。 (Google用于“gecode”或“comet-online”查找库)
如果您在数学上倾向于那么您也可以使用整数编程来解决问题。这里的基本思想是将您的问题转化为一组线性不等式。 (谷歌为“整数节目安排”找到许多现实生活中的例子,谷歌为“Abacus COIN-OR”寻找一个有用的图书馆)
我的猜测是约束编程是最简单的方法,但如果你想在某些时候在你的问题中包含实变量,那么整数编程很有用。
答案 2 :(得分:3)
您的问题描述并不完全清楚,但如果您要做的只是查找没有重叠事件的计划,那么这是一个简单的bipartite matching问题。
您有两组节点:事件和时间。从每个事件中划出边缘到每个可能的会议时间。然后,您可以使用augmented paths有效地构建匹配(节点之间可能的最大边集)。这是有效的,因为您始终可以将二分图转换为等效的流程图。
答案 3 :(得分:2)
听起来这可能是dynamic programming解决方案的一个很好的候选者,特别是与interval scheduling问题类似的东西。