大家。我正在研究大学时间表调度项目。主要是,我使用禁忌搜索,但我想问:
在一般搜索中,你可以探索当前状态的所有邻居,然后根据健身或评估函数采取最佳状态,但是在这样的项目中,生成所有邻居会降低性能,所以有没有让我绕过这样的问题的方式?例如,我可以为一个州生成子项,然后在搜索过程中为所有其他州生成这一代吗?
如果有人有此类算法的专家,请告诉我,因为我在这些问题上努力工作。
答案 0 :(得分:1)
答案 1 :(得分:0)
我不是专家,但通常不会考虑优化此类计算 这真的取决于你使用的健身功能。通常,了解节点的适应性,您可以推断出范围,甚至可以推断出最差的儿童健康状况范围 通过一个足够简单的函数,您甚至可以实现计算孩子的适应性,即使没有明确生成它们,然后只有在它值得的时候才生成它们。
答案 2 :(得分:0)
之前评论的附录:修剪也可以在多个级别完成,具体取决于您的性能和内存限制。例如:
将初始状态放入优先级队列。
直到终止(例如队列为空,找到适当的解决方案,时间限制已到期,......),重复以下步骤:
2.1。从队列中取出最上面的条目。
2.2。生成孩子(如果可能的话,使用估算器首先获得价值最高的孩子)。
2.3。生成每个子项时,将其放入优先级队列。一旦队列达到大小限制(您可能通过试验和错误凭经验确定),每次插入队列时都应该删除队列中的最低值元素。
显然,具备良好的估算/评估功能对于完成这项工作非常重要。您的队列评估函数可以进行调整以考虑“生成”(例如,在更接近初始状态的状态下,在较浅的深度处给予加权奖励)以调整其在深度偏好和广度偏好之间的偏差。