使用大型byte []数组的Applet A * pathfinding - 堆空间错误

时间:2010-03-24 19:25:39

标签: java applet heap bytearray path-finding

我已经编写了一个基本的Java小程序,它可以作为游戏粉丝的地图查看器(如谷歌地图)。

在其中,我在2D地图上实现了A *寻路算法,该地图有16个不同的楼层,在某些点上“连接”。地板存储在PNG图像中,在需要时下载并转换为字节数组。节点成本从像素RGB值中检索并放入字节数组中。

地图包含大约200万个瓷砖,分布在16个楼层。这些图像是1475 x 2000(PNG图像为15-140 KB),所以有些地板包含很多空的瓷砖。

字节数组在内存中会很大,导致大多数JVM配置出现“java.lang.OutOfMemoryError:Java堆空间”错误。

所以我的问题是

  • 是否有减少这些字节数组的大小并仍然具有正确的路径查找功能?
  • 我应该采用不同的方法来寻找最佳路径,而不是将内存放在内存中吗?

我认为在Web服务器上找到一条路径会占用大量CPU资源。

最好的问候,

1 个答案:

答案 0 :(得分:1)

你遇到了A *的最大问题:它的内存需求与状态空间的大小成正比。

你有几个选择。

第一种方法是将搜索算法从A *更改为IDA*,并添加内存缓存等搜索增强功能,以记住尽可能多的先前搜索节点成本。

另一种选择是保持A *但转向分层搜索。但是,这可能需要您对图像文件进行一些预处理。

您可以在这里找到关于此主题的几个好资源(可下载的论文):http://webdocs.cs.ualberta.ca/~holte/CMPUT651/readinglist.html