【问题标题】:NetLogo turtles in labyrinth迷宫中的 NetLogo 海龟
【发布时间】:2013-11-14 03:57:19
【问题描述】:

我是 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

【问题讨论】:

  • 你的问题到底是什么?除了“为我做我的任务”?您有具体的问题,或需要帮助的具体问题吗?
  • 嗯,正如我之前所说...我知道在 NetLogo 中编程,但我不知道语法..我不知道如何制作一个总是给我的程序同一个迷宫(总是相同的 15 个紫色随机补丁)

标签: netlogo


【解决方案1】:

我可以回答关于总是得到相同的随机迷宫的部分;你想要 random-seed 原语 http://ccl.northwestern.edu/netlogo/5.0/docs/dictionary.html#random-seed 。另请参阅模型库的代码示例部分中的随机种子示例。

至于其余的,为什么不尝试一下,或者一些非常简化的版本,如果您在特定的问题上遇到困难,请发布另一个问题?

我说“它的非常简化的版本”,因为试图一次解决整个大问题通常不是程序员编写程序的方式。相反,最好制作一个您可以解决的问题的较小版本,并让解决方案发挥作用。然后稍微改进一下,让它更像更大的问题,然后让它再次工作。以此类推,越来越接近整个问题的解决方案。

例如,您可能只是从“机器人必须环顾四周并始终被引导到有更多空间的方向”部分开始。看起来您已经有了一些代码,即您的 check 过程。你测试过吗?它工作正常吗?你怎么知道?在继续进行其他部分之前,您应该确信自己已经掌握了很多。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多