a算法演示系统设计大学本科毕业论文Word下载.docx

上传人:b****2 文档编号:15010424 上传时间:2022-10-26 格式:DOCX 页数:30 大小:626.33KB
下载 相关 举报
a算法演示系统设计大学本科毕业论文Word下载.docx_第1页
第1页 / 共30页
a算法演示系统设计大学本科毕业论文Word下载.docx_第2页
第2页 / 共30页
a算法演示系统设计大学本科毕业论文Word下载.docx_第3页
第3页 / 共30页
a算法演示系统设计大学本科毕业论文Word下载.docx_第4页
第4页 / 共30页
a算法演示系统设计大学本科毕业论文Word下载.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

a算法演示系统设计大学本科毕业论文Word下载.docx

《a算法演示系统设计大学本科毕业论文Word下载.docx》由会员分享,可在线阅读,更多相关《a算法演示系统设计大学本科毕业论文Word下载.docx(30页珍藏版)》请在冰豆网上搜索。

a算法演示系统设计大学本科毕业论文Word下载.docx

Thetopicofthecoursedesignis"

Astaralgorithmdemosoftware"

A*algorithminartificialintelligenceisAkindoftypicalheuristicsearchalgorithm,thisisAgraphicsintheplane,havemorethanonenodepath,thealgorithmofminimumthroughcost.itoftenbeusedinthegameofmobilecomputingofNPC,oronlinegamesonmobilecomputingofBOT.Thecoursedesignrequirstodemonstratetheimplementationprocessofthewholealgorithm,canbesinglestepdemo,dynamicdemonstration,theessenceoftheexecutionprocessofalgorithmdemo.

onthebasisoffullunderstandingofthealgorithm,DemonstrateingthealgorithmimplementationprocesswillinvolvetheGraphdrawing,andtheprogrammingonimage,obviouslyahigh-levellanguagehasthecharacteristicsofitsdevelopmentofhighefficiency,Javapowerfulcomputingandgraphicsdisplayfunction,maketheimageprogrammingmoresimpleandintuitive.Thisprojectisbasedoneclipse'

sJavaintegrateddevelopmentenvironment,Astaralgorithmdemosoftwarewasdesignedandimplemented,showinghowAstaralgorithmofheuristicsearchandpathfinding.Implementssetthestartingpointandendpoint,barriers,clearobstacles,directlypathfinding,singlesteppathfinding,dynamicpathfinding,pathfindingagain,adddefaultbarrierfunctionoftheseoperations.theusercanusethesoftwareaccordingtotheirrequirments,thesoftwarefullyshowstheexecutionofAstaralgorithm.

Keywords:

AStararithmetic,heuristicsearch,java

目录

摘要1

Abstract2

目录3

1需求分析4

1.1编写目的4

1.2背景4

1.2.1A*搜索算法介绍4

1.2.2Dijkstra算法5

1.2.3java语言介绍6

1.2.4java图形化编程的知识8

1.3任务概述8

1.4运行环境规定9

1.5其他A星软件的优劣9

(1)软件一9

(2)软件二10

2概要设计11

2.1界面设计11

2.1.1软件的进入界面设计11

2.1.2软件的进入界面的分析11

2.1.3软件主题界面的设计12

2.1.4软件主体界面的分析12

2.2程序需要实现的功能13

3详细设计14

3.1类图的设计14

3.2类之间的关系说明14

3.3类图的分析15

3.4程序的实现16

3.4.1程序逻辑的设计16

3.3.2找到link中结点的F值最小的结点20

3.4.3响应绘制方块paint的参数与getGraphics()23

3.4.4程序主体界面MyPanel中paint函数做的工作24

3.4.5主体界面类做的工作24

3.3.6鼠标监听mouseClickedORmousePressed25

3.3.7动态寻路的演示25

3.3.8设置起点的工作25

3.3.9设置终点的工作25

3.3.10找不到路径的提示26

4总结27

5致谢28

6参考资料29

1需求分析

1.1编写目的

A*算法作为为基本寻路算法常出现在游戏设计中,刚刚接触A*算法,难免初学者会产生迷惑,为了使算法的执行步骤更加的清晰,是算法的思路完整的展现出来,此次课题的要求就是用图形化的方式,一步一步的展现A*算法的执行步骤,使想了解A*算法的人能够更清晰的理解此算法,等真正理解了,就会发现,原来游戏的寻路是这样的,从而也会是学习者有更大的兴趣深入其他算法的学习。

1.2背景

1.2.1A*搜索算法介绍

A*在游戏设计中有它很典型的用法,是人工智能在游戏中的代表。

A*算法在人工智能中是一种典型的启发式搜索算法

在说启发式搜索之前先提状态空间搜索。

状态空间搜索,如果按专业点的说法就是将问题求解过程表现为从初始状态到目标状态寻找这个路径的过程。

通俗点说,两点之间求一线路,这两点是求解的开始和问题的结果,而这一线路不一定是直线,可以是曲折的。

