约束满足问题改进技术:基于变量和赋值次序的启发式

news/2025/2/19 8:39:26/

回溯搜索的通用算法的问题与改进思路

• 需改善无信息回溯搜索算法的性能。

• 通用改进方法的思路:

下一步该给哪个变量赋值, 按什么顺序给该变量赋值?

每步搜索应该做怎样的推理? 当前变量的赋值会对其他未赋值变量产生什么约束, 怎样利用这种约束以提高效率。

– 当遇到某个失败的变量赋值时, 怎样避免同样的失败? 就是说如何找到对这种失败起到关键作用的某个变量赋值。

下面介绍基于变量和赋值次序的启发式的三种方法。

MRV(最少剩余值) 启发式

由于随机的变量赋值排序难以产生高效率的搜索。

例如: 在WA=red且NT=green条件下选取SA赋值的可能(只能取blue)与Q能取到的赋值(可以取blue、red)的比为(1:2), 并且一旦给定SA赋值以后, Q、 NSW和V的赋值只有一个选择。

因此, 应当选择合法取值最少的变量, 即最少剩余值(MRV)启发式,也称为最受约束变量启发式或失败优先启发式。

为失败优先启发式是因为它可以很快找到失败的变量, 从而引起搜索的剪枝, 避免更多导致同样失败的搜索。

最少约束值启发式

最少约束值启发式: 当赋值的变量有多个值选择时, 优先的值应是约束图中排除邻居变量的可选值最少的, 即优先选择为剩余变量的赋值留下最多选择的赋值

例如, WA=red且NT=green时, 如果给Q赋值, 可以为blue或red, 而Q=blue的选择不好, 因为此时SA没有一个可选择的了。所以应该让Q=red,使得SA留下他最多的选择。

度启发式

度启发式: 选择涉及对其他未赋值变量的约束数量大(与其他变量关联最多) 的变量。

– 地图染色例子中, 度(SA)=5, 其他均为2或3。

– 实际上, 一旦选择了SA作为初始节点, 应用度启发式求解本问题, 则可以不经任何回溯就找到解。


http://www.ppmy.cn/news/1290414.html

相关文章

编译器功能__attribute__介绍和官方资料来源

1、__attribute__简介 __attribute__不是C语言本身的关键字,而是属于编译器扩展的C语言的功能,C Extensions (Using the GNU Compiler Collection (GCC))中可以找到关于attribute的几个章节,Function Attributes【函数属性】、Variable Attr…

专题一_双指针(一)

文章目录 283.移动零题目解析讲解算法原理扩展编写代码 1089.复习零题目解析讲解算法原理编写代码 202.快乐数题目解析讲解算法原理证明编写代码 11.盛最多水的容器题目解析讲解算法原理暴力解法优秀的解法时间复杂度分析 编写代码 283.移动零 题目链接 题目解析 题目还是比较…

Spring Data JPA从入门到精通--对查询结果的扩展

如果 我们想仅仅返回实体中的几个字段,应该怎么做呢? 基于projections的思路,其实是比较容易的。 我们只需要声明一个 接口,包含要返回的属性的方法即可,例如: Repository里面的写法如下,直接…

​如何把图片里背景的路人P掉?教你四种方法消除路人

在日常生活中,我们经常会遇到需要将图片中背景的路人P掉的情况。有时候,这些路人会破坏图片的整体美感,或者我们只想要图片中的某些元素,而路人的出现会分散注意力。那么,如何才能有效地将图片中的背景路人P掉呢&#…

UR5机器人的旋转向量转换到四元数,再从四元数转换到旋转向量python代码

能够通过接口获得UR5机器人末端在基坐标系下的位姿,姿态表示方法是用旋转向量表示的,一般会涉及到四元数和旋转向量之间的转换。 1、方法一 import numpy as np from pytransform3d import rotations as pr import copy # 输入旋转向量 quaternion2 n…

如何自动生成 API 接口文档 - 一份详细指南

本篇文章详细教你如何使用 Apifox 的 IDEA 插件实现自动生成接口代码。好处简单总结有以下几点: 自动生成接口文档: 不用手写,一键点击就可以自动生成文档,当有更新时,点击一下就可以自动同步接口文档;代码…

前端八股文(CSS篇)一

目录 1.px和em的区别 2.介绍下BFC及其应用 3.介绍下粘性布局(sticky) 4.清除浮动的方法 5.如何用css或js实现多行文本溢出省略效果,考虑兼容 6.如何触发重排和重绘? 7.重绘与重排的区别? 8.说说两种盒模型以及区…

【Python】ubuntu python>3.9编译安装,及多个Python版本并存的使用方法

【Python】ubuntu python3.9编译安装,及多个Python版本并存的使用方法 1. 安装依赖2. 编译与安装2.1 依赖与源获取2.2 配置2.3 编译2.4 安装2.5 建立软连接 链接动态库 3. 多版本兼容 1. 安装依赖 更新系统软件 在正式开始之前,建议首先检查系统软件是否…