Chapter 5 Local Search Methods

局部搜索是解决复杂计算组合问题(包括约束满足问题(CSP))的基本范式之一。它为解决在许多实际应用程序中遇到的大型和困难的问题实例提供了一些最成功和最通用的方法。尽管在系统、完整的搜索算法方面取得了令人印象深刻的进展,但在许多情况下,局部搜索方法是解决这些大型复杂实例的唯一可行方法。本地搜索算法自然也适合于处理在许多实际应用中出现的优化标准。

局部搜索的基本思想是从一个给定问题实例的随机或启发式生成的候选解决方案开始,这个候选解决方案可能是不可行的、次优的或不完整的,然后通过通常较小的修改迭代改进这个候选解决方案。不同的本地搜索方法在实现改进的方式上有所不同,特别是在处理不可能直接改进的情况的方式上。

大多数局部搜索方法使用随机化,以确保搜索过程不会停滞在不令人满意的候选解决方案中,因此称为随机局部搜索(SLS)方法。SLS方法的突出例子有:随机编辑改进(也称为随机爬山)、进化算法、模拟退火、禁忌搜索、动态局部搜索,以及最近的蚁群优化。这些类的局部搜索算法也被广泛称为元启发式。

与许多其他技术相比,许多SLS方法在概念上相当简单,而且相对容易实现。同时,它们往往表现出优异的性能,在许多情况下,在各自的问题上定义了最先进的技术。此外,SLS算法通常非常灵活,因为它们很容易适应问题规范中的变化。这使得它们成为解决概念上复杂的应用程序问题的非常流行的选择,这些问题有时在项目开始时还没有完全形式化。因此,SLS算法是学术界和工业界最突出、应用最广泛的组合问题求解技术之一。

需要注意的是,从非常广泛的约束规划的角度来看,许多组合问题,包括调度、排序、配置和路由问题,都可以看作是约束规划问题。这些问题的局部搜索算法被来自不同学科的研究人员广泛研究,而相应的大量文献很难(如果不是不可能的话)在一本书的一个章节内进行调查。

因此,本章主要概述了约束满足问题(CSP)的SLS算法,这是约束规划中最突出的问题之一。本文重点研究了命题可满足性问题SAT和通用CSP的一种广为人知的高性能算法,这是CSP的一个特例,它不仅在约束规划和推理研究中发挥着重要作用,而且在计算科学的许多其他领域也发挥着重要作用。我们还简要介绍了约束优化问题的SLS算法,如MAX-CSP和MAX-SAT,它们分别是CSP和SAT的优化变体,并向读者介绍了一些用于实现约束编程问题的局部搜索算法的著名框架和工具包。

5.1 Introduction

约束编程是一个功能强大的概念框架,它可以表示许多类型的组合问题。在这一章中,我们主要关注有限离散约束满足问题(CSP),这是约束编程领域的一个核心问题,在人工智能、运筹学和其他计算科学和相关学科领域有很多应用。

The Constraint Satisfaction Problem (CSP)

CSP的一个实例由一组变量定义,每个变量的一组可能值(或域)和一组约束,每个约束都涉及一个或多个变量。约束满足问题(CSP)是为给定的CSP实例决定是否可以从其各自的域中为每个变量分配一个值,以便同时满足所有约束。形式上可以表示为[52]:

Definition 5.1. 一个CSP实例是三元P =(V,D,C),其中V = {x1,...,xn}是n个变量的有限集合,D是将每个变量xi映射到它可以采用的可能值的集合Di的函数(Di被称为xi的域),C = {C1,...,Cm}是一组有限的约束。每个约束Cj是来自V的变量的有序集Var(Cj)的关系,即,对于Var(Cj)=(y1,...,yk), Cj ⊆D(y1)×···×D(yk)。 集合Cj的元素被称为满足Cj的元组,并且k被称为约束Cj的arity。如果P中所有约束的arity最多为n,则CSP实例P称为n-ary; 特别是,二进制CSP实例最多只有两个arity约束。

