我正在尝试编写一个从节点迭代到另一个节点的自动渐进系统,以达到目标或满足条件。我不知道该如何继续我的计划,因此我在这里提出建议以实现目标。
我已经定义了可能的动作,其中的参数是该动作具有的效果。
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;
在达到目标状态之前,我该如何重复?