约束式编程学习笔记[9] 涉及数的不完全求解器

6 Some incomplete constraint solvers

6.4 Linear constraints on integer intervals

  1. Q: 本节中的linear expression为什么不需要乘法运算?
    A: 由于只考察整数和“整数倍”,故用不断复合加法表示乘法。

6.4.1 - 6.4.2

  1. Q: “By combining the corresponding domain reduction rules for these two inequality constraints we obtain a domain reduction rule for an equality constraint.”是否形如 [ a . . b ] ∩ [ b . . c ] = { b } [a..b]\cap [b..c]=\{b\} [a..b][b..c]={ b}
    A: 不对。提示: ≥ , ≤ \ge,\le ,两条中,一个对正系数对应变量取上界,对负系数对应变量取下界;另一个反之。所以两个区间有长度非零的重合区间。
  2. Q: 这两节中,唯一一处出现除法但没有取整运算的规则是什么?提示:等号,一个变量。
    A: a x = b ax=b ax=b时,可以直接看 b / a b/a b/a是否在定义域中,从而直接给出 x x x取值或者得到fail.

6.4.3 - 6.4.6

  1. Q: 如何处理严格不等式?
    A: s < t s< t s<t等价于 s ≤ t , s ≠ t s\le t, s\ne t st,s=t.
  2. Q: “an arbitrary element can be removed from a domain, not only the ‘boundary’ one”描述的是什么?
    A: finite domains相比intervals所具有的优势:在处理 x ≠ a x\ne a x=a时,可以直接从 D x D_x Dx中删去一个元素。(无论是否在边界)
  3. Q: 处理SEND+MORE=MONEY时, [ 2..8 ] [2..8] [2..8]从何而来?
    A: 显然 M = 1 , S = 9 , O = 0 M=1,S=9,O=0 M=1,S=9,O=0,此时可以直接排除掉位于 [ 0..9 ] [0..9] [0..9]边界的三个数。
  4. Q: 接上,直观上看,为什么 E , N E,N E,N被剪得多, D , R , Y D,R,Y D,R,Y被剪得少?
    A: 提示: E , N E,N E,N分别是等式左右两边系数最大的未确定数值的变量。“没人帮它们顶着”。
  5. Q: 解说“The other eighteen simple disequality constraints are solved.”
    A: 原本 C 8 2 = 28 C_8^2=28 C82=28,确定三个数 S , M , O S,M,O S,M,O,且它们恰好取的都是靠边的值,所以可以直接在另外五个变量的定义域中删去 0 , 1 , 9 0,1,9 0,1,9,于是现在只需要 C 5 2 C_5^2 C52个disequality. 其余18条已经多余,所以可以删除了。

6.4.7 - 6.4.8

  1. Q: LINEAR EQUALITY等规则没有考虑涉及“整除性”的东西,所以得到的显然比hyper arc consistency弱。那么本节加强的interval consistent和bound consistent哪个考察了整除性从而更强呢?
    A: 对整数CSP的interval consistent.
    注意:根据定义,整数CSP的bound consistent是某实数CSP的interval consistent.
  2. Q: 凸性和hyper-arc consistent有何联系?
    A: 对于实数CSP,由于解集是凸集,故仅通过控制上下界即可到达hyper-arc consistent(相比之下,整数CSP有整除问题所以麻烦得多)
    (注:对于等式和不等式,都可以通过控制上下界到达实数CSP的hyper-arc consistent)

6.5 Arithmetic constraints on integer intervals

