本文主要是介绍约束式编程学习笔记[0] CSP基本概念 整数示例 实数示例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- 2 Constraint satisfaction problems: examples
- 2.1 Basic concepts
- 2.2 Constraint satisfaction problems on integers
- 2.3 Constraint satisfaction problems on reals
2 Constraint satisfaction problems: examples
- Q: 列举"modeling"中可能出现的困难。
A:
For other problems the appropriate representation as a CSP is by no means straightforward and relies on a non-trivial ‘background’ theory that ensures correctness of the adopted representation.
这时需要专家知识对问题进行表述,并论证正确性。
以及
more than one natural representation exists.
此时需要适当选择表述,提高效率等。
- Q: 快速阅读章简介,说出本章行文中分类标准。
A:
the domains over which they are defined
integer, real, boolean, symbolic
之前的四类都是satisfaction问题,如果同时需要优化(最小或最大化)某个objective就是optimization问题. 后者也单独作为了本章一节。
2.1 Basic concepts
- Q: \(\langle \mathcal C; \mathcal D\mathcal E\rangle\)中的两者有什么区别和联系?
A: 先由后者限定各个变量\(y_i\)的定义域,在此基础上再由前者进一步进行约束。从更大的角度来看,限定定义域也是一种特殊的约束。
某种意义上,两者是“全集和子集族”的关系。
a constraint \(C\) on \(Y\) we mean a subset of ...
满足约束就是在子集中。
注:从这个角度可帮助理解(对于\(m\)元约束)满足约束的记号是\((d_{i_1},\cdots,d_{i_m})\in C\).
注:此处可以联系数理逻辑中论域、扩展的一阶语言、变元的类型、谓词等概念。如\(m\)元谓词对应\(m\)元约束。而\(\mathcal D\mathcal E\)可以看成指定“变元类型”,也可以看成一元谓词。
- Q: 如何理解"no syntax was assumed".
A: 在最基础的定义中,约束都是直接由子集表示的。syntax实际上可以看成辅助表示子集,提高书写效率的某些合理描述方式和人为约定。例如\(x<y\)表示集合\(\{(x,y)|x\in D_x, y\in D_y,x<y\}\).
从根本上来说,syntax在原始定义中没有涉及,且不是必须的、本质的。
- Q: 简要阐释"define constraints and CSPs to the sequences".
A: 定义约束时都是有序的,不是无序的set,这在实际求解中带来好处。(必要性)
这么做是可行的。举例:通过移项,引入辅助变量等手段。(可行性)
2.2 Constraint satisfaction problems on integers
- Q: \(SEND+MORE=MONEY\)问题中,如果各个domain都是自然数集,那么需要哪些约束来描述这个问题?
A: \(S,M\)是\([1,9]\)间整数,而其余字母都是\([0,9]\)间整数(注:从这可以看出2.1题0.的思想),且各个字母互不相同(注:这可以称为一条alldifferent
约束)。且:
\(1000S+100E+10N+D+1000M+100O+10R+E=10000M+1000O+100N+10E+Y\).
注:也可以考虑“进位”,即\(D+E=10C_1+Y,N+R+C_1=10C_2+E\)等等。其中\(C_i\in\{0,1\}\).
- Q: 如何理解\(x-y\le 10-11z_{x,y}\)中的数字\(10,11\)?
A: 对于\(x-y\)有界的情况,想表达\(x\ne y\)(也就是\(x<y\vee x>y\))可以引入取值为\(\{0,1\}\)的辅助变量\(z_{x,y}\).
对于\(x-y\le 10-11z_{x,y}\),当\(z_{x,y}\)取1时变为\(x<y\),否则相当于没有额外约束(因为已知有界)。
另一条也类似。
可以看出,这里\(x-y\le m-(m+1)z_{x,y},y-x\le (m+1)z_{x,y}-1\)中的\(m\)理论上可以取任何大于等于10的整数。不过10可以限制得最严格,具有某种意义上“最佳”性。
- Q: 八皇后问题中直观中有16个所谓“自由度”,为什么可以用8个变量表示?
A: 因为已知每列有且仅有一个皇后,因此可以用8个变量表示8个皇后依次所在的行。
然而,这不能拓展到“8x8棋盘放7个皇后”等问题。实际上,从这里就折射出普遍和特殊的思想。特殊的representation可以提高效率,但其难以泛化。
- Q: \(x_i-x_j\ne i-j\)中依次出现字母\(i,j,i,j\),这是否和2.1题2.矛盾?
A: 不矛盾。\(i,j\)并不是变量,\(x_i,x_j\)才是。这样一来每条约束都是依次出现\((x_i,x_j)\)两个变量。
- Q: The Zebra Puzzle中,如果给5栋房子指定数字1到5,那么3号房主人是
violinist
怎么表达?如果指定数字1到5对应的characteristic不是房子的序号而是饮料种类(比如water
指定为2,等等. 而非原来的“最左边房子指定为1,它右边的指定为2”,等等),该representation与前面相比有何异同之处?
A: violinist=3
在新的representation中,(不含有加减号的)等式的意义仍然类似。比如如果我们指定water
对应2,那么violinist=2
就表示小提琴家喝水,而mid=green
的含义是“中间的房子是绿色的”
然而,这样一来从左到右的5栋房子用5个变量表示,例如left, midleft, mid, midright, right
,他们之间的度量和序结构消失了,这使得"to the right", "next to"等不方便表达。这实际上相当于该问题不再是on integers,而是on symbols.
2.3 Constraint satisfaction problems on reals
- Q: spreadsheet的例子让你有什么有关于编程“模式”(如约束式、命令式)的感想?
A: 例:在一些特殊条件下(一般是非常简单的case)命令式程序可以很容易地与约束式程序相互转化。此处的例子中可以用命令式程序依次求解出\(D4,D5,E7,E8\).
但是比如说已知其它求\(B5\),那就不能直接地把约束式转化成命令式。而公式中若出现条件判断,带条件判断的循环等,就反过来比较难把命令式转化成约束式。
- Q: 对于找多项式零点的问题,我们把原始CSP转化成什么,作为所谓“解”,来规避什么问题?
A: 转化成等价的数个interval CSPs即
\(\langle f(x)=0;x\in[l,r]\rangle\),其中\(x\in\mathbb R;l,r\in F\).
\(F\)是计算机可表示的浮点数集,特别地,包括\(\pm \infty\).
当\(r-l\)足够小,我们可以认为近似找到了解。
规避问题:计算机能表示的实数是有限的,且方程未必有根式解。
注:容易理解的是,如果理想中的一台计算机能表示无限个(所有的)实数,那么就肯定不需要interval CSPs. 另一方面,如果确保方程有根式解,那么其实也可以尝试用计算机精确表示解。虽然仍然只能表示有限个数,但是只要合理地设定一个足够大的集合,那么也是有可能在实际应用中足够的。因此这两个问题综合起来才是我们需要interval CSPs的原因。
这篇关于约束式编程学习笔记[0] CSP基本概念 整数示例 实数示例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!