我正在研究大学调度问题并为此使用简单的遗传算法。实际上它效果很好,可以在 1 小时内将目标函数值从 0% 优化到 90%(大约)。但随后这个过程会急剧减慢,需要几天时间才能得到最佳解决方案。我看到很多论文认为将其他算法与遗传算法混合是合理的。请您给我一些建议,告诉我什么算法可以与遗传算法混合,以及如何应用该算法来加速求解过程。主要问题是如何将任何启发式应用于这种复杂结构的问题?我不知道如何在那里应用,例如贪婪启发式。
提前感谢大家!非常感谢您的帮助!
问题描述:
-
I have:
- 由 ScheduleSlot 对象填充的数组
- 由课程对象填充的数组
-
I do:
- 标准两点交叉
- 突变(将随机课程移动到随机位置)
- 粗选(只选择n个最好的个体进入下一个种群)
附加信息@Dougal and @izomorphius:
我正在尝试制定一个大学时间表,该时间表在课程之间没有休息,课程重叠,并且为小组和教授提供地理分布的课程。
适应度函数非常简单:适应度 = -1000*numberOfOverlaps - 1000*numberOfDistrebutedLessons - 20*numberOfBreaks。 (或者类似的东西,我们可以简单地改变变量的系数)
一开始,我只是在随机的房间、时间和日期中安排课程来创建我的个人。
变异和交叉,如上所述,其实是微不足道的:
- 交叉 - 取父计划,随机选择交叉点和范围,交换父计划的部分内容,生成两个子计划。
- 突变 - 制定一个儿童时间表并将 n 个随机课程移动到随机位置。
我的初步观察:您选择了前面的系数numberOfOverlaps
, numberOfDistrebutedLessons
and numberOfBreaks
有点随机。我的经验表明,通常这些选择都不是最好的,你最好让计算机选择它们。我建议编写第二种算法来选择它们 - 可以是神经网络、第二种遗传算法或爬山算法。这个想法是 - 计算在一定时间后获得的结果有多好,并尝试优化这 3 个值的选择。
另一个想法:得到结果后,你可以尝试暴力优化它。我的意思是 - 如果您遇到最初的问题,“愚蠢”的解决方案将回溯检查所有可能性,这通常是使用dfs http://en.wikipedia.org/wiki/Depth-first_search。现在这会很慢,但你可以尝试使用迭代加深的深度优先搜索 http://en.wikipedia.org/wiki/Iterative_deepening_depth-first_search或者只是深度受限的 DFS。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)