如果P中的所有变量都具有离散和有限域,则P是有限离散CSP实例。P的变量赋值是映射a:,其从每个变量x∈V分配来自其域D(x)的值。 (将值分配给单个变量称为原子赋值。)设Assign (P)表示P的所有可能变量赋值的集合;然后一个变量赋值a∈Asign(P)是P的解,只有当它同时满足C中的所有约束时,即,如果对于所有Cj∈C,例如,Var(Cj)=(y1,...,yk),则赋值a将y1,...,yk映射到值v1,...,vk,其中v1 ,...,vk∈Cj。

至少存在一个解决方案的CSP实例称为一致(或可解决),而没有任何解决方案的实例称为不一致(或不可解决)。

有限离散CSP问题是确定给定的有限离散CSP实例P是否一致的问题。

The Propositional Satisfiability Problem (SAT) 

命题逻辑中的可满足性问题(SAT)可以看作是一般CSP的一个突出特例。考虑一个命题公式F在合取范式,即,

其中每个lij都是命题变量或其否定;lij称为文字,而析取词ci称为F的子句。可满足性问题的目标是确定F是否可满足,即对于变量xk,是否存在一个赋值为真值和假值的赋值a,使每个子句至少包含一个由a表示为真值的文字。显然,这对应于一个CSP实例,其中所有变量都具有域{true,false},并且对于每个子句ci,如果且仅当ci在(部分)满足时,在ci中出现的变量之间存在约束Ci。 分配其变量。 因此,具有k个文字的子句对应于k元约束关系。

SAT作为一个典型的np完全问题,在计算理论中具有核心地位;它在电路设计和验证中也起着重要作用(如Biere et al.[6]或Gu and Puri[37])。SAT的其他实际应用包括各种调度任务[126,15]以及来自机器视觉、机器人、数据库系统和计算机图形学[38]的问题。SAT在算法的发展中也扮演着重要的角色;其概念简单,便于新算法的设计、实现和评估。特别是在本地搜索算法方面,许多思想和技术首先是为SAT开发的,然后才被推广到更一般类型的CSP实例。

SAT-Encodings of CSP CSP的SAT编码

可以通过多种方式将CSP实例编码为SAT(例如,参见Prestwich [84]或Hoos和St¨utzle[52]以获得概述),并且使用这样的编码,可以通过状态来解决任意CSP实例。 最先进的SAT求解器,包括强大的本地和系统搜索算法以及预处理技术。 这种方法的主要吸引力来自于之前提到的SAT在算法开发和实现方面的优势,以及对SAT求解技术的大量研究。

然而,SAT编码可能导致问题实例的大小和各自的搜索空间的潜在显著增加;更有问题的是,它们可能混淆CSP实例的结构方面,这些方面对于有效地解决这些问题非常重要。

有一些证据表明,“以SAT方式编码和求解”的方法可以非常有效地工作(见Kautz and Selman [58], Ernst et al. [24] and Hoos [48]);此外,研究表明,一些编码可以让SAT-solvers直接利用CSP结构的重要方面[5]。然而,仍然不清楚是否以及在何种程度上发现良好的SAT编码比开发良好的原生CSP算法更容易 - 特别是在本地搜索方法的情况下,这通常可以直接来自SAT上获得的见解和改进。 应该注意的是,建模的一般问题(即找到问题的良好表述)在约束规划中起着重要作用(见第11章)。

Local Search 

对于像CSP这样的组合问题,本地搜索背后的关键思想非常简单:从初始搜索位置开始(对于CSP,通常是随机选择的、完整的变量赋值),在每个步骤中,搜索过程都会移动到从本地邻居中选择的位置(通常基于启发式评估函数)。这个过程被迭代,直到满足终止条件。为了避免搜索过程的停滞,几乎所有的局部搜索算法都使用某种形式的随机化,通常在初始位置的生成中使用,在许多情况下也在搜索步骤中使用。这就引出了随机局部搜索(SLS)算法的概念,其正式定义如下:

