MultiAgentPathFinding icon indicating copy to clipboard operation
MultiAgentPathFinding copied to clipboard

k>2个agent同时占用某个vertix的情况,以及分裂子node的best node选择

Open StetroF opened this issue 1 year ago • 1 comments


你好!最近在看cbs算法,看了cbs文献后发现你的代码和文献似乎不太一样, 首先第一个就是没考虑到k>2个,比如3个agent的原始path同时占用一个点的情况啦~,也许是因为demo过程中这种情况比较少所以没考虑吗 `

        // console.log("constraint_dict:", constraint_dict);
        var constraint_dict = this.env.createConstraintFromConflict(conflict);

        //根据冲突分裂结点
        for (var agent in constraint_dict) {
            var newNode = _.cloneDeep(p);
            newNode.constraint_dict[agent].addConstraint(constraint_dict[agent]);

            this.env.constraint_dict = newNode.constraint_dict; //切换环境
            // newNode.solution = this.env.calcSolution(); //重新计算路径解
            newNode.solution = this.env.calcOneSolution(p.solution, agent)

            console.log("newNode:", newNode);

            if (!newNode.solution) {
                continue;
            }
            newNode.cost = this.env.calcSolutionCost(newNode.solution);

            console.log("newNode:", newNode);
            console.log("cost:", newNode.cost);

            if (!this.isInArray(this.openSet, newNode)) {
                this.openSet.push(newNode);
            }


        }

`

第二的话,如上图,我们现在只考虑两个agent的情况,当发现conflict时,你使用createConstraintFromConflict得到一组分裂的约束和子node后,你的for循环是把两个node都放入到this.openset中,但是,论文原文是说,当得到两个node后,会各自用自己的约束计算path,并取两个node中cost更小的那个node,加入到this.openset中,这里是不是可以优化的呢。

StetroF avatar Nov 29 '24 07:11 StetroF

呃呃,重新看了下,while循环时会找cost最小的那个node

你好!最近在看cbs算法,看了cbs文献后发现你的代码和文献似乎不太一样, 首先第一个就是没考虑到k>2个,比如3个agent的原始path同时占用一个点的情况啦~,也许是因为demo过程中这种情况比较少所以没考虑吗 `

        // console.log("constraint_dict:", constraint_dict);
        var constraint_dict = this.env.createConstraintFromConflict(conflict);

        //根据冲突分裂结点
        for (var agent in constraint_dict) {
            var newNode = _.cloneDeep(p);
            newNode.constraint_dict[agent].addConstraint(constraint_dict[agent]);

            this.env.constraint_dict = newNode.constraint_dict; //切换环境
            // newNode.solution = this.env.calcSolution(); //重新计算路径解
            newNode.solution = this.env.calcOneSolution(p.solution, agent)

            console.log("newNode:", newNode);

            if (!newNode.solution) {
                continue;
            }
            newNode.cost = this.env.calcSolutionCost(newNode.solution);

            console.log("newNode:", newNode);
            console.log("cost:", newNode.cost);

            if (!this.isInArray(this.openSet, newNode)) {
                this.openSet.push(newNode);
            }


        }

`

第二的话,如上图,我们现在只考虑两个agent的情况,当发现conflict时,你使用createConstraintFromConflict得到一组分裂的约束和子node后,你的for循环是把两个node都放入到this.openset中,但是,论文原文是说,当得到两个node后,会各自用自己的约束计算path,并取两个node中cost更小的那个node,加入到this.openset中,这里是不是可以优化的呢。

StetroF avatar Nov 29 '24 07:11 StetroF