什么类别的算法可用于时间表?

时间:2011-12-20 09:10:00

标签: algorithm language-agnostic artificial-intelligence genetic-algorithm dynamic-programming

是的,在SO上有很多这样的问题。我看到遗传算法是最常见的答案。

Making a timetable schedule

Algorithm for creating a school timetable


但是,我担心GA的这些特征

  • 程序的终止条件很难定义
  • 无法轻易逃脱局部最大值

我希望该程序能够被用户推送到冲突的标准和不可能的解决方案太容易

因此我想要一种

的方法
  • 果断 - 保证达到接近最佳状态报告该算法无法达成解决方案
  • 可以采用硬(不可侵犯)限制和软限制
  • 优雅地接受用户输入约束;如果用户输入不起作用,可以将其添加到代码而不会破坏它

有十万个详尽无遗的时间表。


我四处搜索,发现像metaheuristic algorithms这样的simulated annealing是一个很好的候选人。那么动态编程算法呢?

对于这样的数据集,蛮力方法是否合适?

什么是符合标准的好算法?

1 个答案:

答案 0 :(得分:5)

对于小输入,只有100,000种可能性 - 我会选择一个简单的强力解决方案:只需检查所有可能性,并选择最好的。对于现代机器,在大小为100,000的输入上运行评分函数在计算上并不困难,并且很可能只需几秒钟。

GA和其他AI算法通常用于很多更大的输入[数十亿甚至更多的可能性],因此它们可能不是您的最佳解决方案。

与任何其他解决方案不同,强力解决方案将确保您获得最佳解决方案,并在耗尽所有可能的解决方案时终止。

(*)注意:您可以修改GA和最陡峭的上升hill climbing,以便在解决方案没有针对k个步骤进行改进时通过强制执行random restarts来克服您提到的第二个问题[转义本地最大值]再次 - 你不知道你在每个点上与最佳解决方案有多接近。