搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
从前慢现在也慢
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Java+Swing+mysql天气信息管理系统_java天气管理系统
2
YoloV5 train.py 如何使用_yolov5中train.py中weights,cfy,data,hyp,怎么填
3
MySQL之ACID实现原理
4
【C++14算法】make_unique
5
ati-driver在2.16.18-gentoo-r2内核编译有问题及解决方法!!!_uts_release
6
使用Elasticsearch进行word,excel,PDF的全文检索 windows实现 超完整(ingest-attachment实现)_elasticsearch pdf
7
uni-app开发多端之钉钉小程序_uniapp中如何获取corpid is required
8
arcgis批量出图---批量输出结果为jpg_arcgis批量出图jpg步骤
9
人工智能面试题
10
【朝夕教育】2023年10月 WPF+上位机+工业互联 097-智能停车场项目专题(项目介绍)_朝夕智能停车场系统开发
当前位置:
article
> 正文
八数码算法研究(转载)_启发函数事例移动牌
作者:从前慢现在也慢 | 2024-04-07 12:31:53
赞
踩
启发函数事例移动牌
1.4课程设计实验环境
Microsoft Visual C++ 6.0
2问题描述及讨论
程序设计中,需要解决很多问题,除了编写程序过程中的问题,更重要的是算法设计过程中的问题。
2.1问题描述
在3x3的九宫格棋盘上,摆有8 个将牌,每个将牌都刻有1—8中的某个数码。棋盘中留有一个空格,允许其周围的某一个将牌向空格移动,这样通过移动将牌就可以不断改编将牌的布局。这种游戏求解的问题是:给定一种初始的奖牌布局或结构和一个目标布局,问如何移动将牌,实现从初始状态到目标状态的转变。而且,并不是所有初始状态到目标状态之间都存在解,如何判断解的存在与否。
2.2解存在性的讨论
首先,将8数码游戏的某一种状态按行合并,排成一行,共9个数,其中,空格用0表示。这样,8数码游戏的每一种状态都对应于一行数字。
对任意一对数字,如果前面的数字比后面的数大,则为一对逆序。对于一个序列,如果其中有奇数对逆序,则称之为逆序奇;如果其中有偶数对逆序,则称之为逆序偶。这样,对于1—n这n个数,所有的排序可以分为两类,逆序奇和逆序偶。相应的,8数码问题中的每一种状态(出去空格)也有它的奇偶性,称之为奇九宫图和偶九宫图,并有如下结论:
所有的奇九宫图之间是可达的,所有的偶九宫图之间也是可达的,但是奇九宫图和偶九宫图之间互不可达。根据此结论即可判断初始状态和目标状态之间是否可达。
2.3最优解的搜索
由初始状态到达目标状态有多种走步方法,我们的目标是选择一条所走步数最少的路径,即最优解。根据所求得的最优解走步,尽快达到目标状态。本游戏中主要用启发式搜索算法中的A* 算法来解决路径的搜索,而该算法的关键就是选取合适的启发函数。
3.核心算法
本程序的问题之一就是求最优路径,找最小的步数以尽快从初始状态到达目标状态,本设计中主要采用了A* 算法来寻找最优解。
3.1启发式搜索算法介绍
启发式搜索是利用问题拥有的启发式信息引导搜索,以达到减小搜索范围,降低问题复杂度的目的。这种利用启发信息的搜索过程称为启发式搜索。
一般情况下,启发信息过弱,产生式系统在找到一条路径之前将扩展过多的节点,即求得解路径所需搜索的工作量较大;反之,引入强的启发信息,则有可能大大降低搜索工作量,但不能保证找到最佳路径。因此,实际应用中希望最好能引入降低搜索工作量的启发信息而不牺牲找到最佳路径的保证。
在大多数实际问题中,人们感兴趣的是使路径的耗散值和求得路径所需搜索的耗散值两者的某种组合最小,更一般的情况是考虑搜索算法对求解所有可能遇见的问题,其平均的组合耗散值最小。实际上,很难给出一个计算平均组合耗散值 的方法,因此,启发能力的度量也只能根据实际经验判断,没有必要去追求严格的比较结果。
启发式搜索过程中,要对OPEN表进行排序,这就需要有一种方法来计算得拓展节点有希望通过目标节点的不同程度,我们总是希望能找到最有可能同通向目标节点的待拓展节点优先拓展。一种最常用的方法是定义一个评价函数对各个节点进行计算,其目的就是用来估算出“有希望”的节点,如何定义一个评价函数呢?通常可以参考的原则有:一个节点处在最佳路径下的概率:求出任意一个节点与目标节点集之间的距离度量或差异度量:根据格局(博弈问题)或状态的特点来打分,即根据问题的启发信息,从概率角度、差异角度或计分方法给出计算评价函数的方法。
3.2 A*算法
在介绍A* 算法之前,先介绍A算法。
同宽度优先搜索和深度优先搜索,OPEN表用来存储待扩展的节点,CLOSED表登录已扩展节点。利用评价函数 来排列OPEN表节点顺序的图搜索算法称为A算法。其中, 表示已经搜索的深度或者说耗散值, 表示所估计的与目标节点的距离,即启发函数, 是评价函数。A算法的搜索过程见图3.1。
图3.1 A算法流程图
如果设从节点n到目标节点的最短距离是h*(n),且使用的估价函数满足:h(n)<=h*(n),那么,此时的A算法称之为A*算法。
3.3 算法设计
本程序中使用A*算法来解决路径的搜索,下面来选取启发函数:
设评价函数为 , ,其中, 代表节点的深度,取 表示讨论单位耗散的情况。
分别取 和 ,其中, 为不在位的将牌个数; 为每个将牌与其目标位置之间距离的综合;则有, <= <= 。
本程序中采用 ,对于 ,仍不能估计出交换相邻两个将牌位置难易程度的影响,因此,再引入 分量。 是对节点n中将牌排列顺序的计分值,对非中心位置的将牌,顺着某一方向检查,若某一将牌后面跟的后继者和目标状态相应的将牌顺序不一致时,则将该将牌估分值取为2,一致时取0,对中心位置有将牌时估分取2,无将牌时估分取0;所有非中心位置每个将牌估分总和加上中心位置的将牌估分值定义为 。取 。
4 游戏过程的实现
作为游戏,除了程序运行流畅,有很好的健壮性,还应该有很好的界面,很好的交互性。
4.1程序功能介绍
1)可以分别输入初始状态和目标状态。设计三个Picture控件,以分别显示初始状态、目标状态以及在执行过程中显示搜索过程
2)用户可以选择进行游戏的方式:“人工”或者“机器”
3)选择“人工”,则用户通过点击“上”、“下”、“左”、“右”按钮,人工地移动空白块,以达到目标状态;选择“机器”,则计算机自己搜索最优路径,计算目标状态是否可达,以及计算达到目标状态所需的最少步数
4)若选择了“机器”,搜索到最优解后,点击“自动演示”按钮,就可以自动演示走步过程
4)用户可以设置搜索深度
6)程序中有状态提示以提示用户当前状态
7)当界面应为一些原因显示内容消失时,可以点击“恢复显示”,恢复显示
4.2界面设计
如图4.1为游戏初始界面:
图4.1 初始界面
通过点击输入“初始状态”和“输入目标”状态,输入初始态和目标态,其中,0表示空格,如图4.2
图4.2 输入状态
选择“人工”,则人手动通过点击“上”、“下”、“左”、“右”按钮走步,如图4.3
图4.3
选择“机器”,则应该先搜索最优解,搜索最优解时用到A*算法,状态提示中会显示搜索结果,如图4.4
图4.4搜索最优解
得到最优解后,点击“显示走步过程”,每点击一次,走一步,点击“自动演示”,程序自动演示走步过程,如图4.5
图4.5
用户还可以设置搜索深度,如图4.6
图4.6
5 总结
通过这次课程设计,复习了C++的相关知识以及VC6.0的使用,熟练掌握了C++中类的使用及用MFC设计界面的技术,同时也学到了很多新的知识,如启发式搜索算法等。此外,也锻炼了综合运用以前所学的知识、解决问题以及搭档合作的能力,还提高查阅资料、写作等的能力。
本次课程设计中能力提高的同时,也让我认识到自己的不足之处。可以指导我今后的学习,逐步去完善学习方式,改掉自己的不足。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/378621
推荐阅读
article
自然语言
对话
引擎
(技术类)...
机器接收文字、图像或者语音,识别其中的内容,然后给予适当的回复。有的回复很有意思,让人觉得好像电脑后面就坐着一个真实的人...
赞
踩
article
什么
是
自然语言
处理
(
NLP
)?
定义
+应用一次性看个明白_nlp
定义
...
不懂什么
是
自然语言
处理
?它在商业智能中又有哪些应用?带着这样的疑问,慧都网将从
定义
和应用两个方向,通过3分钟的时间快速了...
赞
踩
article
如何快乐地
使用
vite
开发
npm
库
(
typescript
),搭建·调试·
发布
·闭环
式
教程_
vite
...
从
vite
小白,到
npm
作者,只差这篇文章!从创建目录,到
使用
vite
打包
库
,自动生成dts声明文件,package.j...
赞
踩
article
BadNets
:基于
数据
投毒的模型后门攻击代码(
Pytorch
)以
MNIST
为例_
badnets
m...
【代码】
BadNets
:基于
数据
投毒的模型后门攻击代码(
Pytorch
)_
badnets
mnist
badnets
mn...
赞
踩
article
AI
大
模型
基石:
文字
与
数字
的
起源
与演变...
文字
起源
于人类需要记录更多信息
的
需求,而
数字
起源
于人类需要计数财产
的
需求。
文字
经历了从图画到象形
文字
再到楔形
文字
的
发展,...
赞
踩
article
【
Python
小技巧】
将
pdf
转为
txt
,
并使用
edge
-
tts
将
txt
批量
转为
MP3
(不想看书想听...
我们平常看到很多文件都是PDF格式
,
网上的各类书籍多为此格式。有时候不方便阅读
,
或者怕费眼镜伤颈椎
,
那么有没有一种方法可...
赞
踩
article
清华
大
模型
ChatGLM3
部署初体验...
正文共:1555 字 17 图,预估阅读时间:2 分钟
ChatGLM3
是智谱AI和清华
大
学KEG实验室联合发布的对话预训...
赞
踩
article
Academic Inquiry|
投稿
状态分享(
ACS
,
Wiley
,
RSC
,
Elsevier
,MDP...
本文介绍了多家知名学术出版社,包括
ACS
、
Wiley
、
RSC
、
Elsevier
、MDPI 和
Springer
Nat...
赞
踩
article
轻量级
网络
ESPNet
系列
空洞
卷积
简介...
空洞
卷积
(Dilated/Atrous Convolution)相比原来的正常convolution,dilated c...
赞
踩
article
什么是
NLP
思维
逻辑
层次
_nlp
逻辑
思维
层次
...
NLP
思维
逻辑
层次
,最初由格雷戈里·贝特森发展出来,后由罗伯特·迪尔茨(Robert Dilts)整理,在1991年推出...
赞
踩
article
DSSM
实战中文
文本
匹配
任务
_用
dssm
做
文本
匹配
任务
...
用
DSSM
做
文本
匹配
的套路是怎样的?_用
dssm
做
文本
匹配
任务
用
dssm
做
文本
匹配
任务
...
赞
踩
article
k8s
加
jenkins
和
gitlab
结合
maven
生成
快速
devops
平台内网
快速
部署
...
devops
快速
部署
平台
k8s
加
jenkins
和
gitlab
结合
maven
生成
快速
devops
平台内网
快速
部...
赞
踩
article
python
中文
自然语言
处理
_
Python
自然语言
处理
(1)
中文
分词
技术...
中文
分词
技术
中文
自动
分词
可主要归纳为“规则
分词
”“统计
分词
”和“混合
分词
”,规则
分词
主要是通过人工设立词库,按照一定方式...
赞
踩
article
【附
教程
】2024
,
人工智能
+
声音
,
看这里就够了~16款
AI
音乐
/
音频
/音效
,
声音
克隆
等
ai
软件与工...
根据Open
AI
的介绍
,
Sora可以生成长达60秒的视频
,
其中包含了精细复杂的场景、生动的角色表情以及复杂的镜头运动。A...
赞
踩
article
深入理解
Transformer
:
BERT
和
GPT
的
神奇之旅_
bert
和
gpt
关系...
自从2017年
的
“Attention is all you need”一文发表以来,
Transformer
架构已经成为自...
赞
踩
article
论文
如何
降低
AI
率
:七大策略探索...
综上所述,
降低
论文
AI
率
需要从多个方面入手,包括明确写作目的与
论文
结构、提升自身写作技能、合理使用
AI
工具、注重原创性与...
赞
踩
article
第十四届
蓝桥
杯
大赛软件赛省赛 C/C
++
大学 B 组_
蓝桥
杯
可以
用
whi
l
e
(~
s
c
a
nf
(
"
%
c
...
如何算,sum[i]代表从根走到i节点需要花多少时间,那么从u到v(后文表示为dis(u,v))则需要花sum[u]+s...
赞
踩
article
基于python爬虫技术的
旅游
景点
信息
采集
系统
的设计与实现(
Django
框架
)_
旅游
信息
系统
框架
...
基于python爬虫技术的
旅游
景点
信息
采集
系统
的设计与实现(
Django
框架
) ,也可以为
旅游
行业的发展提供更多元化的参...
赞
踩
article
GPT
系列介绍_
csdn
gpt
...
预训练语言模型
GPT
介绍_
csdn
gpt
csdn
gpt
GP...
赞
踩
article
Redis
数据库
的部署及
常用命令
_怎样部署
redis
数据库
...
NoSQL (NoSQL=Not Only SQL), 意思是“不仅仅是SQL",是非关系型
数据库
的总称。除了主流的关系...
赞
踩
相关标签
自然语言处理
NLP
商业智能
什么是自然语言处理
npm
typescript
pytorch
人工智能
python
语言模型
chatgpt
pdf
edge
学术期刊投稿
ACS
Wiley
RSC
Elsevier
Spring Nature
深度学习
计算机视觉
神经网络
文本匹配
DSSM