@Override
    protected boolean doStep() {
        double minDeltaCost = Double.MAX_VALUE;
        Move11 bestMove = null;
        boolean moveFound = false;

        Set<Move11> moves = generator.getMoves();
        for (Move11 move : moves) {
            if (move.getDeltaCost() < minDeltaCost &&
                move.getDeltaInfIndex() == 0) {
                /* new move candidate */
                bestMove = move;
                minDeltaCost = move.getDeltaCost();
                moveFound = true;
            }
        }
        if (moveFound && minDeltaCost < - 0.1) {
            generator.apply(bestMove);
            setBestSolution(solution);
            return true;
        }
        return false;
    }