命令使一些(不是所有)移动的海龟停止移动以响应满足条件
Command to make some (not all) moving turtles stop moving in response to satisfying a condition
netlogo 中是否有一个命令允许一些(1 个或更多)而不是所有(与 stop
命令一样)在满足给定条件时停止移动中间模拟?
使用 stop
可能不是您所描述的最好的 - 它是一个原语,它只是退出当前过程并且与海龟行为没有直接关系,除了您对其进行编程的目的。尽管如此,您确实可以对单个海龟使用停止。使用此设置:
to setup
ca
crt 5 [
set color green
]
reset-ticks
end
在这个简单的例子中,所有只海龟将首先检查它们是否是红色的,如果是,它们将stop
并退出go-stop
程序。如果不是,他们将完成程序。
to go-stop
ask turtles [
if color = red [
stop
]
rt random 60 - 30
fd 1
if xcor < -10 [
set color red
]
]
end
这很好,但不如这个不使用停止的例子那么有效;这个只处理仍然能够移动的海龟(因为它们是绿色的):
to go
ask turtles with [ color = green ] [
rt random 60 - 30
fd 1
if xcor < -10 [
set color red
]
]
end
编辑:
试试这个版本,您可以在其中使用 turtles-own
变量 allowed-to-move?
作为将要移动的海龟与要静止的海龟分开的方法。同样,我没有使用 stop
,因为我认为这不是解决此问题的正确方法,但如果您愿意,可以修改以下示例以像上面的示例一样使用 stop
。另外-你说 "if that number exceeds a 0.01 for any turtle that turtle should stop moving" 但在这个例子中,如果海龟 select 一个随机数 低于 0.01,海龟就会停止,因为我使用的海龟很少,否则几乎所有的海龟会在一两个刻度内停止。无论如何,使用与以前大致相同的设置,但适应新的 turtles-own
变量:
turtles-own [ allowed-to-move? ]
to setup
ca
crt 5 [
set allowed-to-move? true
]
reset-ticks
end
现在只要满足您选择的条件,您就可以让海龟将它们的 allowed-to-move?
更改为 false
。在这个例子中,海龟将 select 一个介于 0 和 1 之间的随机数 - 如果该数字小于 0.01,它们 set
它们的 allowed-to-move?
到 false
,这意味着它们将不满足条件 with [ allowed-to-move? ] ...
下一次报价。因此,一旦乌龟停止移动,它将不再移动。
to go
ask turtles with [ allowed-to-move? ] [
rt random 60 - 30
fd 1
if random-float 1 < 0.01 [
set allowed-to-move? false
]
]
tick
end
Luke 的回答解决了您的具体问题,但根据评论中的附加信息,我认为您可能需要以下内容:
to go
ask turtles
[ if random-float 1 < 0.1 [ <move function ]
]
end
如果他们应该永远不再移动,那么最简单的方法是创建一个变量来存储他们是否完成并执行类似的操作:
to go
ask turtles with [!finished?]
[ if-else random-float 1 < 0.1
[ <move function ]
[ set finished? TRUE ]
]
end
netlogo 中是否有一个命令允许一些(1 个或更多)而不是所有(与 stop
命令一样)在满足给定条件时停止移动中间模拟?
使用 stop
可能不是您所描述的最好的 - 它是一个原语,它只是退出当前过程并且与海龟行为没有直接关系,除了您对其进行编程的目的。尽管如此,您确实可以对单个海龟使用停止。使用此设置:
to setup
ca
crt 5 [
set color green
]
reset-ticks
end
在这个简单的例子中,所有只海龟将首先检查它们是否是红色的,如果是,它们将stop
并退出go-stop
程序。如果不是,他们将完成程序。
to go-stop
ask turtles [
if color = red [
stop
]
rt random 60 - 30
fd 1
if xcor < -10 [
set color red
]
]
end
这很好,但不如这个不使用停止的例子那么有效;这个只处理仍然能够移动的海龟(因为它们是绿色的):
to go
ask turtles with [ color = green ] [
rt random 60 - 30
fd 1
if xcor < -10 [
set color red
]
]
end
编辑:
试试这个版本,您可以在其中使用 turtles-own
变量 allowed-to-move?
作为将要移动的海龟与要静止的海龟分开的方法。同样,我没有使用 stop
,因为我认为这不是解决此问题的正确方法,但如果您愿意,可以修改以下示例以像上面的示例一样使用 stop
。另外-你说 "if that number exceeds a 0.01 for any turtle that turtle should stop moving" 但在这个例子中,如果海龟 select 一个随机数 低于 0.01,海龟就会停止,因为我使用的海龟很少,否则几乎所有的海龟会在一两个刻度内停止。无论如何,使用与以前大致相同的设置,但适应新的 turtles-own
变量:
turtles-own [ allowed-to-move? ]
to setup
ca
crt 5 [
set allowed-to-move? true
]
reset-ticks
end
现在只要满足您选择的条件,您就可以让海龟将它们的 allowed-to-move?
更改为 false
。在这个例子中,海龟将 select 一个介于 0 和 1 之间的随机数 - 如果该数字小于 0.01,它们 set
它们的 allowed-to-move?
到 false
,这意味着它们将不满足条件 with [ allowed-to-move? ] ...
下一次报价。因此,一旦乌龟停止移动,它将不再移动。
to go
ask turtles with [ allowed-to-move? ] [
rt random 60 - 30
fd 1
if random-float 1 < 0.01 [
set allowed-to-move? false
]
]
tick
end
Luke 的回答解决了您的具体问题,但根据评论中的附加信息,我认为您可能需要以下内容:
to go
ask turtles
[ if random-float 1 < 0.1 [ <move function ]
]
end
如果他们应该永远不再移动,那么最简单的方法是创建一个变量来存储他们是否完成并执行类似的操作:
to go
ask turtles with [!finished?]
[ if-else random-float 1 < 0.1
[ <move function ]
[ set finished? TRUE ]
]
end