三、传播引擎

1、约束传播问题的数学表示

\qquad 给定 变量集合 { X i } \{X_i\} {Xi}和其对应的值域 D ( X i ) D(X_i) D(Xi);给定传播器集合 { f j } \{f_j\} {fj}

\qquad 计算最大的值域 D ′ ( X i ) ⊆ D ( X i ) D'(X_i) \subseteq D(X_i) D(Xi)D(Xi)使得 D ′ = f ( D ′ ) D' = f(D') D=f(D),即计算最大的值域范围,使得无论再怎样调用传播器,变量的值域都不会再继续变化,若调用某个传播器 f f f之后,所有变量的值域均不发生变化,则称传播器 f f f达到一个不动点状态

2、传播引擎

\qquad 传播引擎可以看做是一种传播的方式(一种算法),这种传播方式重复采用传播器 f ∈ F f \in F fF,直到所有的传播器均达到不动点状态。令 F 0 F_0 F0表示已经达到不动点状态的传播器的集合, F n F_n Fn表示未达到不动点状态的传播器的集合。令 i S o l v ( F 0 , F n , D ) iSolv(F_0,F_n,D) iSolv(F0,Fn,D)表示传播引擎算法,算法流程如下所示:
在这里插入图片描述
\qquad 上述算法流程中有两个比较重要的函数: C h o o s e ( Q ) Choose(Q) Choose(Q) N e w ( f , F , D , D ′ ) New(f,F,D,D') New(f,F,D,D),分别用于选择县一个用于更新变量值域的传播器和向 Q Q Q中载入新的传播器。
\qquad 其中 C h o o s e ( Q ) Choose(Q) Choose(Q)可以使用队列来进行管理,利用队列先进先出的特性,选取在队列中逗留时间最长的传播器。
\qquad N e w ( f , F , D , D ′ ) New(f,F,D,D') New(f,F,D,D)函数在 F F F中选取出可能出现 f ′ ( D ′ ) ≠ D ′ f'(D')\neq D' f(D)=D的所有传播器 f ′ f' f添加到 Q Q Q中;最简单的 N e w ( f , F , D , D ′ ) New(f,F,D,D') New(f,F,D,D)函数的规则是观察调用 f f f之后,改变了哪些变量的值域,之后将这些变量所在的传播器均添加到 Q Q Q中,注意不要向 Q Q Q中添加重复的传播器。

3、幂等(idempotent)

\qquad 如果一个传播器满足 f ( D ) = f ( f ( D ) ) f(D)=f(f(D)) f(D)=f(f(D)),则称这个传播器是幂等的,即幂等传播器在调用一次之后,后续再进行调用时不对对变量的值域产生新的缩减效果。
\qquad 一个幂等传播器在被调用之后,不需要马上放回队列里面;但因为实际操作中很多变得值域中存在空洞,很多传播器都不是幂等的。
\qquad 值域传播器和最强的边界传播器(如果值域没有空洞)是幂等的。

4、调用事件

\qquad 一些变量的值域的改变不会导致传播器改变其他变量的值域,只有在一些相关事件发生时才需要唤醒调用某些传播器:
在这里插入图片描述

5、已解决的传播器

\qquad 有时候可以判断对所有未来的值域都存在 f ( D ) = D f(D)=D f(D)=D成立,则称传播器 f f f是一个已经解决的传播器,在后续传播过程中均不需要将传播器 f f f放入队列 Q Q Q中。
\qquad 通常情况下,当 D D D所有的解均是 c c c的解,则称获得 D D D的传播器是已经解决的传播器。

6、引擎优化

\qquad 传播引擎可以通过下述方式进行优化:

  • 所有含非单元素值域的非等( ≠ \neq =)传播器都放到 F 0 F_0 F0
  • 只有当非等( ≠ \neq =)传播器中某个值域编程单元素值域时,非等( ≠ \neq =)传播器才会被调用
  • 非等( ≠ \neq =)传播器在一个值域传播器 f f f被调用之后,由于它是幂等的,所以可以将 f f f从队列 Q Q Q中永久移除
  • 一个已解决的传播器应该被永久移除:e.g., 当某个非等( ≠ \neq =)传播器被传播之后;当一个约束的所有变量的值域均包含一个值

THE END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dragon Fly

多谢老板赏钱[抱拳抱拳抱拳]

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值