Netlogo 询问斑块评估后海龟的行为
我正在NetLogo中创建一个鱼缸样式的模拟。有“猎物”、“捕食者”和“隐藏点” 这一想法是,当捕食者出现在地图上时,猎物将单独执行“隐藏”行为,并前往最近的“隐藏点”——前提是它和“隐藏点”之间没有捕食者 运行hide命令的相关代码Netlogo 询问斑块评估后海龟的行为,netlogo,agent-based-modeling,Netlogo,Agent Based Modeling,我正在NetLogo中创建一个鱼缸样式的模拟。有“猎物”、“捕食者”和“隐藏点” 这一想法是,当捕食者出现在地图上时,猎物将单独执行“隐藏”行为,并前往最近的“隐藏点”——前提是它和“隐藏点”之间没有捕食者 运行hide命令的相关代码 to hide face min-one-of hidingspot [distance myself] set d distance min-one-of hidingspot [distance myself] ask patches in-c
to hide
face min-one-of hidingspot [distance myself]
set d distance min-one-of hidingspot [distance myself]
ask patches in-cone d 80
[ set pcolor yellow
if (any? predators-here)
[ ask prey
[ forward 1
set color red
output-print "DANGER"]]]
forward 1
end
问题是我不知道如何正确使用“ask补丁”中的if语句。因此,当一个猎物发现一个威胁时,所有的猎物都在运行语句的其他部分,而不是单独评估它
我该如何解决这个问题
感谢您的帮助 你要求每一个猎物都要把所有猎物藏起来。如果您从命令“所有猎物都在运行”中删除“询问猎物”,它应该可以正常工作,并且速度会快一点
to hide
face min-one-of hidingspot [distance myself]
set d distance min-one-of hidingspot [distance myself]
ask patches in-cone d 80
[set pcolor yellow]
if (any? predators-here)
[
forward 1
set color red
output-print "DANGER"
]
end
你需要将你要求猎物做的事情与你要求补丁做的事情分开。正如King Ink所说,你是在要求补丁让所有的猎物做一些事情 最简单的方法是为“危险”补丁创建补丁集,然后检查这些补丁上是否有捕食者。要做到这一点,您需要如下内容(请注意,这是一个完整的模型,因此您可以将整个代码复制到一个新模型中并运行它) 我清理了代码中的其他一些东西。我对局部变量d使用了
let
,这样它就不必出现在全局变量中。我要求只使用一次min其中一个,并重复使用,因为否则每次都可以选择不同的隐藏点(如果相同距离有多个)。虽然这一次不会导致错误(因为第二个选择只是为了找到定义相同的距离),但这是一个良好的实践
breed [prey a-prey]
breed [predators predator]
breed [hidingspots hidingspot]
to setup
clear-all
create-predators 1 [setxy random-xcor random-ycor set color red]
create-prey 5 [setxy random-xcor random-ycor set color brown]
create-hidingspots 20
[ setxy random-xcor random-ycor
hide-turtle
ask patch-here [set pcolor green]
]
reset-ticks
end
to go
ifelse any? predators
[ ask prey [hide] ]
[ ask prey [swim] ]
end
to hide ; turtle procedure
let target min-one-of hidingspots [distance self]
let path patches in-cone distance target 80
ask path [ set pcolor yellow ]
if any? predators-on path
[ set color red
output-print "DANGER"
face target
]
forward 1
end
to swim
end
这实际上不起作用,因为修补程序无法继续。但是诊断是正确的,谢谢,我已经治好了。令人尴尬的
breed [prey a-prey]
breed [predators predator]
breed [hidingspots hidingspot]
to setup
clear-all
create-predators 1 [setxy random-xcor random-ycor set color red]
create-prey 5 [setxy random-xcor random-ycor set color brown]
create-hidingspots 20
[ setxy random-xcor random-ycor
hide-turtle
ask patch-here [set pcolor green]
]
reset-ticks
end
to go
ifelse any? predators
[ ask prey [hide] ]
[ ask prey [swim] ]
end
to hide ; turtle procedure
let target min-one-of hidingspots [distance self]
let path patches in-cone distance target 80
ask path [ set pcolor yellow ]
if any? predators-on path
[ set color red
output-print "DANGER"
face target
]
forward 1
end
to swim
end