约束传播
一。约束传播的核心思想:局部相容性。
局部相容性主要包括:结点相容 ,弧相容,路径相容以及k相容。
(1)结点相容
结点相容针对一元约束(约束只涉及一个变量),如果单个变量值域中的所有取值都能够满足该变量的一元约束,则称该变量是结点相容的。
通过运行结点相容总是能够消除CSP中的所有一元约束,因此通常只定义只含有二元约束的CSP求解器。
(2)弧相容
弧相容针对二元约束,如果如果单个变量值域中的所有取值都能够满足该变量的二元约束,则称该变量是弧相容的。
弧相容最经典的算法为AC-3算法。AC-3算法的目的是要达到所有变量都是弧相容,其基本思路如下:
将图中的所有弧加入到队列中,从队列中取出弧(xi,xj),先使得xi对xj弧相容,如果这是对于xi的值域Di没有影响,则检查下一条弧。如果使得Di变化(变小),则所有指向xi的弧(Xk,Xi)都要重新加入队列准备检验,因为Di的变小可能会导致Dk的变小,所以需重新检查。直至弧队列为空,得到解或者无解。
弧相容能够缩小变量的值域,有时甚至能够直接找到解,但某些情况下,弧相容检查并不会起到作用。
弧相容通过弧(二元约束)紧缩 变量的域值(一元约束)。
(3)路径相容
路径相容通过观察变量隐式约束来加强二元约束。如(Xi,Xj)相对Xk相容,表示的是对(xi,xj)中的每一个赋值,在Xk值域中的某些取值能够使得(xi,xk),(xk,xj)是相容的,这样的称之为路径相容。类似于Xi途径xk到达xj的一条路径。
(4)K相容
如果对于任何一个k-1个变量的相容赋值,第K个变量总能够被赋予一个和前一个k-1变量相容的赋值,则csp问题满足k相容。
约束传播
最新推荐文章于 2023-06-24 16:12:57 发布