1. CSPs 问题 (Constraint satisfaction problems

1.1 约束满足问题定义

相关概念

  • 标准搜索问题: 状态是一个黑盒,通过后续函数,启发式函数和目标测试来访问。
  • CSP:

    • 状态由多个变量Xi定义,变量Xi的值域为Di
    • 目标测试是由约束集来确定,约束指定变量子集允许的赋值组合。
  • CSP形式化:

    • 有限变量集:{X1, X2, …, Xn}
    • 有限约束集:{C1, C2, …, Cm}
    • 每个变量有非空可能值域:Dx1, Dx2, … Dxn
    • 每个约束Ci的值可以用变量来表示:例如X1 ≠ X2
  • 一个状态被定义为所有变量的赋值

一个相容的赋值:所有赋值均满足所有约束

例子: 地图着色问题

  • 变量: WA, NT, Q, NSW, V, SA, T
  • 域: Di = {red,green,blue}
  • 约束:相邻区域不能着相同的颜色
  • 解是完整而且符合约束的赋值,

如: WA = red, NT = green, Q = red, NSW = green, V = red, SA = blue, T = green

  • 一些CSP问题要求一个目标函数的最佳解。

  • 约束图:

  • 二元CSP:每个约束都关联两个变量
  • 约束图:结点表示变量,边表示约束
  • CSP的特点(优势)
    • 呈现出标准的模式
    • 通用的目标和后继函数
    • 通用的启发函数(无域的特别技术)

CSP的变量类型

  • 离散变量
    • 有限域:
      • n 个变量, 域大小为d  O(dn)
    • 无限域:
      • 作业调度,变量是工序的起始和结束日期
      • 约束:StartJob1 + 5 ≤ StartJob3
  • 连续变量
    • 哈勃太空望远镜观测的起始和结束时间

变量约束类型

  • 一元约束只涉及到一个变量
    • e.g., SA ≠ green
  • 二元约束涉及到两个变量
    • e.g., SA ≠ WA
  • 高阶约束涉及到3个以个的变量
    • e.g.,密码算术约束
  • 偏好约束
    • e.g., 用一个代价值代表红色比绿色好

      例子:密码算术

      /?
      image.png

真实世界CSPs

  • 分配问题
  • 排课问题
  • 运输调度
  • 生产调度

    1.2 约束满足问题放入标准搜索

    CSP的特点(优势)

  • 呈现出标准的模式

  • 通用的目标和后继函数
  • 通用的启发函数(无域的特别技术)

状态用已经给变量赋的值来表示

  • 初始状态: 空{ }
  • 后续函数:给一个没有赋值的变量赋值,此值与已经赋的值不能与约束冲突。
  • 目标测试:当前赋值是完整赋值,即所有变量都有值。

标准搜索形式化CSP(增量形式化)

  • 有n个变量的问题,解都在深度为n 的层 → 可以使用深度优先搜索
  • 在深度为l 时,分支数b = (n - l )d ,所以搜索树有n! ·dn 个叶子结点

image.png

1.3 回溯搜索算法求解CSP

  • 变量赋值是可交换的, i.e.,

[ WA = red then NT = green ] 等同于[ NT = green then WA = red ]

  • 每个结点只需要考虑给一个变量赋值 → b = d 所以dn片叶子
  • 采用单变量赋值的深度优先搜索称为回溯搜索

通用方法就能巨大提高效率:

  • 下一步应该给哪个变量赋值?
  • 应该以一种什么顺序来试着给变量赋值?
  • 能不能早些检测到不可避免的失败?

如何较早探测到不可避免的失败,并且避免它
image.png

回溯改进——最大受限变量

  • 最大受限变量( most constrained variables):具有最少合法赋值的变量
  • 也称为最少剩余值启发式(minimum remaining values ,MRV)
  • 当多个变量的MRV 值相同时, 采用最大约束准则Most constraining variable)从中选择
  • 选择约束其他未赋值变量最多的变量

    回溯改进——最少约束值

  • 选择好了变量后,选择一个最少约束值来尝试赋值

  • 即选择一个对其他未赋值变量的合法赋值影响最少的值

    前向检查

  • 我们如何较早探测到不可避免的失败?——并且在后面避免它。

  • 向前检查的思想:只保留未赋值的变量的合法值。
  • 当任何变量出现没有合法可赋值的情况终止搜索。
  • 跟踪未赋值变量的合法赋值,当发现有变量没有合法赋值时就停止搜索

Example: 4-Queens Problem

约束传播

  • 前向检查把已经赋值变量的信息传播给未赋值变量,但不能提早检测到所有失败。
  • NT 和SA 不能同时为蓝色

向前检验不能检测出该类矛盾,因为它看得不够远。
约束传播是将一个变量的约束内容传播到其它变量上的方法。
……

