人工智能基础——约束满足问题(CSP)

约束满足

就是求解的问题存在约束。考虑一张拓扑图,每个节点都存在候选区间,然后某几个(1-n)节点之间存在约束,比如某个点不能取特定值,某两个相加等于定值之类的。一个约束包含几个变量,就是几元约束(相容)。

相容

就是约束

节点相容

单个点存在约束,直接利用约束消除这个点里的非合法区间就行了。

弧相容

二元约束,使用AC3算法:
把所有二元关系入队,每次弹出一个,假设为 ( A , B ) (A,B) (A,B),约束其中一个调整另外一个,如果约束产生效果,如锁定A的值域确定B的值域,如果对原本值域无影响,就弹出下一个;否则B值域发生变化,那我就把所有 ( B , D i ) (B,D_i) (B,Di) D i D_i Di表示所有其他和B相关的节点,加入队列。直到队列为空就结束。

路径相容

一个节点和另外两个发生相容,处理成三元相容。考虑三个节点两两相连,目标用两种颜色为其染色,显然无解。我们假设一开始每个节点值域都是{1,2},利用任意两点间颜色不相同永远无法消除值域,也就是说只靠两元约束永远无法解决这个问题,所以需要把两元约束处理成三元的。A和B相容,B和C相容,那就处理成ABC相容。

k相容

多元约束,PC2算法:书上说何AC3差不多,那大概就是所有n元关系入队,然后锁定n-1个值更新一个值域,发生值域更新就把受到改变节点约束的多元关系也入队把。

全局约束

含有不同元的约束,各种约束组成的整体。有各种不同的约束啦。

数独问题

数独问题最一般的做法就是,选一个点,看行列、方格哪些数字已经出现,出现过就更新这个值域范围。但是仅仅依靠这种方式只能解决简单的问题。
可以利用多元约束求解,那基本等同于全部搜索,根本不可能算的完的。

CSP回溯搜索

就深搜嘛,提了一些可以优化的地方。

  • 利用简单约束提前消减搜索空间,交替进行效果更好,因为搜索一会,又多了很多可以利用约束消除的节点。
  • 先搜索可能取值少的节点
  • 智能回溯,搜索路径a-b-c,a和c冲突了,但是你回去改b,你再搜到c的时候还是不对,所以应该跳到使冲突发生的地方。
局部搜索

给一个存在一些冲突的初值,对其进行修正的算法可能会很快。我觉得可能因为解很可能不唯一,你给定一个值至少离某个解很近,而从0开始离每个解都很远。

比如说八皇后,给个初始存在冲突的情况,随便选一个点,他和其他一般存在不只一个冲突,选择一个能让冲突数量最少的方式进行搜索。

问题结构

拓扑排序(自己去查)
图化树

选择一个割集,把剩下部分变成一棵树。枚举割集,进行每种情况下的树搜索。

树分解

把图中几个连通块作为一个节点,把这些互相存在关系的节点连成树。

CSP问题改进

放宽、分解、增强约束。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值