人工智能搜索

时间:2009-02-26 09:21:50

标签: algorithm search mathematical-optimization

大家。我正在研究大学时间表调度项目。主要是,我使用禁忌搜索,但我想问:

在一般搜索中,你可以探索当前状态的所有邻居,然后根据健身或评估函数采取最佳状态,但是在这样的项目中,生成所有邻居会降低性能,所以有没有让我绕过这样的问题的方式?例如,我可以为一个州生成子项,然后在搜索过程中为所有其他州生成这一代吗?

如果有人有此类算法的专家,请告诉我,因为我在这些问题上努力工作。

3 个答案:

答案 0 :(得分:1)

shoosh评论的附录:你在寻找pruning吗?存在许多此类策略,包括this个。请记住,一种尺寸并不适合所有尺寸。因此,您可能需要设计一个适合您需求的启发式方法。

答案 1 :(得分:0)

我不是专家,但通常不会考虑优化此类计算 这真的取决于你使用的健身功能。通常,了解节点的适应性,您可以推断出范围,甚至可以推断出最差的儿童健康状况范围 通过一个足够简单的函数,您甚至可以实现计算孩子的适应性,即使没有明确生成它们,然后只有在它值得的时候才生成它们。

答案 2 :(得分:0)

之前评论的附录:修剪也可以在多个级别完成,具体取决于您的性能和内存限制。例如:

  1. 将初始状态放入优先级队列。

  2. 直到终止(例如队列为空,找到适当的解决方案,时间限制已到期,......),重复以下步骤:

    2.1。从队列中取出最上面的条目。

    2.2。生成孩子(如果可能的话,使用估算器首先获得价值最高的孩子)。

    2.3。生成每个子项时,将其放入优先级队列。一旦队列达到大小限制(您可能通过试验和错误凭经验确定),每次插入队列时都应该删除队列中的最低值元素。

  3. 显然,具备良好的估算/评估功能对于完成这项工作非常重要。您的队列评估函数可以进行调整以考虑“生成”(例如,在更接近初始状态的状态下,在较浅的深度处给予加权奖励)以调整其在深度偏好和广度偏好之间的偏差。