If statement 我有一个奇怪的问题,在netlogo与一个ifelse声明
我问一个关于网络标志的问题,因为我正在做一个项目。我正在进行群集模拟,但当我尝试使用ifelse语句刺穿其他行为时,但当我将ifelse语句放入其中时,它们不会跟随任何行为,而是移动 代码如下:If statement 我有一个奇怪的问题,在netlogo与一个ifelse声明,if-statement,netlogo,If Statement,Netlogo,我问一个关于网络标志的问题,因为我正在做一个项目。我正在进行群集模拟,但当我尝试使用ifelse语句刺穿其他行为时,但当我将ifelse语句放入其中时,它们不会跟随任何行为,而是移动 代码如下: breed [Birds Bird] breed [Hawks Hawk] to Setup clear-all reset-ticks create-Birds Number_of_Birds[ setxy random-xcor random-ycor] create-Ha
breed [Birds Bird] breed [Hawks Hawk]
to Setup clear-all reset-ticks create-Birds Number_of_Birds[
setxy random-xcor random-ycor] create-Hawks Number_of_Hawks[
setxy random-xcor random-ycor] end
to Start ask Birds[
set color white
ifelse (Hawks in-radius Reaction_Distance = 0)
[
set heading Migration_Direction
let closest-Birds max-n-of Target_Group_Size (other Birds) [distance myself]
let Group_Heading mean [heading] of closest-Birds
let centroidx mean [xcor] of closest-Birds
let centroidy mean [ycor] of closest-Birds
set heading (Migration_Direction +( attraction * (Group_Heading)))
fd 1
set heading ( attraction * (towardsxy centroidx centroidy) )
fd 1
]
[
let Closest_Hawks max-n-of 1 (Hawks) [distance myself]
set heading (mean [heading] of Closest_Hawks + 180)
fd 1
] ] end
让我们看看NetLogo字典中的定义: 报告一个agentset,该agentset仅包括原始agentset中与调用者的距离小于或等于number的代理 它说在radius中报告了一个代理集 现在让我们来看看你的Ifter条件:
ifelse (Hawks in-radius Reaction_Distance = 0)
定义告诉我们,半径范围内的鹰反应距离部分报告一个代理集,即半径范围内的所有鹰。然后,=符号将该代理集与数字0进行比较。但是代理集不是一个数字!它永远不可能等于零
我想你想要的是比较半径内鹰的数量和0的数量
一种方法是使用原语,该原语报告agentset中的代理数:
ifelse (count Hawks in-radius Reaction_Distance = 0)
那会有用的,但我不会那样写。NetLogo具有更好的原语,您可以这样使用:
ifelse (not any? Hawks in-radius Reaction_Distance)
这以更清晰的方式表达了你的意图
您还可以颠倒ifelse子句的顺序,以避免出现以下情况:
让我们看看NetLogo字典中的定义: 报告一个agentset,该agentset仅包括原始agentset中与调用者的距离小于或等于number的代理 它说在radius中报告了一个代理集 现在让我们来看看你的Ifter条件:
ifelse (Hawks in-radius Reaction_Distance = 0)
定义告诉我们,半径范围内的鹰反应距离部分报告一个代理集,即半径范围内的所有鹰。然后,=符号将该代理集与数字0进行比较。但是代理集不是一个数字!它永远不可能等于零
我想你想要的是比较半径内鹰的数量和0的数量
一种方法是使用原语,该原语报告agentset中的代理数:
ifelse (count Hawks in-radius Reaction_Distance = 0)
那会有用的,但我不会那样写。NetLogo具有更好的原语,您可以这样使用:
ifelse (not any? Hawks in-radius Reaction_Distance)
这以更清晰的方式表达了你的意图
您还可以颠倒ifelse子句的顺序,以避免出现以下情况: