5.7 Frameworks and Toolkits for Local Search 局部搜索的框架和工具包
软件框架和编程工具包极大地促进了求解约束满足和优化问题的局部搜索算法的开发及其实际应用。在处理概念上复杂的约束编程问题时尤其如此。这样的系统可以极大地减轻与实现SLS算法的有效实现相关的负担。它们还促进了软件的重用,并支持分离问题公式(建模)和解决方案。在下面的部分中,我们将简要概述一些支持SLS算法的比较知名的框架和工具包;其中一些是通用组合优化或约束编程系统,另一些则专门关注于局部搜索方法。
ILOG Solver是一个商业系统,它为用户提供了一个c++库,该库实现了最先进的约束满足和优化算法。ILOG Solver的OPL接口支持丰富的声明性语法,可用于定义问题的结构和启发式[41]。ILOG Dispatcher是一个专门的车辆路由包,支持多种局部搜索算法。
商业iOpt系统实现了广泛的SLS方法。通过图形界面,iOpt允许用户尝试不同的局部搜索策略,并构建混合算法。它还提供了Java中的抽象类库,可用于实现局部搜索方法[114]。类似地,免费提供的对象导向框架EasyLocal++[31]和HotFrame[25]支持c++中局部搜索算法的设计和实现。在这些通用优化系统中,算法中独立于问题的部分以抽象类的形式被捕获,这些抽象类由用户专门实现特定于问题的算法。
COMET编程语言支持约束编程中的建模和搜索抽象。它允许用户使用约束、建模和搜索抽象来指定和控制局部搜索算法,并已被广泛应用于组合问题[42]。与概念相关的SALSA语言促进了本地、系统和混合搜索算法的简洁、声明性定义[62]。最后,免费使用的ZDC系统旨在通过为非约束编程专家提供简单声明性语言(EaCL)和图形用户界面,帮助他们进行约束编程。它实现了许多局部搜索算法,包括引导局部搜索[10,109]。
无论局部搜索算法是在这样的框架或环境中实现的,还是“从头开始”实现的,重要的是经验结果的重现性,以确保它们发布的描述准确和完整(还包括所有性能关键的实现细节)。此外,只要有可能,应该向研究界提供参考实现。
5.8 Conclusions and Outlook
在求解约束规划问题(如CSP)的各种方法中,局部搜索方法引起了研究者和实践者的极大兴趣。虽然大多数局部搜索算法都是不完整的,但在很多情况下,它们的性能随实例大小的变化比完整的、系统的搜索算法更好。因此,高性能的本地搜索方法通常是解决大型和困难的实际问题的唯一实用工具,这些问题通常涉及数千个具有大型域的变量。对于主要目标是快速找到可行解决方案的决策问题和需要尽可能高效地获得高质量或(接近)最优解决方案的优化问题,尤其如此。
局部搜索方法在解决SAT、MAX-SAT、旅行商、二次分配等重要问题上取得了成功。它们的有效性和效率也已在许多实际问题中得到证明,包括调度、车辆路线规划和无线电频率分配任务。在许多这类应用程序中,与所有其他方法相比,局部搜索算法实现了相当或优越的性能。
尽管高效的局部搜索算法通常包含特定于问题的知识(通常以邻域关系和评估函数的形式),但已经证明在广泛的组合问题中有通用的、高层次的策略是有效的。这些一般的局部搜索策略大多涉及随机化,以避免搜索停滞在给定的评价函数的局部极小值内或附近,因此在随机局部搜索(SLS)的一般框架中进行捕获。随机迭代改进、禁忌搜索和动态局部搜索等SLS方法为CSP和SAT中一些最突出、性能最好的算法提供了基础。其他方法,包括模拟退火、进化算法、蚁群优化和迭代局部搜索,也被应用于这些和许多其他约束规划问题,并被证明对解决某些类型的实例是有效的。这些搜索策略使用不同的机制来平衡给定搜索空间的探索(多样化)和启发式信息的有效利用(强化)。增强和多样化机制往往以复杂的方式相互作用,微小的变化会对产生的算法的性能产生显著的影响。
因此,结合这一领域的理论成果难以获得且通常在实际应用中相关性非常有限的事实,SLS算法大多是通过计算实验的方式进行实证研究的。(值得注意的是,大多数(如果不是全部)其他高性能CSP算法也会遇到类似的情况。)在针对CSP的SLS算法的案例中,许多实证研究都集中在相对非结构化的随机二进制CSP实例的分布上。MAX-CSP也是如此,而SAT、MAX-SAT等突出特例的情况也是类似的。虽然这些实例对于评估搜索策略的有效性很有用,但它们缺乏在许多实际问题中发现的结构类型。因此,使用结构化问题实例对CSP算法和相关问题的SLS算法进行实证分析越来越受到重视。这项努力以及研究之间实证结果的可比性得到了公共收集的基准问题的促进,例如CSPLIB [32]和SATLIB [50]。
此外,尽管目前新SLS算法的设计在很大程度上类似于一种工艺,因为它在很大程度上需要经验和直觉,但人们对开发更有原则的方法非常感兴趣,这些方法将促进高性能SLS算法的设计。在这种背景下,先进经验方法(见,例如,第四章hoo和St¨utzle[52])结合具体的框架支持制定和实施局部搜索算法(见5.7节)可能会发挥重要作用。此外,我们对导致给定SLS算法某些问题实例相对困难的因素的理解是相当有限的。对这些因素的研究,例如通过搜索空间分析的方法,是一个活跃的研究领域,存在许多有待解决的问题。
另一个有吸引力的研究方向是开发SLS算法,该算法基于搜索过程中收集的信息或在各种问题实例上过度运行时收集的信息来调整它们的行为。这一领域的有趣工作包括Battiti和Tecchiolli[4]、Glover[35]和明顿[75]、Boyan和Moore[9]、Patterson和Kautz[83]、Hoos[45]、Mills[74]、Hutter等人[53]、Burke和Newall[11]和[59]的研究。
可以指出的是,在许多方面,对SLS算法的开发和理解在SAT中比在一般CSP中要先进得多。(MAX-SAT和MAX-CSP的情况类似。)这主要是因为,作为一个概念上更简单的问题,用于CNF公式的SAT更好地促进了SLS算法的开发、分析和高效实现。这就提出了一个问题:通过适当地扩展适用于SAT的高性能SLS算法,并使用特定的方法来处理其他约束编程方法中已知的某些类型的复杂约束,可以在多大程度上获得针对一般CSP的更有效的SLS算法。此外,已经证明在解决其他组合问题(如迭代局部搜索、可变深度搜索或分散搜索)方面非常成功的高级SLS方法,在解决约束满足和优化问题方面可能仍然具有相当大的潜力,而且这些潜力在很大程度上尚未开发。
总的来说,局部搜索方法是解决约束编程问题的最强大和通用的工具之一。它们带来了广泛的有趣的研究挑战,继续努力改进这些方法和我们对它们的理解将进一步增强它们在广泛的具有挑战性的现实应用中的实用性。