由于求解问题的过程中分枝有很多,主要是求解过程中求解条件的不确定性,不完备性造成的,使得求解的路径很多这就构成了一个图,我们说这个图就是状态空间。

问题的求解实际上就是在这个图中找到一条路径可以从开始到结果。

这个寻找的过程就是状态空间搜索。

常用的状态空间搜索有深度优先和广度优先。

广度优先是从初始状态一层一层向下找,直到找到目标为止。

深度优先是按照一定的顺序先查找完一个分支,再查找另一个分支,以至找到目标为止。

这两种算法在数据结构书中都有描述,可以参看这些书得到更详细的解释。

前面说的广度和深度优先搜索有一个很大的缺陷就是他们都是在一个给定的状态空间中穷举。

这在状态空间不大的情况下是很合适的算法,可是当状态空间十分大,且不预测的情况下就不可取了。

他的效率实在太低,甚至不可完成。

在这里就要用到启发式搜索了。

启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。

这样可以省略大量无谓的搜索路径,提高了效率。

在启发式搜索中,对位置的估价是十分重要的。

采用了不同的估价可以有不同的效果。

启发中的估价是用估价函数表示的,如:

f(n)=g(n)+h(n)

其中f(n)是节点n的估价函数,g(n)是在状态空间中从初始节点到n节点的实际代价,h(n)是从n到目标节点最佳路径的估计代价。

在这里主要是h(n)体现了搜索的启发信息,因为g(n)是已知的。

如果说详细点,g(n)代表了搜索的广度的优先趋势。

但是当h(n)>

>

g(n)时,可以省略g(n),而提高效率。

启发式搜索其实有很多的算法,比如:

局部择优搜索法、最好优先搜索法等等。

当然A*也是。

这些算法都使用了启发函数,但在具体的选取最佳搜索节点时的策略不同。

像局部择优搜索法,就是在搜索的过程中选取“最佳节点”后舍弃其他的兄弟节点,父亲节点,而一直得搜索下去。

这种搜索的结果很明显,由于舍弃了其他的节点,可能也把最好的节点都舍弃了,因为求解的最佳节点只是在该阶段的最佳并不一定是全局的最佳。

最好优先就聪明多了,他在搜索时,并没有舍弃节点(除非该节点是死节点),在每一步的估价中都把当前的节点和以前的节点的估价值比较得到一个“最佳的节点”。

这样可以有效的防止“最佳节点”的丢失。

那么A*算法又是一种什么样的算法呢?

其实A*算法也是一种最好优先的算法,只不过要加上一些约束条件罢了。

由于在一些问题求解时,我们希望能够求解出状态空间搜索的最短路径,也就是用最快的方法求解问题,A*就是干这种事情的!

我们先下个定义,如果一个估价函数可以找出最短的路径,我们称之为可采纳性。

A*算法是一个可采纳的最好优先算法。

A*算法的估价函数可表示为:

f'

(n)=g'

(n)+h'

(n)

这里,f'

(n)是估价函数,g'

(n)是起点到节点n的最短路径值,h'

(n)是n到目标的最短路经的启发值。

举一个例子,其实广度优先算法就是A*算法的特例。

其中g(n)是节点所在的层数,h(n)=0,这种h(n)肯定小于h'

(n),所以由前述可知广度优先算法是一种可采纳的。

实际也是。

当然它是一种最臭的A*算法。

再说一个问题,就是有关h(n)启发函数的信息性。

h(n)的信息性通俗点说其实就是在估计一个节点的值时的约束条件,如果信息越多或约束条件越多则排除的节点就越多,估价函数越好或说这个算法越好。

这就是为什么广度优先算法的那么臭的原因了,谁叫它的h(n)=0,一点启发信息都没有。

但在游戏开发中由于实时性的问题,h(n)的信息越多,它的计算量就越大,耗费的时间就越多。

就应该适当的减小h(n)的信息,即减小约束条件。

但算法的准确性就差了,这里就有一个平衡的问题。

游戏中速度和精确度之间的选择并不是全局的。

在地图上的某些区域,精确度是重要的,你可以基于此进行动态选择。

例如,假设我们可能在某点停止重新计算路径或者改变方向,则在接近当前位置的地方,选择一条好的路径则是更重要的,因此为何要对后续路径的精确度感到厌烦?

或者,对于在地图上的一个安全区域,最短路径也许并不十分重要,但是当从一个敌人的村庄逃跑时,安全和速度是最重要的。

所以A星算法应用在游戏中时可以根据具体的情况为各种不同的障碍设置不同的加权值是尽可能的出最有效的方案。

1.2.2Dijkstra算法

图1.1Dijkstra算法的执行图

Dijkstra算法迪科斯彻算法使用了广度优先搜索解决非负权有向图的单源最短路径问题,算法最终得到一个最短路径树。

并没有启发寻路,属于A*算法的特例。

这个算法的工作过程就是从起始点开始

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1