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

Jes*_*ose 2 language-agnostic algorithm artificial-intelligence dynamic-programming genetic-algorithm

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

制定时间表时间表

用于创建学校时间表的算法


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

  • 程序的终止条件很难定义
  • 不能轻易逃脱局部极大值

我希望该程序能够被用户轻松推向相互冲突的标准和不可能的解决方案 .

因此,我想要一种方法

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

有100000个尽可能详尽的时间表.


我四处搜索,发现像模拟退火这样的元启发式算法是一个很好的选择.那么动态编程算法呢?

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

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

ami*_*mit 5

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

GA和其他AI算法,通常用于很多较大的输入[千亿和更多的可能性],所以他们可能不会在你的情况最好的解决方案.

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

(*)注意:你可以修改GA和最陡峭的登山攀爬,以克服你提到的第二个问题[逃避局部最大值],当解决方案没有改善k步时强制执行随机重启,但是再次 - 你不知道有多接近你是每个点的最佳解决方案.

  • 您可以通过[分支和绑定](https://secure.wikimedia.org/wikipedia/en/wiki/Branch_and_bound)改进强力搜索,丢弃不可能比您已有的最佳解决方案更好的解决方案. (3认同)