四、传播

news2024/9/22 4:16:11

文章目录

  • 1、草药迷阵问题
  • 2、时序回溯搜索
  • 3、传播+搜索
  • THE END

1、草药迷阵问题

\qquad 有一个10*10的百草药柜,每一个抽屉里都有5种不同属性的草药,依次打开抽屉来长出草药迷阵,要求寻找一种神奇的药方,满足:

  • 横行:每一种被选取的草药都要和相邻的抽屉里选的草药相互符合相生相克的关系
  • (1,1) 不能从抽屉里选取金属性的草药
  • 纵列:最少一种,最多两种金属性和土属性的草药

2、时序回溯搜索

\qquad 首先列举可能的选择来做决策:
\qquad \qquad - 选择一个决策
\qquad \qquad - 在所有现有的可能性里面选择一个,且保证这个选择跟目前为止已做的决策是“兼容的”
\qquad \qquad - 如果当前的选择与某些约束冲突了,考虑另一个可行的选择
\qquad 如果所有的决策都互相兼容,那么我们就找到一个解
\qquad 如果在任意一个步骤,没有任何可行的选择作为决策,则修改上一个决策
\qquad 时序回溯搜索其实是一个搜索树的搜索过程,其示意如下图所示:
在这里插入图片描述
\qquad 为了更好地程序化时序回溯搜索算法,首先做出下述定义,令 f i x ( D ) fix(D) fix(D)表示一个变量的集合,其中的所有变量 X X X都已经被赋予一个数值,称 f i x ( D ) fix(D) fix(D)中的变量为已经被固定的变量;令 s a t i s f i e d ( c ) satisfied(c) satisfied(c)表示一个函数,用于检查某一条约束 c c c的变量是否都已经被固定了。令 c h e c k ( C , D ) check(C,D) check(C,D)表示一个函数,用于检查约束集合 C C C中的所有约束的值域。

 check(C,D):
 	foreach c in C:
 		if(vars(c) in fixed(D)):
 			if not satisfied(c) return false domain #约束c中不是所有变量均已被固定
 	return D 									#约束c中所有变量均已被固定

\qquad 基本回溯搜索算法的流程如下所示:

back_search(C,D):
	if(vars(C) in fixed(D)) return check(C,D)
	X = choose(vars(C)-fixed(D))#选择下一个尝试固定的变量
	foreach d in D(X):
		D1 = check(C and {X=d}, D)
		if(D1=D):
			D2 = back_search(C and {x=d}, D)
			if(D2 is not a false domain) return D2
	return false domain

\qquad 在搜索里,变量的顺序(choose())的影响十分大,不同的选择直接影响到搜索树的大小的搜索效率;
\qquad 函数 c h o o s e ( ) choose() choose()允许采用不同的方法选择下一个变量,最简单的方法是根据他们的输入顺序依次进行选择;也可以基于其他规则进行选取,如根据变量值域的大小,选择值域最大或者最小的变量。
\qquad 在对某个变量的值域进行搜索时,i.e., foreach d in D(X),搜索的顺序会影响到搜索的效率,好的选择可以使得可行解更早地被找到,从而加速剪枝和缩短求解时间。

3、传播+搜索

\qquad 约束传播是一个有效且高效的推理方式,可以从变量的值域中移除那些确保不会出现在解中的数值,从而可以得到更小的值域和更小的搜索树。
\qquad 应用约束+传播的思路为:在每一个搜索节点上,在枚举搜索下一个变量之前,进行约束传播。
\qquad 将约束传播技术融入到搜索过程,得到的强化版本的搜索-传播算法如下所示:

prop_search(F0,Fn,D):
	D = isolv(F0,Fn,D) #通过约束传播更新值域
	if(D is a false domain) or (all X: |D(X)| =1):
		return D
	X = choose(vars(C))
	foreach d in D(X):
		D1 = back_search(F0 and Fn, {prop(X=d)}, D)
		if(D1 is not a false domain) return D1
	return false domain