Definition 5.2. 给定(组合)问题Π,用于求解任意问题实例π∈Π的随机局部搜索算法由以下部分定义:

  • the search space在CSP的情况下,实例π的搜索空间S(π)是一组有限的候选解s∈S(也称为搜索位置,位置,配置或状态) - 这通常是所有完整变量赋值的集合;
  •  a set of (feasible) solutions 一组(可行的)解S'(π)⊆S(π) - 对于CSP,该集合通常由给定CSP实例的所有解决方案组成;
  •  a neighbourhood relation 邻域关系在S(π)、N(π)⊆S(π)×S(π)——这确定了在搜索过程中任何给定时间在一个搜索步骤中可以达到的位置;
  •  a finite set of memory states 一组有效的存储器状态M(π),在不使用存储器的SLS算法的情况下,可以仅由单个状态组成,并且在其他情况下保存有关搜索位置超出搜索位置的状态的信息 (例如,在禁忌搜索的情况下禁忌任期值);
  • an initialisation function 初始化函数init(π):,它指定初始搜索位置和存储器状态的概率分布 - 该函数表征搜索过程的初始化;
  • a step function 步进函数step(π):将每个搜索位置和存储器状态映射到其相邻搜索位置和存储器状态上的概率分布  - 此功能指定每个搜索步骤中发生的情况;
  • a termination predicate 终止谓词 terminate (π):将每个搜索位置和存储器状态映射到真值上的概率分布,其指示在到达特定搜索位置和存储器状态时搜索将被终止的概率。

在上文中,D(S)表示给定集合S上的概率分布集合,其中形式上,概率分布D∈D(S)是函数其将S的元素映射到它们各自的概率。

注意,该定义包括确定性局部搜索算法作为特例,其中初始化和阶跃函数以及终止准则中使用的概率分布是退化的,所有的概率质量集中在基础域的一个值上。如前所述,完全确定性的局部搜索算法很少用于研究或应用

在几乎所有的本地搜索算法CSP,所有完成变量的搜索空间由给定CSP的作业实例,所有的解集是由满意的作业,和所谓的1-exchange附近,在这两个任务直接邻居,如果且仅如果他们不同最多的值分配给一个变量。在坐的特例,一个变体的邻里关系称为the1-flip邻居通常用在这两个任务直接邻居,当且仅当可以获得另一个翻转的真值指派给一个确切的变量从真实tofalse,反之亦然。在许多情况下,初始搜索位置是通过均匀地随机生成一个变量赋值来确定的,如果找到了一个解决方案或超过了搜索步骤数量的给定界限,则满足终止准则。

针对CSP(和SAT)的各种局部搜索算法之间的区别主要在于它们的阶跃函数,除了最简单(和最无效)的算法外,其他算法都将启发式引导以评估函数的形式结合起来。该函数通常将给定问题实例π的候选解映射到实数上,使得其全局最小值对应于π的解。评价函数用于对当前搜索位置的直接邻域进行评价或排序。CSP的一个常用评估函数将每个赋值映射到它所违反的约束的数量。请注意,解决方案的特征是评价函数值为零,因此很容易识别。