弧相容(Arc consistency)

  • 弧相容原则能比前向检查更早检测到失败
  • 可以在变量赋值前或后进行弧相容检查

    • 重复执行直到没有不相容存在
      弧相容算法AC-3
      image.png
      K-相容算法AC-3
  • 弧相容依然不能探测出所有的不相容

  • 一种K-相容的概念可以定义更强的约束传播方式
  • 如果对于任何k-1个变量的相容赋值,第k个变量总能被赋予一个和前k-1个变量相容的值,那么这个csp就是一个k相容的。
    • 例如:

1-相容是指每个单独的变量,自己是不矛盾的,也称为节点相容。
2-相容就是弧相容。
3-相容是指任何一对相邻的变量总可以扩展到第三个邻居变量,也称为路径相容。
K-相容的只有当它是K-相容,也是(K-1)-相容,(K-2)-相容,…,直到1-相容

  • 弧相容算法AC-3时间复杂度: O(n2d3)
  • 对这样的K-相容是理想化的(完美的)。因为,一个解可以在4.3 CSPs问题 和 联机搜索 - 图5内找到,而不是4.3 CSPs问题 和 联机搜索 - 图6
  • 但在最坏的情况下建立任何一个n-相容算法需要花费n的指数级时间。

进一步的改进: 检查特别的约束(以下2种代表)

  • Alldif(…)约束:在要求涉及的全部变元都必须取不同的值时
    • 如果约束涉及m个变元,它们共有n个不同的取值,如果有m>n,那么这个约束不可满足,要及早停止。
    • 算法思想:

首先,删除约束中只有一个取值的变元;然后,将这个值也从值域中删除;
循环执行上的步骤,直到得到一个空值域或者剩下的变量数比可取值的个数多,则产生矛盾。

  • Atmost(…)至多约束:对于每个变量X和它的取值的上、下界,每个变量Y都存在某个取值满足X和Y之间的约束,我们称该CSP为边界相容的。
    • 这种边界传播广泛地应用于实际的约束问题中。

局部搜索算法解决CSPs

1.4 局部搜索算法求解CSPs

  • 局部搜索应用到约束满足问题CSPs:
    • 采用完全形式化表示(即允许状态不符合约束)
    • 动作定义为:给变量重新赋值(对不满足约束的变量)
  • 变量选择:随机选择一个违反约束的变量重新赋值
  • 赋值方案采用最少冲突启发式原则,即选择违反最少约束的值进行赋值操作

image.png

例子: 4皇后问题

  • 状态:每列摆放一个皇后(44 = 256 个不同状态)
  • 动作: 将皇后在同一列内移动
  • 目标测试: 互相攻击不到
  • 评估函数: h(n) = 攻击到的皇后对数

任意给定一个初始状态,局部搜索算法能以很高的概率在常数时间内解决大规模n皇后问题(e.g., n = 10,000,000)
效果:

  • 最小冲突法几乎是独立于问题的规模的。
  • 可以在大约50步以内解决百万皇后的问题。
  • 局部搜索可以应用于联机问题的求解,因为回溯需要更多的时间。

    2. 联机搜索

    到如今为止,我们探讨的都是非实时的,或称为脱机问题。

  • 脱机问题(offline)=它们在执行前就可以计算出解决方案

  • 联机问题(online)=它们在执行时,需要计算和行动交叉进行
  • 联机搜索对于动态和半动态环境的搜索问题是必须的;
    • 现实,在搜索过程中考虑所有的可能的偶发事情是不可能的。
  • 常见的探究问题:
    • 智能体在未知的状态以及行为。

e.g. 一个新生儿, 机器人在一个新环境, …

  • 假设智能体有以下的知识:
    • ACTION(s): 状态s下可能的行动列表函数
    • C(s,a,s’): 单步耗散(直到智能体s知道行动的结果s’时才能得到!)
    • GOAL-TEST(s):目标测试
  • 事实:智能体能够记住先前的状态,不能访问下个状态。
  • 行动是确定的。
  • 可以使用可采纳的启发函数h(s)

e.g. 曼哈顿距离

  • 目标:用最小耗散达到目标
  • 耗散:整个路径的总耗散
    • 竞争率=实际代价同如果已知搜索空间的解路径代价的比值。
    • 当智能体偶然达到死路径可能造成无限循环。
  • 一个联机智能体具有维护环境地图能力
    • 随着输入的感知更新地图
    • 并应用它确定下一个行动
  • 同A*算法的区别

    • 一个联机版的智能体只能扩展它在当前状态中的实际结点(物理结点)。

      联机搜索例子

      5. 小结

  • 局部搜索:爬山法在完整状态形式化上进行操作;局部束搜索法保持k个状态的轨迹;禁忌搜索采用一种带约束的邻域搜索。

  • 优化算法:模拟退火在大搜索空间逼近全局最优解;遗传算法模仿自然选择的进化过程。
  • CSP问题:是一类特别的问题:状态是通过对变量集的赋值,目标测试是通过变量值的约束定义。
  • 联机问题: