机器智能-高频问题:AC-3算法

概述:

是一种约束传播算法,即在得到约束条件和值域的情况下,算出所有变量满足约束条件的取值范围。注意,AC-3算法能够处理的只有二元约束,即弧相容的情况,或者说在约束条件中任何一个约束条件都只包含了两个一下的变量。

算法步骤:

1、首先,将所有的二元组(弧)入队
2、二元组一个个出队,出队的时候确定一个为固定的值,另一个可变
3、对可变变量的值域进行调整,剔除不满足的值
4、如果值域发生改变,将与可变变量有关的所有的二元组入队
5、队列为空时,结束算法

举例说明:

在这里插入图片描述
1、首先,将所有的和约束条件有关的二元组(包括前后顺序调换的情况,如AB和BA)入队。此时就得到了所有的弧相容。
2、然后对第一个节点对(A,B)出队进行的操作:假定B的值域不变,调整A的值域
3、此时(B,A)应该入队,因为A的值变化后可能改变B的取值,但已经在队列中就不管了
4、(B,A)出队,固定A调整B
5、B调整后(A,B)和(C,B)都需要重新入队,其中(C,B)已经在队列中,就不用管了
6、(B,C)出队,固定C调整B
7、B调整后(A,B)和(C,B)应该入队,但已经在就不管了
8、(C,B)出队,固定B调整C
9、C调整后(B,C)和(C,B)应该入队,但已经在就不管了
10、(A,B)出队,固定B调整A
11、A调整后(A,B)和(B,A)应该入队,(B,A)入队
12、(B,C)出队,此时值域无变化,不作处理
13、(B,A)出队,此时值域无变化,不错处理
14、队列为空,得到四个变脸A,B,C,D的值域

发布了278 篇原创文章 · 获赞 166 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/qq_40851744/article/details/104954711