我是NetLogo编程的新手,我需要帮助。这只是我的第二次任务,我做了大部分工作。我不得不让机器人走进迷宫。机器人只能在黑色斑块上行走(紫色斑块代表障碍物)。机器人可以向前,向后,向左和向右前进,它必须前往目标。当谈到目标时,它必须停止。 在作业的第一部分,我不得不制作程序'迷宫',将挑选15个随机斑块并用紫色涂抹(紫色代表障碍物),包括一个代表目标的绿色斑块。每当我打电话给那个程序,它就给了我不同的迷宫。我需要帮助两件事:
我必须制作一个新的程序,总是给我同样的迷宫(总是用紫罗兰色的15个随机贴片相同)
我必须制作一个新程序'搜索',让机器人走到目标,因为我只调用一次该程序。机器人必须环顾四周,并始终指向有更多空间的方向。如果在他周围的每个方向都有相同数量的免费补丁,机器人必须随机选择它将到达目标的方向。当谈到目标时,它必须停止。
这是我的代码:
breed [robots robot]
robots-own [
target
zforward
zright
zleft]
to paint-walls
ask patches with
[(pxcor = max-pxcor) or (pxcor = min-pxcor) or (pycor = max-pycor) or (pycor =
min-pycor)]
[ set pcolor violet]
end
to labyrinth
ask n-of 15 patches with[ pcolor != violet ] [set pcolor violet]
ask n-of 1 patches with [pcolor != violet ] [ set pcolor green]
end
to create-agent
set-default-shape robots "robot"
ask patch 5 5 [ sprout-robots 1 ]
ask robots [
set heading 0
set color grey
set target false]
ask robots [ask patch-here [set pcolor black ] ]
end
to setup
clear-all
paint-walls
labyrinth
create-agent
end
to forward
ask robot 0 [if [pcolor] of patch-ahead 1 = black or [pcolor] of patch-ahead 1 = green
[fd 1]]
check
end
to backward
ask robot 0 [if [pcolor] of patch-ahead -1 = black or [pcolor] of patch-ahead 1 =
green[back 1 ]]
check
end
to rot-right
ask robot 0 [right 90 ]
end
to rot-left
ask robot 0 [left 90 ]
end
to right
ask robot 0[rot-right
if [pcolor] of patch-ahead 1 = black or [pcolor] of patch-ahead 1 = green[
forward]]
check
end
to left
ask robot 0 [rot-left
if [pcolor] of patch-ahead 1 = black or [pcolor] of patch-ahead 1 = green[
forward]]
check
end
to check-target
ask robot 0[ifelse [pcolor = green ] of patch-here
[set target true]
[set target false]]
end
to check-forward
ask robot 0 [ifelse [pcolor] of patch-ahead 1 = black or [pcolor] of patch-ahead 1 =
green
[ifelse [pcolor] of patch-ahead 2 = black or [pcolor] of patch-ahead 2 = green
[set zforward 2]
[set zforward 1]]
[set zforward 0]]
end
to check-right
ask robot 0[ifelse [pcolor = black] of patch-right-and-ahead 90 1[
ifelse [pcolor = black] of patch-right-and-ahead 90 2
[set zright 2]
[set zright 1]]
[set zright 0]]
end
to check-left
ask robot 0[ifelse [pcolor = black] of patch-left-and-ahead 90 1[
ifelse [pcolor = black] of patch-left-and-ahead 90 2
[set zleft 2]
[set zleft 1]]
[set zleft 0]]
end
to check
check-forward
check-right
check-left
check-target
end
答案 0 :(得分:0)
我可以回答关于总是得到同样的随机迷宫的部分;你想要random-seed
原语http://ccl.northwestern.edu/netlogo/5.0/docs/dictionary.html#random-seed。另请参见模型库的代码示例部分中的随机种子示例。
至于其余部分,为什么不试一试它,或者它的一些非常简化的版本,如果你遇到某些特定的东西,发布另一个问题?
我说“非常简化的版本”因为试图立即解决整个大问题通常不是程序员如何编程的。相反,最好是制作一个可以解决的问题的较小版本,并使解决方案正常工作。然后稍微改进一下,使它更像是一个更大的问题,并让它再次起作用。等等,越来越接近整个事物的解决方案。
例如,您可能只是从“机器人必须环顾四周并始终指向有更多空间的方向”部分开始。看起来你已经有了一些代码,即你的check
程序。你测试过吗?它运作正常吗?你怎么知道的?在进入其他部分之前,你应该确信自己已经有了这么多。