6.5.1 - 6.5.3

  1. Q: 简要描述在涉及一般的Arithmetic constraints时剪定义域的一些典型困难。
    A: (合理即可)
    没有显式表示(根式解)导致 x ≤ f ( x , y , z ) x\le f(x,y,z) xf(x,y,z),右侧不能去除 x x x. 从而导致难剪( x x x本来定义域就很大的话, f ( ⋅ ) f(\cdot) f()值域还是很大)
    涉及0以及和0相关的分类讨论。(偶数次幂)
    涉及分母相关的分类讨论。(如 x y ≤ z xy\le z xyz
    表达式范围太大导致剪不了。
  2. Q: 引入辅助变量为什么有助于剪定义域?提示:新增分类标准。
    A: 除了对original variables定义域二分,还可以对辅助变量定义域二分。(多了一些分类标准,使得分类不一定只能“正交”着进行)
  3. Q: 解说“To estimate the right-hand side we now need a double case analysis on x and z. This leads to nine cases”
    A: 分别考虑0与定义域关系,3*3=9(凡是偶数次幂显然都要作此讨论)
  4. Q: 多项式中无非就是加法和乘法,所以可以把一般的约束变成线性约束或者()。为了解决复杂的分类讨论,为什么按此方法引入许多辅助变量会有帮助?
    A: x y = z xy=z xy=z(思考:此处为什么没有必要引入一般的6种运算符?)
    提示:拆成许多子过程,每个子过程分类都不是很多(比如为定值2),总的(能表达的)类数与子过程的个数就成指数关系(例如 2 n 2^n 2n)。
  5. Q: 解说“The problem of an appropriate characterisation of the MULTIPLICATION rules remains then open.”
    A: 现在由于对非凸集(如区间相除结果)取了凸包,所以这方法现在也不行了。
    这个问题是arithmetic特有的。因为linear处不涉及对非凸集合取凸包。

6.5.4 - 6.5.5

  1. Q: 说明implementation时区间除法需要的特别处理。
    A: 由于涉及0,故需要进行许多分类讨论。
    即使确认不涉及0,由于可能得到非整数(以及整除问题),故最终也不妨进一步(分别从小到大和从大到小)枚举讨论确定更精准的剪枝结果。
  2. Q: 引入更多变量()(填“升高”或“降低”,下同)耦合程度,从而()了剪定义域能力,比如 x 3 ≤ 1000 , x ∈ [ 1..1000 ] x^3\le 1000, x\in [1..1000] x31000,x[1..1000].
    把区间改成一般的有限集()了语言的表达能力,()了剪定义域能力,但()了分类讨论难度,()了效率。
    A: 降低,降低,升高,升高,升高,降低。

6.6 Arithmetic constraints on reals

6.6.1 - 6.6.3

  1. Q: 实数相比整数多了开闭区间的问题。为什么要引入 ⟨ ⟩ \langle \rangle 记号?
    A: 便于处理关于无穷的问题(涉及无穷时始终挖去,但有限时始终表示含端点值)
    注:为什么不直接全部用开区间表示?因为此时不便于表示单元素集。
  2. Q: 由于实数区间相比整数区间来说多了凸性,所以实数区间四则运算造成非凸的可能性只有()。
    A: 除数区间包含0
    注:当然,还有可能“挖掉边界的0”,这不影响凸性,但影响开闭。我们定义 i n t ( ⋅ ) int(\cdot) int()运算结果是凸包的闭包。
  3. Q: 相比整数情况,实数情况可以使用()这类区间,因此容易将()转化为等式和 ≠ \ne =.
    A: ⟨ − ∞ , 0 ⟩ \langle -\infty,0\rangle ,0 > , < , ≥ , ≤ >,<,\ge,\le >,<,,
  4. Q: 由于非凸性仍存在,所以()consistency和整数情况类似进行论证,也不适用于实数。
    A: interval
  5. Q: 添加 + ∞ , − ∞ +\infty,-\infty +,的实数集的算术运算中,无定义的情况分为()和()两种。为什么不认为 1 / 0 = + ∞ 1/0=+\infty 1/0=+
    A: 不定式(四则运算都有不定式),除以0
    0没有分正0和负0(计算机浮点数表示中其实有,但此处我们理论中没有区分)
  6. Q: 解说“The appropriate result for the multiplication operation requires only the categories P, M, N and Z of Table 6.4.”的“only”.
    A: 提示:乘法比加减法需要分类讨论得更多,除法比乘法需要得又更多。所以形成了分类的树结构,乘法不需要全部叶子。

6.6.4 - 6.6.5

  1. Q: 如何处理浮点数带来的问题?
    A: 使用outward rounding:对于非浮点数区间,取包含它的最小的浮点数区间。其具体实现细节不在本书范围。
  2. Q: 6.6.5中哪些问题是实数相比整数特有的?
    A:
    Interval Division中涉及0的问题与整数相同。
    Additional Interval Operations涉及的问题和整数相同(整数情况也有可能特别解释 x 2 x^2 x2提高效率等)
    Convergence中, x − y = 1 , y − x = 1 x-y=1,y-x=1 xy=1,yx=1带来的问题并不是实数相比整数本质地特有的。它只是因为我们在整数处没有考虑 [ − ∞ . . n ] [-\infty..n] [..n]这种区间。
    x − y = 0 , x − 2 y = 0 x-y=0,x-2y=0 xy=0,x2y=0这种是特有的。
    Choice of atomic constraints的问题与整数相同:太少的atomic种类导致效率下降,不能显式表达的atomic不能导出好用的规则,等等。
    Choice of transformations into atomic constraints中dependency problem类似于之前涉及 x 2 x^2 x2的问题,是共有的。
    Choice of the function representation是共有的。

6.7 Arithmetic equations over reals

  1. Q: 如何理解“In contrast to the other incomplete constraint solvers discussed in this chapter, the one discussed here is not based on the domain reduction rules but rather on the transformation rules.”
    A: 本节讲的求解器(或说化简算法)相比之前的,出发点不同。之前的基于剪定义域,而这里的基于代入法。它们都从某个角度上能一定程度化简问题,但不足以解决问题。

猜你喜欢

转载自blog.csdn.net/tritone/article/details/121173942