Итеративное углубление поиска не прекращается - PullRequest
0 голосов
/ 28 октября 2019

Я пытался реализовать алгоритм поиска IDS. Тем не менее, это не заканчивается. newStn - это начальный SearchTreeNode, который я помещаю в стек в начале каждой итерации. Затем внутри цикла while я проверяю, пуст ли стек, содержащий узлы, если это так, то maxDepth увеличивается, и я начинаю с начала и перерываю цикл while. В случае, если стек не пустой, моя логика - вставить первый элемент в стек и проверить, достигнута ли цель или нет. Если это не так, я добавляю дочерние элементы в стек только в том случае, если они находятся на глубине, меньшей или равной maxDepth. Тем не менее, мой код работает вечно. Может ли кто-нибудь дать мне подсказку, что я могу делать неправильно, учитывая, что мой код прекрасно работает для DFS

case "ID":  
    int maxDepth = 1;
    boolean flag = true;
    for (int i=0;i<maxDepth;i++) {
        stackNodes.push(newStn);
        while (flag) {
            if (stackNodes.isEmpty()) {
                maxDepth+=1;
                break;
            } else {
                SearchTreeNode node = stackNodes.pop();
                if (GoalTest(node.state)) {
                    System.out.println(PathCost(node)+";"+node.depth);
                    flag = false;
                    return node;
                } else {

                    for (int y = 0; y < sp.operators.length; y++) {

                        State egs = sp.transition(sp.operators[y], node); // get the state
                        if (egs == null) {

                        } else {

                            int depthchild = node.depth + 1;
                            int d = node.state.cost;
                            if(depthchild<=maxDepth-1) {

                                SearchTreeNode searchtreenode = new SearchTreeNode(egs, node, sp.operators[y],
                                        depthchild, d);
                                stackNodes.push(searchtreenode);
                            }

                        }
                    }

                }
            }
        }
    }
break;
...