\qquad 使用二叉分枝的方法如下所示:
在这里插入图片描述
\qquad 上述二叉分枝中, c h o o s e ( D ) choose(D) choose(D)函数用于将父结点划分成两个子结点,其中的划分方法可以有如下几种,首先选择一个变量 X X X,其值域中的值的个数 ∣ D ( X ) ∣ > 1 |D(X)|>1 D(X)>1,在其值域中选择一个值 d ∈ D ( X ) d \in D(X) dD(X)。第一种方法是:在一个分枝中令 X = d X=d X=d,在另一个分枝结点中令 X ≠ d X \neq d X=d。另外一种分枝方法是:在一个分枝中令 X ≤ d X \leq d Xd,在另一个分枝中令 X ≥ d + 1 X \geq d+1 Xd+1。上述分枝方法在约束传播中叫做值域分割。

THE END

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/759509.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构——C++无锁队列

数据结构——C无锁队列 贺志国 2023.7.11 上一篇博客给出了最简单的C数据结构——堆栈的几种无锁实现方法。队列的挑战与栈的有些不同,因为Push()和Pop()函数在队列中操作的不是同一个地方。因此同步的需求就不一样。需要保证对一端的修改是正确的,且对…

(中等)LeetCode 3. 无重复字符到的最长子串 Java

滑动窗口 以示例一为例,找出从每一个字符开始的,不包含重复字符的最长子串,那么,其中最长的那个字符串即为答案。 当我们一次递增地枚举子串的起始位置,会发现子串的结束位置也是递增的,原因在于&#xf…

Django项目创建

Django项目创建 文章目录 Django项目创建👨‍🏫方式一:终端命令行方式👨‍🔬方式二:Pycharm创建 👨‍🏫方式一:终端命令行方式 1️⃣cmd打开终端,切换到指定目…

WebSell管理工具--中国蚁剑安装教程以及初始化

简介:中国蚁剑是一款开源的跨平台WebShell网站管理工具 蚁剑的下载安装: GitHub项目地址:https://github.com/AntSwordProject/ Windows下载安装: 百度网盘下载链接:链接:https://pan.baidu.com/s/1A5wK…

超细整理,性能测试-性能指标监控命令详细实战,一篇速通

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能监控命令&…

自动驾驶代客泊车AVP摄像头与ECU交互需求规范

目录 1 文档范围及控制方法... 5 1.1 目的.... 5 1.2 文档授权... 5 1.3 文档变更管理... 5 1.4 缩写.... 5 1.5 术语.... 5 2 系统组成... 6 2.1 系统框图... 6 2.2 电源供应和时序要求... 7 2.2.1 摄像头供电控制... 7 2.2.2 摄像头上电时序要求…

论文(3)——使用ChatGPT快速提高科研能力!!如何快速构建代码?怎么提高自己的科研能力?如何提高自己的生产力?

文章目录 引言问题描述问题解决智能开发软件的方法ChatGPT Plus 代码解释器使用ChatGPT插件功能 代码工具Coplit学生优惠免费申请Coplit和pycharm的结合 NewBing的申请 总结参考引用 引言 chatGPT大模型用于问问题和debug,NewBing用于搜索论文,cpolit用…

简述HashMap的扩容机制

注意:本博客需要对HashMap源码有过一定理解,看过源码比较好,仅供互相学习参考 JDK1.7和JDK1.8对比 1.7版本: (1). 首先生成一个新数组(2). 遍历老数组每个位置中的链表元素(3). 取每个元素的key,重新计算每个元素在…

深度学习ai学习方向如何规划,算法竞赛,机器学习,搭建环境等答疑

目录 1了解人工智能的背景知识 2 补充数学或编程知识 3 熟悉机器学习工具库 4 系统的学习人工智能 5 动手去做一些AI应用 1了解人工智能的背景知识 一些虽然存在但是在研究或者工业上不常用的知识,为自己腾出更多的时间来去学习,研究。 人工智能里…

2023.7.16-约数的枚举

功能&#xff1a;输入一个整数&#xff0c;结果打印出这个整数所有的约数。 程序&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> int main() {int a0, b;printf("请输入一个整数&#xff1a;");scanf("%d",&a);printf(&qu…

