如何制作自动进度节点的后继者

我正在尝试编写一个从节点迭代到另一个节点的自动渐进系统,以达到目标或满足条件。我不知道该如何继续我的计划,因此我在这里提出建议以实现目标。

我已经定义了可能的动作,其中的参数是该动作具有的效果。

    static  action loadPlaneP1 = new action("loadPlaneP1",pkg1Location[1],pkg2Location[0],truckLocation[0],planeLocation[0],cityLocation[0],30);
    static  action loadPlaneP2 = new action("loadPlaneP2",pkg1Location[0],pkg2Location[1],40);
    static  action fly = new action("fly",planeLocation[1],100);
    static  action unloadPlaneP1 = new action("unloadPlaneP1",pkg1Location[2],planeLocation[2],cityLocation[1],45);
    static  action unloadPlaneP2 = new action("unloadPlaneP2",pkg2Location[2],55);
    static  action loadTruckP1 = new action("loadTruckP1",pkg1Location[3],60);
    static  action loadTruckP2 = new action("loadTruckP2",pkg2Location[3],70);
    static  action drive = new action("drive",truckLocation[1],70);
    static  action unloadTruckP1 = new action("unloadTruckP1",pkg1Location[5],pkg2Location[5],truckLocation[2],40);
    static  action unloadTruckP2 = new action("unloadTruckP2",pkg1Location[4],pkg2Location[4],truckLocation[3],35);

为迭代设置初始状态 newState 目标状态

State state = new State(0,cityLocation[0]);
        State newState = new State(0,cityLocation[0]);
        State goal = new State(11,cityLocation[1]);

要制定主要逻辑,我首先要检查哪个动作具有更低的费用,然后再考虑是否遵守前提州。如果是,则设置具有动作效果的新状态(数组参数已更新)。选择动作的成本将会增加。

for(int i = 0; i < acts.length; i++) {


            if(acts[i].getactionCost() == getMinValue(costs)) {





            if(acts[i].loadPlaneP1Precondition() == true) {



                     if(acts[i].getactParameter1() != state.getStateParameter1()) {

                         newState.setStateParameter1(acts[i].getactParameter1());
                        }

                     if(acts[i].getactParameter2() != state.getStateParameter2()) {
                         if(acts[i].getactParameter2() != State.pkg2Location[1]) {

                         newState.setStateParameter2(acts[i].getactParameter2());

                         } }

                     if(acts[i].getactParameter3() != state.getStateParameter3()) {

                         newState.setStateParameter3(acts[i].getactParameter3());
                        }

                     if(acts[i].getactParameter4() != state.getStateParameter4()) {

                         newState.setStateParameter4(acts[i].getactParameter4());
                        }

                     if(acts[i].getactParameter5() != state.getStateParameter5()) {

                         newState.setStateParameter5(acts[i].getactParameter5());
                        }

                     acts[i].setactCost(100);
            } 






            if(acts[i].loadPlaneP2Precondition() == true) {

                        System.out.println("POST The first parameter is : " + acts[i].getactParameter1());
                        System.out.println("Precondition satysfied" + " with action name: " + acts[i].name);

                     if(acts[i].getactParameter1() != state.getStateParameter1()) {
                         if(acts[i].getactParameter1() != State.pkg1Location[1]) {

                         newState.setStateParameter1(acts[i].getactParameter1());
                         }}

                     if(acts[i].getactParameter2() != state.getStateParameter2()) {

                         newState.setStateParameter2(acts[i].getactParameter2());
                        }

                     if(acts[i].getactParameter3() != state.getStateParameter3()) {

                         newState.setStateParameter3(acts[i].getactParameter3());
                        }

                     if(acts[i].getactParameter4() != state.getStateParameter4()) {

                         newState.setStateParameter4(acts[i].getactParameter4());
                        }

                     if(acts[i].getactParameter5() != state.getStateParameter5()) {

                         newState.setStateParameter5(acts[i].getactParameter5());
                        }

                  acts[i].setactCost(100);
           } 

            ..........................

完成后,我将过去的节点设置为新节点,并将状态设置为新状态

Node child = new Node("Node "+ i,newState,startNode,acts[i].getactionCost(),acts[i].name);



                            startNode = child;
                            state = newState;

在达到目标状态之前,我该如何重复

adslfly 回答:如何制作自动进度节点的后继者

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3167035.html

大家都在问