文章目录
3 Constraint programming in a nutshell
3.3 Example: Boolean constraints
- Q: 在
x
∈
{
0
,
1
}
x
∈
{
0
}
∣
x
∈
{
1
}
\frac{x\in\{0,1\}}{x\in\{0\}|x\in\{1\}}
x∈{0}∣x∈{1}x∈{0,1}中,如何理解“As already noted there this rule is parametrized by a variable, the choice of which is of relevance here, and by a value, the choice of which is of no relevance here. We use this rule in combination with the heuristic…”?
A: 选取0还是选取1是对称的,但选取哪个 x x x可能在实际执行中对效率产生决定性影响。根据经验,我们采用一定的启发式方法,即选择出现在最多约束中的变量。其实这和人类在进行分类讨论时的选择十分一致。 - Q: 形式上的表达式
x
∧
y
=
z
,
z
=
1
→
x
=
1
,
y
=
1
x\wedge y = z,z=1\to x=1,y=1
x∧y=z,z=1→x=1,y=1就告诉我们
⟨
x
∧
y
=
z
;
x
∈
D
x
,
y
∈
D
y
,
z
∈
{
1
}
⟩
⟨
;
x
∈
{
1
}
,
y
∈
{
1
}
,
z
∈
{
1
}
⟩
\frac{\langle x\wedge y = z;x\in D_x,y\in D_y, z\in\{1\}\rangle}{\langle ;x\in\{1\},y\in \{1\},z\in\{1\}\rangle}
⟨;x∈{1},y∈{1},z∈{1}⟩⟨x∧y=z;x∈Dx,y∈Dy,z∈{1}⟩嘛?
A: 否,因为 D x = { 0 } D_x=\{0\} Dx={0}时,上述规则将导致错误结果。(回忆我们传播约束的目的:除了找解,还有可能直接排除一些情况,直接得出一些 ⊥ \perp ⊥. 此处的传播在 D x = { 0 } D_x=\{0\} Dx={0}时就能直接产生inconsistency,排除!) - Q: 作为人类专家,你怎么得到“six rules for the constraint
x
∧
y
=
z
x\wedge y=z
x∧y=z”呢?
A: 相当于手动搜索出决策树。
例如:
如果 z = 1 z=1 z=1,则直接 x = 1 , y = 1 x=1,y=1 x=1,y=1.
否则讨论,若 x = 1 x=1 x=1,则 y = 0 y=0 y=0.
否则讨论,若 y = 1 y=1 y=1,则 x = 0 x=0 x=0.
否则,该条约束无价值。
当然,实际设计“树”时可以利用各类技术,设法减少节点个数,使得树更平衡,等等,以提升性能。
3.4 Example: polynomial constraints on integer intervals
- Q: 用一句话概括预处理时,书中两条transformation rule.
A: 把复杂度高的公式拆成数个复杂度低的公式并对每个子公式换新变量名。 - Q: 举例说明“整数区间的四则运算”(interval arithmetic)不一定得到整数区间。
A: 比如区间乘区间显然得不到质数(233)
再比如区间除以一个数没问题,但除以一个有 n n n个整数的区间有可能得到 n n n部分分立的结果。 - Q: 如何理解
i
n
t
(
[
−
3..5
]
/
[
−
1..2
]
)
=
Z
int([-3..5]/[-1..2])=\mathcal Z
int([−3..5]/[−1..2])=Z?
A: 首先 i n t ( ⋅ ) int(\cdot) int(⋅)含义类似于“凸包”,即是区间且包含一切可能结果(当然在结果是 Z \mathcal Z Z时输出就是 Z \mathcal Z Z),其次注意根据interval arithmetic定义,0除以0得到一切数。 - Q: 如何理解启发式规则"choose the variable with the smallest interval domain."?
A: 直观上,尽快分割直至某个变量取值固定为一个值,方便讨论。 - Q: 为什么书中定义的heuristic function
h
(
P
)
:
=
m
a
x
(
o
b
j
+
(
D
1
,
⋯
,
D
n
)
)
h(\mathcal P):=max(obj^+(D_1,\cdots,D_n))
h(P):=max(obj+(D1,⋯,Dn))是合理的?
A: 提示:因为 o b j + obj^+ obj+保持集合的包含关系(书中称为monotonic),则容易验证满足heuristic function定义中涉及overestimate的相关性质。
4 Some complete constraint solvers
- Q: 解释"As such a repeated case analysis results in general in an exponential running time, we do not allow it to be a part of the constraint solvers."
A: 对于incomplete constraint solvers,化简出的CSP可能需要指数复杂度的分类讨论才能解决。我们不把这些暴力运算看作求解器的一部分。
4.1 A proof theoretical framework
- Q: 如何理解equivalence preserving和consistency preserving的关系?
A: consistency preserving表示关于空序列为equivalence preserving.
具体地:回忆投影的定义,则对空序列投影为空元组。
回忆equivalent w.r.t. X X X的定义,知道两个问题关于空序列等价相当于同时有解或同时无解。(如果同时有解则两个投影集合都是空元组构成的单元素集,否则是空集)
所以
consistency preserving is a weaker property than equivalence preserving.
更一般地,对于某个序列满足equivalence preserving则对于其子序列也满足。
- Q: 举一例说明delete from the conclusion all solved constraints.
A: 例如 x = y ; x ∈ { 0 , 1 } , y ∈ { 1 , 2 } x=y;x\in \{0,1\},y\in\{1,2\} x=y;x∈{0,1},y∈{1,2},则推导出 x = y ; x = 1 , y = 1 x=y;x=1,y=1 x=y;x=1,y=1,则此时约束 x = y x=y x=y相比 x = 1 , y = 1 x=1,y=1 x=1,y=1的定义域没有做任何进一步约束,根据定义 x = y x=y x=y is solved. 所以在导出的结果中删去此约束,得到 x = 1 , y = 1 x=1,y=1 x=1,y=1. - Q: 对于Domain reduction和transformation,分别从fail,
D
E
\mathcal D\mathcal E
DE的变化角度作比较。
A: 关于fail: Domain reduction的fail是定义域变为空,而transformation的fail是生成了 ⊥ \perp ⊥.
关于 D E \mathcal D\mathcal E DE: Domain reduction是变量不变,但每个变量各自定义域 D i D_i Di可能改变。transformation(可能)在已有的基础上增加新的变量并指定其定义域。即" D E ′ \mathcal D\mathcal E' DE′ extends D E \mathcal D\mathcal E DE". - Q: 简要阐释"rename, replace, restrict".
A: transform过程中可能引入新变量,为了防止重名引起混乱可能需要换名再应用规则。
提示:一定程度上,类比多重积分代入时的换名。都是为了防止重名引起混乱。
例如 x = ∫ 0 1 f ( z ) d z , f ( z ) = ∫ 0 1 x d x x=\int_0^1 f(z)dz,f(z)=\int_0^1 xdx x=∫01f(z)dz,f(z)=∫01xdx,则代入时变成了 x = ∫ 0 1 ∫ 0 1 t d t d z x=\int_0^1 \int_0^1 tdt dz x=∫01∫01tdtdz. - Q: 一条理论上正确的规则,可能因为什么原因我们不采用它?
A: 举例:对实际问题解决没有帮助或帮助不大(效率低)。
证明不出其正确(可靠)。
在执行过程中难以具体判断现有CSP是否在该规则下closed.(难以判断规则是否可用)
可能生成无限的derivation序列(“不停机”)或者生成的序列太长。 - Q: successful, failed, stabilising三者一定是互斥的吗?
A: 否。提示:stabilising只是说无法继续应用规则了,这时候可能是既不成功也不失败(一般人的理解),但实际上也有可能恰好成功(失败)。
注:successful一定stabilising(因为约束被solved之后就被去除,successful一定是所有约束都被去除了,自然不可能再应用任何规则). 而failed时不一定stabilising.
思考:和图灵机的计算结果对比理解。 - Q: In fact, many constraint solvers yield CSPs that are neither solved nor failed: their aim is ()
A:
to bring the initial CSP to some specific, simpler form that usually satisfies some specific local consistency notion.
4.2 Term equations
- Q: 为什么本节引入符号
≡
\equiv
≡?
A: 因为普通的等号被Definition 4.11用作了形式记号,表示term equation. ≡ \equiv ≡才表示“真正的相同”。这样避免混淆。 - Q: 如何理解"simultaneously replaced"?
A: 不可以先代换某个变量,再代换另一个变量。比如把 x x x变成 f ( y ) f(y) f(y)再把 f ( y ) f(y) f(y)变成 f ( g ( z ) ) f(g(z)) f(g(z))是不允许的。 - Q: 如何理解"instance"“more general than”?如何直观理解
x
/
y
x/y
x/y一定不会more general than
y
/
a
y/a
y/a或
ϵ
\epsilon
ϵ?
A: 直观上,认为替换之前带有变元 x i x_i xi的项是更"general"的,替换后把 x i x_i xi具体指定为某个项的结果是具体的"instance".
注:然而实际上, x i θ x_i\theta xiθ中变元个数未必比 x i x_i xi少。所以这里只是作名称上的理解而已。
第二问提示:当 x / y x/y x/y后,原来有的 y y y和新生成的 y y y不可区分了。 - Q: mgu为什么存在唯一?
A: 注:前提是unifiable.
存在性:通过对substitution的某种“复杂度”归纳,可以证明如果unifiable,那就一定存在某个不可再泛化的unifier.
唯一性:首先注意这里的唯一性是说多个mgu间只能通过一些平凡的换名互相转换。
具体的唯一性说明贯穿本节后面所有过程。即按照本节后面描述的算法可以得到solved form,且solved form和原始问题的mgu相同,且solved form的mgu是strong mgu故根据strong mgu的性质此处唯一显然。 - Q:
x
x
x和
f
(
x
)
f(x)
f(x)不能被unify. 那么非solved form的公式集一定不能被unify嘛?
A: 不一定。例如 x = f ( a ) , y = f ( x ) x=f(a),y=f(x) x=f(a),y=f(x),则只需 { x / f ( a ) , y / f ( f ( a ) ) } \{x/f(a),y/f(f(a))\} {x/f(a),y/f(f(a))}即可。注意此处 x x x除了在 x = f ( a ) x=f(a) x=f(a)出现,还在其它地方出现,故不是solved form.
solving of CSPs
- Q: 把equation
s
=
t
s=t
s=t表示成CSP时,
C
,
D
E
\mathcal C,\mathcal D\mathcal E
C,DE分别是什么?具体写出对于
x
=
f
(
y
)
x=f(y)
x=f(y),
C
\mathcal C
C是什么。
A: 假设 s , t s,t s,t中共出现 n n n个变元,所有可能的项构成集合 T \mathcal T T,则 D i = T , ∀ i ∈ [ 1.. n ] D_i=\mathcal T,\forall i\in [1..n] Di=T,∀i∈[1..n].
约束是 T n \mathcal T^n Tn的一个子集,即 { ( x 1 η , ⋯ , x n η ) ∣ η 是 s 和 t 的 u n i f i e r } \{(x_1\eta,\cdots,x_n\eta)|\eta是s和t的unifier\} {(x1η,⋯,xnη)∣η是s和t的unifier}
直接看出 x x x的替换结果最外层是 f f f. 设 x x x被替换为 f ( t ) f(t) f(t),则 y y y必然被替换为 t t t. 因此 C \mathcal C C就是 { ( f ( t ) , t ) ∣ t 是 项 } \{(f(t),t)|t是项\} {(f(t),t)∣t是项}. - Q: 尝试直观概括和记忆UNIF.
A: 提示:最外层如果是函项,则看最外层的函项是否一致。不断拆,直到至少一侧为裸露变元 x x x,不妨设为左侧。现在就看右侧有没有函项符,含不含 x x x.
注:其实UNIF规则完全可以写成命令式的算法,便于理解和记忆。 - Q:
θ
\theta
θ is a unifier of
x
=
t
x=t
x=t and
θ
\theta
θ is a unifier of
E
E
E
为什么等价于
θ \theta θ is a unifier of x = t x=t x=t and { x / t } θ \{x/t\}\theta {x/t}θ is a unifier of E E E?
A: 考察单元素集 E 1 : = { x = t } E_1:=\{x=t\} E1:={x=t}, V a r ( t ) Var(t) Var(t)中没有 x x x.
回忆之前引理: { x / t } \{x/t\} {x/t}对于 E 1 E_1 E1是strong mgu. 即 { x / t } γ = γ \{x/t\}\gamma=\gamma {x/t}γ=γ,其中 γ \gamma γ是任意 x x x和 t t t的unifier.
(回忆证明:对 x x x有 x { x / t } γ = t γ = x γ x\{x/t\}\gamma=t\gamma=x\gamma x{x/t}γ=tγ=xγ. 而对于其它变元 y y y,有 y { x / t } = y y\{x/t\}=y y{x/t}=y) - Q: 朴素的UNIF如果顺利停止(closed),那么一定()。原因是根据closed的定义,可以确认停止时的公式集合
F
F
F如果不失败,则一定具有()形式,从而停止时的公式集合
F
F
F确定了()。再根据证明过的:每条规则都(),就得到()。
A: (一空一换行)得到正确结果(即失败时得到正确的fail输出,或成功时得到正确的mgu输出)
solved(具体地,首先根据UNIF其中的3条规则得到左侧是裸露的变元,其次根据2条得到每个右侧不含左侧变元,且最后根据1条得到每个左侧变元只出现一次。一共用完了所有6条规则的closed标准!)
( F F F的strong) mgu
equivalence preserving
得到的mgu也是原公式集 E E E的unifier,且也是原公式集 E E E的mgu(注:equivalence preserving说明规则保持unifier,但并不直接说明规则保持mgu. 但后者倒不难证明)
举例证明的一个部分:如果 θ \theta θ是 { x = t } ∪ E \{x=t\}\cup E {x=t}∪E的mgu,则 { x / t } θ = θ \{x/t\}\theta=\theta {x/t}θ=θ也是 { x = t } ∪ E \{x=t\}\cup E {x=t}∪E的mgu(回忆2.中提到的引理)
则任意 { x = t } ∪ E \{x=t\}\cup E {x=t}∪E的unifier γ \gamma γ有 { x / t } θ η = γ \{x/t\}\theta\eta=\gamma {x/t}θη=γ
则任意 { x = t } ∪ E { x / t } \{x=t\}\cup E\{x/t\} {x=t}∪E{x/t}的unifier γ ′ \gamma' γ′有 { x / t } γ ′ \{x/t\}\gamma' {x/t}γ′是 { x = t } ∪ E \{x=t\}\cup E {x=t}∪E的unifier,则 { x / t } γ ′ = { x / t } θ η \{x/t\}\gamma'=\{x/t\}\theta\eta {x/t}γ′={x/t}θη,这说明 γ ′ \gamma' γ′和 θ η \theta\eta θη对于 x x x之外的变量结果相同。
再考虑 x γ ′ = t γ ′ = t θ η = x θ η x\gamma'=t\gamma'=t\theta\eta=x\theta\eta xγ′=tγ′=tθη=xθη,这就说明了 γ ′ = θ η \gamma'=\theta\eta γ′=θη,即 θ \theta θ也是 { x = t } ∪ E { x / t } \{x=t\}\cup E\{x/t\} {x=t}∪E{x/t}的mgu.
The Martelli–Montanari algorithm
- Q: 朴素的UNIF会造成发散的解决方法是什么?用一句话概括。
A: 让所有的“代入”(SUBSTITUTION)规则都应用到“全局”。 - Q: 证明终止的常见做法是考察程序运行过程中某变量的单调性。但是此处,equation个数不单调,因为()。而()也不单调,因为SUBSTITUTION. 那么应该考虑什么变量的单调性呢?
A: DECOMPOSITION规则,公式复杂度之和
考虑按字典序(lexicographic)的三元组 ( u n s ( E ) , l f u n ( E ) , c a r d ( E ) ) (uns(E),lfun(E),card(E)) (uns(E),lfun(E),card(E)),其中
uns(E): the number of variables in E that are unsolved,
lfun(E): the total number of occurrences of function symbols on the left-hand side of an equation in E,
card(E): the number of equations in E.
注:
l
f
u
n
(
E
)
lfun(E)
lfun(E)中需要考虑嵌套的函项符。
注意这里其实对应着命令式程序中循环的结构。比如写一个命令式程序找mgu,你可以最外层循环是SUBSTITUTION(1条),中间一层循环是剥除函项符的规则和左右调换的规则(2条),最内层循环是删除(1条)。(任何地方出现失败就break循环(2条))(用完了6条规则)
- Q: 如何理解“In the terminology adopted at the beginning of this chapter it means that this algorithm is a complete constraint solver.”?
A: 此算法可以将CSP化简成可以直接生成所有解的简单形式(solved form)。 - Q: 如何理解“ the number of rule applications used in an execution of the Martelli– Montanari algorithm is not the right measure of the time complexity of this algorithm.”,这对tackle该算法的inefficiency有何启发?
A: 因为项的表示是字符串,且容易看到 n n n次规则应用可能得到 2 n 2^n 2n长度(指数长度)字符串,处理这些字符串耗时很多。
但这个复杂度“不本质”。实际上,设法对项做一些内部表示,不要verbatim抄字符串就可以解决这样的问题。
本文深入探讨了约束编程中的布尔约束和多项式约束实例,讲解了如何处理约束满足问题(CSP)并引入了Martelli-Montanari算法。文章指出,约束求解可能涉及指数级的运行时间,因此强调了启发式规则的重要性,如选择变量的策略,以优化求解过程。此外,还介绍了完全约束求解器的概念,并分析了它们在解决CSP时的效率和终止性证明。

6110

被折叠的 条评论
为什么被折叠?



