是的,在SO上有很多这样的问题。我看到遗传算法是最常见的答案。
Algorithm for creating a school timetable
但是,我担心GA的这些特征
我希望该程序能够被用户推送到冲突的标准和不可能的解决方案太容易。
因此我想要一种
的方法有十万个详尽无遗的时间表。
我四处搜索,发现像metaheuristic algorithms这样的simulated annealing是一个很好的候选人。那么动态编程算法呢?
对于这样的数据集,蛮力方法是否合适?
什么是符合标准的好算法?
答案 0 :(得分:5)
对于小输入,只有100,000种可能性 - 我会选择一个简单的强力解决方案:只需检查所有可能性,并选择最好的。对于现代机器,在大小为100,000的输入上运行评分函数在计算上并不困难,并且很可能只需几秒钟。
GA和其他AI算法通常用于很多更大的输入[数十亿甚至更多的可能性],因此它们可能不是您的最佳解决方案。
与任何其他解决方案不同,强力解决方案将确保您获得最佳解决方案,并在耗尽所有可能的解决方案时终止。
(*)注意:您可以修改GA和最陡峭的上升hill climbing,以便在解决方案没有针对k个步骤进行改进时通过强制执行random restarts来克服您提到的第二个问题[转义本地最大值]再次 - 你不知道你在每个点上与最佳解决方案有多接近。