我已经编写了一个基本的Java小程序,它可以作为游戏粉丝的地图查看器(如谷歌地图)。
在其中,我在2D地图上实现了A *寻路算法,该地图有16个不同的楼层,在某些点上“连接”。地板存储在PNG图像中,在需要时下载并转换为字节数组。节点成本从像素RGB值中检索并放入字节数组中。
地图包含大约200万个瓷砖,分布在16个楼层。这些图像是1475 x 2000(PNG图像为15-140 KB),所以有些地板包含很多空的瓷砖。
字节数组在内存中会很大,导致大多数JVM配置出现“java.lang.OutOfMemoryError:Java堆空间”错误。
所以我的问题是
我认为在Web服务器上找到一条路径会占用大量CPU资源。
最好的问候,
甲
答案 0 :(得分:1)
你遇到了A *的最大问题:它的内存需求与状态空间的大小成正比。
你有几个选择。
第一种方法是将搜索算法从A *更改为IDA*,并添加内存缓存等搜索增强功能,以记住尽可能多的先前搜索节点成本。
另一种选择是保持A *但转向分层搜索。但是,这可能需要您对图像文件进行一些预处理。
您可以在这里找到关于此主题的几个好资源(可下载的论文):http://webdocs.cs.ualberta.ca/~holte/CMPUT651/readinglist.html