在我的代码处理了一段时间后,优化最明显的事情,我得到了这个:
app
a
Ulil.py
b
main.py
问题在于,注意到的行会出现某种游戏脚本超时错误(我认为这是因为质量递归而没有屈服)。我也觉得一旦这个问题得到解决,即使在pacman板的规模上也可能相当缓慢。有没有办法可以进一步优化它,或者可能是一个更好的方法,我可以研究类似的呢?
UPDATE :由于效率低下,我最终决定废弃我的算法,并实施了Dijkstra算法进行寻路。对于任何对源代码感兴趣的人,可以在这里找到:http://pastebin.com/Xivf9mwv
答案 0 :(得分:1)
您知道Roblox为您提供了PathfindingService吗?它使用C面A *路径来快速计算。我推荐使用它
http://wiki.roblox.com/index.php?title=API:Class/PathfindingService
答案 1 :(得分:0)
尝试重新构建算法以使用尾调用。这是Lua提供的一种很好的机制。
尾部调用是一种递归,其中函数返回函数调用作为它做的最后一件事。 Lua有适当的尾部调用实现,它将这个递归装扮成一个' goto'在幕后,所以你的筹码永远不会打击。
传递'路径'作为FindPath的一个参数可能会有所帮助。
答案 2 :(得分:-1)
我看到你关于抛弃代码的编辑,但只是为了帮助其他人绊倒这个问题:
用对或数字for循环替换 ipairs 并使用循环代替 unpack 将提高的性能强>
如果您想获得表格中的最低值,请使用以下代码段:
local lowestValue = values[1]
for k,v in pairs(values) do
if v < lowestValue then
lowestValue = k,v
end
end
这可以为您的路径示例重写,如下所示:
local least = #path[1]
for k,v in pairs(path) do
if #v < least then
least = v
end
end
我必须承认,你很有创造力。不是很多人会使用math.min(unpack(tab))(不计算它的坏处)