A*路径查找AI在向成本排序字典添加节点时冻结

我正在尝试构建一个基于A星路径查找的AI,适用于简单的四方向移动网格。然而,每当我尝试将节点添加到比较字典并对其进行排序时,程序在Dictionary.add处崩溃。我不太确定这是为什么,有人能发现其中的缺陷吗?

    void DirectionFinder(){    // 查找目标点 //
    GetBoardPosition();
    BuildOrReBuildPawnRefBoard();
    bool IsTrue = false;
    int Serial = lastSquare.Location.Serial;
    // 获取此节点邻居节点的序列键 //
    bool TestNode = NodesClosed.ContainsKey(Serial);
    Dictionary<int, Node> SortArray = new Dictionary<int, Node>();
    SortArray.Clear();
    if (TestNode) 
    {
        Node ScanNode = NodesClosed[Serial];
        // 获取我的邻居节点数量 //
        int TestNumNeighbors = ScanNode.NeighborNodes.Count;
        // 设置一个循环,遍历这些节点并获取得分最低的移动节点 //
        for (int loop = 0; loop < TestNumNeighbors; loop++)
        {
            int ScanNodePointX = ScanNode.NeighborNodes[loop].X;
            int ScanNodePointY = ScanNode.NeighborNodes[loop].Y;
            int ScanTestSerial = System_GameController.Instance.NodeArray[ScanNodePointX, ScanNodePointY].Location.Serial;
            bool IsNodeOpen = NodesOpen.ContainsKey(ScanTestSerial);
            if (IsNodeOpen)
            {
                Debug.Log("此节点已打开:" + ScanTestSerial);
                Node CompareNode = NodesOpen[ScanTestSerial];
                int CostOfNode = CompareNode.TotalCost;
                SortArray.Add(CostOfNode, CompareNode);
            }
        }
    }}

它一直运行到”CostOfNode”。那部分工作正常…然后在尝试向SortArray添加时崩溃。


回答:

它在Dictionary.add处崩溃。我不太确定这是为什么,有人能发现其中的缺陷吗?

int CostOfNode = CompareNode.TotalCost;SortArray.Add(CostOfNode, CompareNode);

如果CostOfNode对于两个不同的节点是相同的,而这两个节点都被添加到字典中,那么第二个节点会导致崩溃。

参见 Dictionary.Add

ArgumentException

字典中已存在具有相同键的元素。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注