有效地使用给定的评价函数g的最简单的局部搜索方法称为迭代改进(或II;也被称为爬山或迭代下降)。在每一个搜索步骤中,II从当前邻域中选择一个改进位置,即,位置s'∈N(s),其中g(s')<g(s),其中s是当前搜索位置。存在各种常用的启发式方法来选择这种改进的邻居。 在Iterative Best-Improvement中,选择N(s)内具有最小值g(s')的邻居s'; 如果存在多个这样的邻居,则随机均匀地选择一个。 另一方面,在迭代第一改进中,以给定顺序评估邻域,并且选择在该处理期间遇到的第一改进邻居作为下一搜索位置。 迭代改进的变体构成了几乎所有CSP,SAT和其他组合问题的局部搜索方法的基础。

The Min-Conflicts Heuristic 最小冲突启发式算法

CSP最简单、最广为人知的迭代改进算法是最小冲突启发式算法(Min conflict Heuristic, MCH)[76,77]。MCH迭代地修改单个变量的分配以便最小化违反约束的数量,这可以通过以下方式实现(参见图5.1):给定CSP实例P,通过分配P a中的每个变量来初始化搜索过程。 从其域中随机均匀选择的值。然后,在每个局部搜索步骤中,首先从所谓的冲突集合K(a)中随机均匀地选择CSP变量x,所述变量出现在当前分配a下不满足的约束中的所有变量的集合。 然后从x的域中选择新的值v,使得通过将v赋值给x,最小化不满足约束(confiicts)的数量。 如果具有该属性的v的多个值,则随机均匀地选择其中一个。 当找到解决方案或超过搜索步骤数量的用户指定限制时,搜索终止。

使用贪婪初始化过程的基本MCH算法的一种变体已经非常成功地应用于n- queens问题(一般CSP的一个突出的特殊情况,存在专门的多项式时间算法),该问题具有非常大的n(比如,n等于一百万)。此外,MCH在图形着色和实际调度问题中的应用也证明了其有效性[77]。

与大多数迭代改进方法一样,MCH会陷入底层评价函数的局部极小值;因此,它本质上是不完整的[52],即。,即使运行任意长的时间,为可解决的CSP实例找到解决方案的概率也可能接近一个严格小于1的值。克服这个问题的一个简单的通用方法是使用静态重启机制对MCH进行扩展,该机制对每个maxSteps搜索步骤重新初始化搜索过程,其中maxSteps是算法的一个用户指定参数。不幸的是,所得到的算法的性能严格且非常敏感地取决于maxSteps的良好选择,maxSteps在不同的CSP实例之间有很大的不同。 MCH的基本上更有效的变体将在本章后面讨论。

The GSAT Algorithm

基本GSAT [91]是SAT的简单迭代最佳改进算法,它使用给定赋值下不满足的子句数作为其评估函数。 算法如下(参见图5.2):从随机均匀选择的完整变量赋值开始,在每个局部搜索步骤中,单个命题变量从true变为false,反之亦然。 选择要被填充的变量,以便实现不满足条款数量的最大减少; 如果该属性有多个变量,则随机均匀选择其中一个变量。GSAT中的迭代最佳改进搜索很容易陷入评价函数的局部极小值。因此,GSAT使用了一种简单的静态重启机制,在每次maxSteps翻转时,都会在随机选择的任务中重新初始化搜索。当找到给定公式F的模型时,或者在maxSteps变量翻转的maxTries序列(也称为“try”)在没有找到F模型的情况下执行之后,搜索将终止。

GSAT的直接实现是相当低效的,因为在每个步骤中,必须从头开始计算所有变量的分数,即由相应的fl ips引起的不满足条款的数量的变化。有效实施GSAT的关键是在每次尝试开始时只计算一次完整的分数,然后在每次尝试之后只更新那些可能受fl flped变量影响的变量的分数(这个机制的细节可以在Hoos和St¨utzle[52]的第6章中找到)。

对于maxTries参数的任何固定设置,GSAT基本上是不完整的[44,47],并且在大多数SAT实例上观察到严重的停滞行为。 尽管如此,当它首次引入时,GSAT的表现优于当时可用的SAT最佳系统搜索算法。作为SAT的第一个SLS算法之一,基本的GSAT对广泛的更强大的SAT求解器的开发产生了非常重要的影响,包括大多数当前最先进的SAT SLS算法。此外,GSAT及其变体(在本章后面描述)也对CSP的高性能SLS算法的开发产生了重大影响。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值