Как сделать авто-прогрессивный узел преемником - PullRequest
0 голосов
/ 04 ноября 2019

Я пытаюсь кодировать автоматическую систему, которая выполняет итерацию от узла к другому , чтобы достичь цели, или удовлетворяет условию . Я не знаю, как я мог продолжить свою программу, по этой причине я здесь прошу предложение достичь моей цели.

Я определил возможные действия , где параметры внутри являются эффектами, которые имеет действие.

    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], truckLocation[0], planeLocation[0], cityLocation[0], 40);
    static  Action fly = new Action("fly",pkg1Location[1], pkg2Location[1], truckLocation[0], planeLocation[1], cityLocation[0], 100);
    static  Action unloadPlaneP1 = new Action("unloadPlaneP1",pkg1Location[2], pkg2Location[1], truckLocation[0], planeLocation[2], cityLocation[1], 45);
    static  Action unloadPlaneP2 = new Action("unloadPlaneP2",pkg1Location[1], pkg2Location[2], truckLocation[0], planeLocation[2], cityLocation[1], 55);
    static  Action loadTruckP1 = new Action("loadTruckP1",pkg1Location[3], pkg2Location[2], truckLocation[0], planeLocation[2], cityLocation[1], 60);
    static  Action loadTruckP2 = new Action("loadTruckP2",pkg1Location[2], pkg2Location[3], truckLocation[0], planeLocation[2], cityLocation[1], 70);
    static  Action drive = new Action("drive",pkg1Location[3], pkg2Location[3], truckLocation[1], planeLocation[2], cityLocation[1], 70);
    static  Action unloadTruckP1 = new Action("unloadTruckP1", pkg1Location[5], pkg2Location[5], truckLocation[2], planeLocation[2], cityLocation[1], 40);
    static  Action unloadTruckP2 = new Action("unloadTruckP2",pkg1Location[4], pkg2Location[4], truckLocation[3], planeLocation[2], cityLocation[1], 35);

После того, как я установил начальное состояние , newState и целевое состояние для итерации

State state = new State(0, pkg1Location[0], pkg2Location[0], truckLocation[0], planeLocation[0], cityLocation[0]);
        State newState = new State(0, pkg1Location[0], pkg2Location[0], truckLocation[0], planeLocation[0], cityLocation[0]);
        State goal = new State(11, pkg1Location[5], pkg2Location[4], truckLocation[3], planeLocation[2], 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;

Как я могу повторить это , пока не будет достигнуто целевое состояние ?

...