约束满足问题的求解方法之基于回溯的搜索和基于相容性技术的约束传播

来源:互联网 发布:网络剧余罪第一季下载 编辑:程序博客网 时间:2024/04/30 09:00

       一个约束满足问题要想利用约束编程的方法通过计算机进行求解,需要在对问题分析、抽象的基础上,将问题中的对象表示为变量,将问题中的约束关系表示为变量间的确切的数学关系。这个过程就是约束满足问题的建模。

       约束满足问题建模的目的是为了用确切的数学方式来描述现实世界中的模糊约束。约束满足问题建模的最大难点在于问题简化和抽象的程度不好确定。进行多大程度地简化和抽象,在哪个地方简化和抽象,如何简化和抽象都是需要认真考虑的。如果简化和抽象过度,会导致建立的模型无法完整地描述整个约束满足问题;如果抽象不够,会导致约束条件过多从而致使问题无解。因此,适当的简化假设,合理的抽象分析是约束建模需要重点研究的,也是约束满足问题求解的前提和基础。

约束满足问题在我们现实生活中随处可见。很多我们生产、生活中常见的问题都可以通过用变量、变量的定义域以及变量之间约束关系表示成CSPs模型。最后,通过求解CSPs,就可以解决我们日常生产、生活中的难题了。一个CSP可以有一个或者多个可行解,也有可能没有可行解。如果一个CSP有解,即可以为CSP中的所有变量全都找到不违反任何约束的赋值,我们称该CSP是相容的(Consistent);反之,则此CSP是不相容的。对于软约束满足问题,我们只是需要寻找一组变量的赋值,使之违反尽数量可能少的约束条件。

从约束满足问题作为计算机领域的一个独立的学科登上世界学术舞台,约束求解技术就一直是该领域研究的热点。约束满足问题求解,就是为所有变量在其定义域中分配一个值,使所有的变量-值对满足该CSP中所有的约束条件。

 

    伪代码1.1 ——Construct assignment A for CSP(X,D,C)1.begin:2. 3. 4.    Select a variable  that is not assigned in A.5.    Choose a value   with probability  6. 7.end while8.end


 

CSPs的求解方法,在直观上可以通过搜索法(穷举)来实现,也就是逐一为变量赋值,然后验证该赋值是否满足约束。如果满足,则结束;反正,则回溯到上一个可能产生冲突的地方,为该变量在其定义域重新分配一个值。这种方法,可以命名为“基于回溯的搜索”。

基于回溯的搜索

回溯搜索类似于树的深度优先遍历算法,伪代码描述如下:

 

    伪代码1.2 ——Backtrack((X,D,C),A)1.    Input:2.   CSP(X,D,C)3.   Partial or complete assignment A for(X,D,C)4.    Begin:5.    if var(A) = X6.      return A;7.     else8.      Choose a variable xi∈X such that xi ∉var(A)9.    for each value v∈D(xi)10.      if A∪{(xi, v)} is consistent11.        Solution<-Backtrack((X,D,C), A∪{(xi, v)})12.      if Solution ≠ ∅13.        return Solution14.    return ∅15.    end

 

       基于回溯的搜索,虽然是一种完备算法,但是很显然这种单纯的回溯算法在效率上是极其低下的,如果我们假设m为某约束网络中变量的个数,n为定义域的个数(不失一般性,可以假设每个变量定义域相同),那么该方法的时间复杂度为O(mn)。对于变量个数稍多或者定义域稍大的约束满足问题,这种回溯搜索方法都是无法保证在有限的时间内结束的。另一种是基于相容性技术的约束传播。基于回溯的搜索,虽然是一种完备算法,但是单纯的回溯算法无法保证CSP的求解能在多项式时间内结束。所以,以约束推理技术为代表的相容性技术,配合回溯搜索的方法一直是国内外学者们为了提高求解效率和压缩求解空间所研究的热点。

基于相容性技术的约束传播

     约束传播是在约束求解过程中,通过简化算法、约束推理、规则迭代等方法将一个约束或者一个变量赋值的结果传递到其它约束或者变量中去的做法。任意的推理过程均可以用来进行约束的传播,只要这个推理过程会推导出由于不满足一组给定的约束而使问题中的变量出现了明显禁止的值或值的组合,这个推理就是有效的推理,就可以用来进行约束传播,加速求解进程。

    下面给出几个和相容性技术相关的概念的定义。

定义 顶点相容

一个CSP(X,D,C)是顶点相容的,当且仅当对于变量X中的任意变量Xi,在其论域DXi中都存在一个值满足所有关于这个变量的一元约束。

定义 弧相容(Arc Consistent,AC)

给定一个约束网络R=(X,D,C),RijC为变量Xi,Xj的约束。一个变量Xi是相对于变量Xj弧相容的,当且仅当对于一切aiDXi,存在aj∈DXj,使得(ai,aj) ∈Rij。由{Xi,Xj}所定义的约束子网络是弧相容的,当且仅当xi对于xj是弧相容的,并且xj对于xi也是弧相容的。一个约束网络是弧相容的,当且仅当它所有的弧(大小为2的子网络)都是弧相容的[11]

定义  路径相容(Path Consistent,PC)

给定一个约束网络R=(X,D,C)。一个二元变量集(Xi,Xj是相对于变量Xk路径相容的,当且仅当对于一切相容性的赋值((Xi,ai),(Xj,aj)),存在akDk 使得((Xi,ai),(Xk,ak)), ((Xk,ak),(Xj,aj))都是相容的。一个二元约束Rij 是关于变量Xk路径相容的,当且仅当对于任意(ai, aj) ∈ Rij(其中ai∈Di ,aj∈Dj),都存在akDk,使得(ai, ak)∈Rik and (ak, aj)∈ Rkj

定义  k相容(k Consistent)

       给定一个约束网络,一个关系,其中。对于在s之外的变量y是k相容的,当且仅当对于任意,存在变量,使得是相容的。一个约束网络是k相容的,当且仅当对于任意由k-1个不同变量组成的实例,任意选择的第k个变量都存在一个值,使得这K个变量一起满足所有关于第k个变量的所有约束。

弧相容是最重要的相容性技术,顶点相容和弧相容在搜素中的意义在于任意二元CSP,在其搜索树中,如果能满足顶点相容和弧相容,则一个搜索不必回溯。

局部相容性技术和规则迭代方法是约束传播的两种基本方法。前者定义了约束传播完成后,变量必须满足的约束,后者是对约束传播方法自身性质和规则的描述。CSPsd的求解中,引入约束传播机制能够有效降低求解时间,在搜索方法中引入恰当的推理技术可以大幅提高约束求解算法的效率。


 

0 0
原创粉丝点击