【问题标题】:a* pathfinding - cost of successora* 寻路 - 继任者的成本
【发布时间】:2011-04-27 16:51:51
【问题描述】:

我正在重新制作一个旧的魔兽争霸 3 自定义游戏,我曾经玩过很久,并将它放在 iPhone 上。基本上,你有一定的时间从一定数量的块中构建一个迷宫,并且小兵运行迷宫所需的时间越长,你得到的分数就越多。

我正在使用 cocos2d 进行这一切,现在我正在使用 a* 寻路算法。我正在使用Justin Heyes-Jones' implementation 并正在处理节点类。

但是,有几件事让我感到困惑。该类如下所示:

class MapSearchNode
{
public:
    unsigned int x;  // the (x,y) positions of the node
    unsigned int y; 


    MapSearchNode() { x = y = 0; }
    MapSearchNode( unsigned int px, unsigned int py ) { x=px; y=py; }

    bool IsGoal( MapSearchNode &nodeGoal ) { return (x == nodeGoal.x && y == nodeGoal.y); }
    bool IsSameState( MapSearchNode &rhs ) { return (x == rhs.x && y == rhs.y); }

    float GoalDistanceEstimate( MapSearchNode &nodeGoal );
    float GetCost( MapSearchNode &successor );
    bool GetSuccessors( AStarSearch<MapSearchNode> *astarsearch, MapSearchNode *parent_node );

    //void PrintNodeInfo();
};

我只是不确定 GetCost 是什么意思。在这个示例迷宫中,X 是墙壁,_ 是可步行区域,从 (3, 1) 到 (3, 2) 的成本是否为 0?那么从 (3, 1) 到 (4, 1) 的成本是多少,因为这是不可能的?

X X _ X X
X _ _ X X
X _ X X X
X _ _ _ _
X X X X X

然后我想我可以通过使用距离公式来实现 GoalDistanceEstimate,对吗?

【问题讨论】:

    标签: path-finding a-star


    【解决方案1】:

    一般的 A* 是基于加权图。在实际的迷宫求解应用中,对于可通行的地形,所有边具有相同的有限权重(通常为 1),而对于不可通行的地形,所有边具有相同的权重(写成一个非常大的数字,只需使用 100000 或其他值)。

    【讨论】:

    • 如果你这样做,你将不得不想出一个比欧几里得距离更好的启发式方法,否则 A* 不会比 Dijkstra 快得多。
    【解决方案2】:

    据我了解,成本是确定“最快路径”的“总和”。他们必须去的每个广场或节点都会增加成本。这还可能包括诸如地形限制(例如减慢您的速度等)之类的东西。

    【讨论】:

    • 我想我找到了答案。对于每个节点,成本将为 1(向前走一格),并且在 GetSuccessors 方法中,我不会添加任何不可走的后继节点。事实证明,成本是一个节点到另一个节点的成本,总成本存储在节点中,当创建一个新节点时,它的总成本设置为最后一个节点的总成本加上新节点的 GetCost 函数节点。
    猜你喜欢
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多