关于算法的一点提示

时间:2012-05-01 22:00:53

标签: algorithm lua artificial-intelligence path-finding

我需要一个从point_a到point_b的算法,花费给定的n个像素(或者我可以将平方[面积大于像素]视为一个像素)。 例如: 如果在笛卡尔计划中,point_a =(0,0)和point_b =(100,150),并且n = 350,我希望算法以这种方式运行: 如果point_a + point_b等于n,则直接到最后一点(即x = 100,y = 150) 但是如果上面的条件是假的,它会一直在计划中走动,直到上述条件变为真,并且当它完成时,它会直接到达这一点。

我正在考虑上面引用的算法。我的问题是算法不能花费多于或少于n,它必须是非常好的。

我目前正在使用Lua,但这并不重要,因为我想在这里实际上改善了我的想法,而不是让另一个准备好了。

2 个答案:

答案 0 :(得分:1)

关于路径应该如何的任何偏好?让算法首先沿着直线行进然后在最后的方块上来回走,直到所有步骤都用完为止?或者稍微好看的算法看起来像这样:

假设pointA是(0,0),pointB是(0,p),现在找到pointC(x,0),使得路径A-> C-> B具有n的长度。很容易就可以得到x = sqrt(n ^ 2 - p ^ 2)。如果n == p,c = 0,这意味着只需要直线。

答案 1 :(得分:1)

我不确定你正在使用什么距离测量。如果你从(0,0)开始并想去(3,4),那么是5步(欧几里德距离)还是7步(曼哈顿距离)?如果你正在使用欧氏距离,你如何处理不合理的距离?

我假设你正在使用曼哈顿距离而我正在提出一个概率解决方案。

让我们假设您离目的地只有几步之遥,您需要在n个步骤(n> = m)中执行此操作。让我们将当前状态定义为(m,n)。如果向目标移动一步,问题状态为(m-1,n-1)并且离目的地越远,则状态为(m + 1,n-1)。

在每个点使用当前状态计算前往目的地的概率p = 3 * m /(3 * m +(n-m))。生成0到1之间的随机数,如果它低于p,则转向目的地,否则远离目的地。

def nextmove(m,n):
    p = 3.0*m/(3*m + (n-m) )
    if random.random() <=p:
        return m-1,n-1,'towards'
    else:
        return m+1,n-1,'farther'