迭代器模式:相比直接遍历集合数据,使用迭代器有哪些优势?

今天&#xff0c;我们学习另外一种行为型设计模式&#xff0c;迭代器模式。它用来遍历集合对象。不过&#xff0c;很多编程语言都将迭代器作为一个基础的类库&#xff0c;直接提供出来了。在平时开发中&#xff0c;特别是业务开发&#xff0c;我们直接使用即可&#xff0c;很少…

前端基础:HTML和CSS简介

目录 1、HTML 简介 &#xff08;1&#xff09;在 HTML 中引入外部 CSS &#xff08;2&#xff09;在 HTML 中引入外部 JavaScript 2、CSS 简介 &#xff08;1&#xff09;CSS 的基本语法 &#xff08;2&#xff09;三种使用 CSS 的方法 2.1 - 外部 CSS 的使用 2.2 - 内…

Redis简介与安装

文章目录 前言一、Redis简介1. Redis是什么2. Redis的特点3. 数据库类型4. Redis 应用场景 二、Redis下载与安装1. Redis安装包下载地址2. 在 windows系统安装 Redis3. 在Linux系统安装Redis 总结 前言 为了巩固所学的知识&#xff0c;作者尝试着开始发布一些学习笔记类的博客…

面向对象习题

创建类Calc,定义2个数属性以及一个符号属性,编写4个方法add、minus、multiply、divide,4个方法分别进行2个小数的加、减、乘、除运算.在主函数里面接受用户输入2个运算数、1个运算符,根据该运算符选择应该调用哪一个方法进行运算。 定义10名学生&#xff0c;循环接收10名学员的…

【Kubernetes运维篇】RBAC认证授权详解(二)

文章目录 一、RBAC认证授权策略1、Role角色2、ClusterRole集群角色3、RoleBinding角色绑定和ClusterRoleBinding集群角色绑定 二、通过API接口授权访问K8S资源三、案例&#xff1a;常见授权策略1、常见的角色授权策略案例2、常见的角色绑定案例3、常见的ServiceAccount授权绑定…

WIN10更改代理设置后无法保存的解决办法

每次更改代理之后保存&#xff0c;推出界面再进来发现还是和原来一样 这应该是代理报错失败解决办法如下 winR&#xff0c;regedit&#xff0c;打开注册表编辑器 找到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\CurrentVersion\Internet Settings里面的Pr…

一例flash打包的文件夹病毒的分析

今天分析一例样本&#xff0c;该样本使用flask编写&#xff0c;使用MDM Zinc3打包成exe&#xff0c;使用文件夹图标&#xff0c;会在系统中除了C盘外所有驱动器根目录创建photo目录&#xff0c;将自身拷贝进去&#xff0c;诱导用户点击&#xff0c;会添加开机启动项&#xff0c…

03插值与拟合

9.已知飞机下轮廓线上数据如下&#xff0c;分别用分段线性插值和三次样条插值求x每改变0.1时的y值。 x035791112131415y01.21.72.02.12.01.81.21.01.6 %9.已知飞机下轮廓线上数据如下&#xff0c;分别用分段线性插值和三次样条插值求每改变0.1时的y值。x [0 3 5 7 9 11 12 1…

浮点数的存储

❤️ 作者简介 &#xff1a;对纯音乐情有独钟的阿甘 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识&#xff0c;对纯音乐有独特的喜爱 &#x1f4d7; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;如果你也感兴趣的话欢迎关注博主&#xff0c;期待更新 1. 浮点型…

伙伴来做客,文心千帆大模型平台实操秘籍大公开

7月15日&#xff0c;业界首个大模型实训营——百度智能云文心千帆大模型平台实训营在百度大厦举办。百度智能云携手软通动力、中科软、科蓝、中软国际、天源迪科、世纪互联、宝兰德等14家合作伙伴的25位CTO和技术总监&#xff0c;为伙伴在实际落地中更好地应用大模型技术提供支…