带变量注释的约束与约束层次结构
在解决约束问题时,带变量注释的约束和约束层次结构是非常重要的概念。下面将详细介绍这些概念及其相关的比较器和算法。
1. 基本概念
1.1 注释集与函数
-
注释集
A是一个区间(0, 1],注释值越大越受偏好,值0不属于A,因为注释为0的变量在约束系统中不起作用。 -
函数
⊛是实数上的几何平均值。
1.2 约束层次结构的构建
约束层次结构
C = C0 ∪ C1 ∪ … ∪ Cn
是不相交集合
Ci
的并集,约束的偏好随着
i
值的增加而降低。
-
C0 = {c ∈ C | ac(c) = 1}
:这是包含必需约束的级别。
-
Ci = {c ∈ C | (∀d ∈ Cj, j < i : d <c c) ∧ (∀e ∈ Ck, i < k : c <c e)}
,其中
i > 0
。
约束的排序
≤c
定义为:
c, d ∈ C : c ≤c d ≡ ac(c) ≥ ac(d)
。
1.3 估值误差
估值
θ
的误差
E(Cθ) = [E(C1θ), …, E(Cnθ)]
,其中
E(Ciθ) = ∑{c∈Ci} acv(c) * e(cθ)
。由于
C0
级别的所有约束都必须满足,因此不考虑
E(C0θ)
。
acv(c)
可理解为约束
c
的权重。
可以使用不同的比较器来确定最优解:
- 加权和更好比较器:与经典分层 CSP 类似,最优解
θ
的误差
E(Cθ)
最小。
- 最坏情况更好比较器:
E(Ciθ) = max{c∈Ci} acv(c) * e(cθ)
。
- 最小二乘更好比较器:
E(Ciθ) = ∑{c∈Ci} acv(c) * (e(cθ))²
。
2. 带局部比较器的层次结构
2.1 标准局部比较器的问题
标准局部比较器不使用权重,仅使用约束注释
ac
对
C
进行分解是不合适的,因为会遗漏变量的所有全局信息。而仅使用全局约束注释
acv
可能会导致变量注释较小的约束比变量注释较高的约束处于更重要的级别,因为前者的
acv
值更高。
2.2 改进的排序定义
为了解决上述问题,需要结合
ac
和
acv
来构建层次结构,通过重新定义排序
≤c
:
c, d ∈ C : c ≤c d ≡ (ac(c) > ac(d)) ∨ ((ac(c) = ac(d)) ∧ (acv(c) ≥ acv(d)))
2.3 局部更好比较器
局部更好比较器的定义为:
locally - better(θ, δ, C) ≡ ∃k ∈ 1 … n 使得 (∀l ∈ 1 … k - 1 : (∀c ∈ Cl : e(cθ) = e(cδ))) ∧ (∃c ∈ Ck : e(cθ) < e(cδ)) ∧ (∀d ∈ Ck : e(dθ) ≤ e(dδ))
2.4 有序更好比较器
定义 1:如果对于某个级别
k - 1
之前的每个约束,应用
θ
后的误差等于应用
δ
后的误差,并且在级别
k
上,误差根据由函数
w : C → W
给出的集合
W
的排序
≤w
进行比较(命题
w(c) ≤w w(d)
表示
c
是比
d
更受偏好的约束),则估值
θ
比另一个估值
δ
有序更好。
ordered - better(θ, δ, C) ≡ ∃k ∈ 1 … n 使得 ∀l ∈ 1 … k - 1 ∀c ∈ Cl : e(cθ) = e(cδ) ∧ ∃c ∈ Ck : e(cθ) < e(cδ) ∧ ∀d ∈ Ck 使得 w(d) ≤w w(c) : e(dθ) ≤ e(dδ)
如果不存在比
θ
有序更好的估值
ω
,则估值
θ
是有序更好的。
可以选择平凡误差函数
e
(
e(cθ) = 0/1
表示
c
满足/不满足)或度量函数(使用变量域的度量),分别得到有序谓词更好或有序度量更好比较器。
3. 有序更好和局部更好比较器的关系
3.1 引理 1
每个层次结构
C
的有序更好解
θ
都是局部更好的。
证明:假设有序更好估值
θ
不是局部更好的,那么存在一个估值
ω
比
θ
局部更好。设
Ck
是估值
ω
和
θ
在某些约束上误差函数值不同的第一个级别。因为估值
ω
比估值
θ
局部更好,所以
∀d ∈ Ck : e(dω) ≤ e(dθ)
。但根据有序更好的定义,
∃d ∈ Ck : e(dθ) < e(dω)
,这与前面的命题矛盾。因此,不存在比
θ
局部更好的解,估值
θ
必须是局部更好的解。
3.2 存在局部更好但非有序更好的解
例如,考虑层次结构
C = C1 = {c, d}
,其中
w(c) <w w(d)
。存在解
ω
和
θ
使得
e(cω) > e(cθ)
,
e(dω) < e(dθ)
。两个解都可能是局部更好的,但只有
θ
可能是有序更好的,因为它比
ω
有序更好。
3.3 层次结构细化
定义 2:设
C = ⋃i=0n Ci
是层次结构,
w : C → W
是权重函数。层次结构细化
C/w
定义为
⋃i=0n Ci/w
,
Ci/w = ⋃j=1ni Cij
,如果
C0/w = C0
成立,并且
Cij
由公式
(∀c ∈ Ci ∀d ∈ Ci : (c ∈ Cij, d ∈ Cil, l ∈ 1 … ni, j < l) ⇔ (w(c) <w w(d)))
给出。
3.4 引理 2
对于给定的层次结构
C
、权重函数
w
和估值
θ
与
δ
,命题
ordered - better(θ, δ, C) ⇔ locally - better(θ, δ, C/w)
成立。
3.5 定理 1
估值
θ
是具有权重函数
w
的层次结构
C
的有序更好解,当且仅当
θ
是层次结构细化
C/w
的局部更好解。
通过上述定理可知,使用有序更好比较器和局部更好比较器的两种映射计算得到的解是相同的。下面的 mermaid 图展示了两种比较器的关系:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(有序更好解):::process --> B(局部更好解):::process
C(局部更好解):::process --> D(层次结构细化 C/w):::process
E(有序更好解):::process --> F(层次结构 C):::process
D --> G(与有序更好解等价):::process
F --> G
4. 解决层次结构的算法
4.1 相关定义
-
定义 3:序列
SC = ⟨c1, …, cm⟩是具有m个约束的层次结构C的层次排序,如果SC的所有约束按层次结构的级别(ci ∈ Ck,cj ∈ Cl,k < l意味着i < j)和排序≤w(对于ci, cj ∈ Ck使得w(ci) <w w(cj)意味着i < j)排序。序列⟨c1, c2, …, ci⟩记为SCi,其中i ≤ m。 -
定义 4:设
SC = ⟨c1, c2, …, cm⟩是层次结构C的层次排序。递归定义的集合S = Sm记为层次排序SC的排序解集,如果 -
S0 = {θ | θ 是 SC 的估值} -
Si = {θ | θ ∈ Si - 1 ∧ e(ciθ) = min{ω∈Si - 1} e(ciω)},其中i ∈ 1 … m
4.2 引理 3
如果对于所有
k ∈ 1 … n
,层次结构
C
中任意两个约束
d, f ∈ Ck
都有
w(d) ≠w w(f)
,那么对于每个约束
c ∈ C
和每个有序更好解
θ
,误差函数
e(cθ)
的值是唯一确定的。
4.3 定理 2
设
SC
是
C
的层次排序,集合
S
是
SC
的排序解集,则
S
是有序更好解的集合。
4.4 算法步骤
解决带变量注释的约束问题的算法基于定理 2 和 Indigo 算法,具体步骤如下:
1.
拆分约束集
:使用约束注释
ac
和排序
≤c
将带变量注释的约束集
C
拆分为约束层次结构
{C0, C1, …, Cn}
。
2.
排序约束
:使用全局约束注释
acv
对层次结构的每个级别
Ci
中的约束进行排序,得到输出约束序列
OCi
。
3.
应用 Indigo 算法
:将排序后的输入约束序列
⟨OC0, OC1, …, OCn⟩
应用于 Indigo 算法。
4.5 复杂度分析
设
m = |C|
,
k = |V|
。算法的复杂度分析如下:
|步骤|复杂度|
|----|----|
|第一步:计算约束注释|
O(mk)
|
|第一步:排序
m
个约束|
O(m log m)
|
|第二步:计算全局变量注释|
O(mk)
|
|第二步:计算全局约束注释并排序|
O(mk) + O(m log m)
|
|第三步:应用 Indigo 算法|
O(mk)
|
|总复杂度|
O(m(k + log m))
|
4.6 算法流程图
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(带变量注释的约束集 C):::process --> B(拆分约束集):::process
B --> C(约束层次结构 {C0, C1, …, Cn}):::process
C --> D(排序约束):::process
D --> E(输出约束序列 ⟨OC0, OC1, …, OCn⟩):::process
E --> F(应用 Indigo 算法):::process
F --> G(有序度量更好解):::process
综上所述,通过构建约束层次结构、使用合适的比较器和算法,可以有效地解决带变量注释的约束问题。在实际应用中,可以根据具体需求选择不同的比较器和误差函数,以获得最优解。
5. 算法的局限性与示例
5.1 算法局限性
虽然定理 2 给出了排序解集与有序更好解集合的关系,但存在一些有序更好解不能通过任何层次排序的排序解集得到。例如,考虑层次结构
C = C1 = {c1, c2}
,有如下约束条件:
B >= 10 % c1
B <= 8 % c2
其中
w(c1) = w(c2)
。对于层次排序
⟨c1, c2⟩
可得到估值
{B = 10}
,对于
⟨c2, c1⟩
可得到估值
{B = 8}
,这两个估值都是有序更好的。但实际上,估值
{B = 9}
也是有序更好的,却无法通过上述层次排序的排序解集得到。
5.2 算法实现基础
解决带变量注释的约束问题的算法基于定理 2 和 Indigo 算法。Indigo 算法通过区间算术进行局部传播,它处理无环的不等式约束集,复杂度为
O(|C| × |V|)
。其核心思想是传播变量的上下界(即区间),并从最强到最弱处理约束,逐步使用区间算术收紧变量的边界。
6. 总结与展望
6.1 总结
- 核心方法 :提出了一种使用变量注释解决过约束问题的新方法,定义了从变量注释到约束层次结构的完整映射。
- 比较器 :提出了一种新的局部比较器(有序更好比较器),并阐述了它与标准局部更好比较器之间的关系。通过使用权重进行有序更好解的选择,能够比不重新定义层次结构的局部更好比较器更精确地指定偏好。
-
算法
:基于定理 2 和 Indigo 算法,给出了解决带变量注释约束问题的具体算法,该算法分为拆分约束集、排序约束和应用 Indigo 算法三个步骤,总复杂度为
O(m(k + log m))。
6.2 未来工作方向
- 约束解释 :对带变量注释的约束进行精确解释,以便更高效地处理这些约束。需要考虑这种解释在实际问题中的性质和适用范围。
- 增量操作 :研究对约束进行增量操作的方法,即添加新约束时不需要完全重新计算先前的解。
- 注释计算 :探索所谓的“带注释的计算”,即对带注释的约束系统进行简化,并对注释进行适当转换,使得转换前后的系统解相同。
- 算法研究 :研究适用于解决带变量注释约束系统的算法,重点关注变量注释和有序更好比较器。
6.3 未来工作规划表格
| 工作方向 | 具体内容 |
|---|---|
| 约束解释 | 精确解释带变量注释的约束,考虑实际问题中的性质和适用范围 |
| 增量操作 | 研究添加新约束时无需完全重新计算先前解的方法 |
| 注释计算 | 对带注释的约束系统进行简化和注释转换,保证解相同 |
| 算法研究 | 研究适用于带变量注释约束系统的算法,聚焦变量注释和有序更好比较器 |
6.4 未来工作流程 mermaid 图
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
A(约束解释):::process --> B(评估实际应用):::process
C(增量操作):::process --> D(实现增量计算):::process
E(注释计算):::process --> F(简化与转换):::process
G(算法研究):::process --> H(设计新算法):::process
B --> I(总结成果):::process
D --> I
F --> I
H --> I
通过以上的研究和未来工作规划,有望在带变量注释的约束问题解决领域取得更深入的成果,为实际应用提供更有效的解决方案。
带变量注释约束问题的解决方法
12万+

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



