我正在实施一种随机鼠标算法来探索迷宫。一段时间后算法陷入无限循环。我对它进行了调试,似乎卡在通道之间来回徘徊。
请看一下我的算法实现。
这是我的代码:方向是相对于机器人的。
public boolean drive2Exit() throws Exception {
Turn[] turn = {Turn.LEFT, Turn.RIGHT};
while (!robot.isAtGoal() && robot.getBatteryLevel() != 0) {
if (robot.distanceToObstacle(Direction.FORWARD) != 0) {
try {
robot.move(1);
} catch (Exception e) {
}
} else {
int index = randomGenerator.nextInt(turn.length);
try {
robot.rotate(turn[index]);
} catch (Exception e) {
}
}
}
if (robot.isAtGoal())
return true;
return false;
}
答案 0 :(得分:3)
假设你有一个T形通道:
┌───────┐
│ │
└──┐ ┌──┘
你的鼠标进入它,看到一堵墙,然后变成了T的一面。
┌───────┐
│ ┌> │
└──┐ ┌──┘
然后它撞到了那边的墙壁。它转向 - 无论是左还是右。仍然看到一堵墙。所以它再次转向 - 直到它最终倒退。到目前为止一切都很好。
┌───────┐
│ <-│
└──┐ ┌──┘
但是,由于它没有看到墙,它将一直向前,直到T的另一侧。同样会发生,一遍又一遍。
┌───────┐
│-> │
└──┐ ┌──┘
你的程序没有任何选项会导致它决定转回T的腿,因为当他到达那里时,它前面没有障碍,为什么要转??/ / p >
┌───────┐
│ ↴ │ ** This option doesn't exist **
└──┐ ┌──┘