Netlogo:如何同时指定最小ID的海龟和第二小ID的海龟?

Netlogo:如何同时指定最小ID的海龟和第二小ID的海龟?,netlogo,Netlogo,如何同时指定最小ID的海龟和第二小ID的海龟?下面是一个示例程序,但它不能很好地工作。特别是“询问min-one-of turtles[who+1]”我认为这个语法可能是错误的,但我不太理解。还有别的办法吗?我可能需要你的建议。多谢各位 globals [ nb-white nb-red ] to setup clear-all reset-ticks end to go ask patch 0 0 [sprout 1] ask min-one-of turtles [wh

如何同时指定最小ID的海龟和第二小ID的海龟?下面是一个示例程序,但它不能很好地工作。特别是“询问min-one-of turtles[who+1]”我认为这个语法可能是错误的,但我不太理解。还有别的办法吗?我可能需要你的建议。多谢各位

globals [ nb-white nb-red ]

to setup
  clear-all
  reset-ticks
end

to go

  ask patch 0 0 [sprout 1]
  ask min-one-of turtles [who] [set color white]   
  ask min-one-of turtles [who + 1] [set color red]

  ask (turtles-on patch 0 0) [
    set nb-white count turtles-here with [color = white]
    set nb-red count turtles-here with [color = red]
  ]

end

使用
[who+1]
作为报告者将使每只海龟报告其
who
数字加1-因此
who
为0的海龟将报告1,而
who
为1的海龟将报告2,依此类推-因此
海龟的
最小值不会改变

如果您必须使用不推荐的
who
号码,您可以尝试:

globals [ nb-white nb-red ]

to setup
  clear-all

  crt 2
  ask first sort turtles [ set color white ] 
  ask item 1 sort turtles [ set color red ]

  set nb-white count turtles with [color = white]
  set nb-red count turtles with [color = red]

  reset-ticks
end
对海龟进行排序
返回一个按升序排列的代理列表-
第一个
将返回最低的
(与
最小一只海龟[who]
相同),
第1项
第二低

编辑:

globals [ nb-white nb-red ]

to setup
  clear-all
  reset-ticks
end

to go
  ask patch 0 0 [sprout 1]
  ask first sort turtles [ set color white ] 
  if count turtles > 1 [
    ask item 1 sort turtles [ set color red ]
  ]

  set nb-white count turtles with [color = white]
  set nb-red count turtles with [color = red]
end

重申(正如尼古拉斯所言),你应该明确地考虑,如果你真的需要使用<代码>谁<代码>数字,这通常是不需要的,这不是很好的实践,并且会引起问题。

< P>使用<代码> [WH+1 ]
作为一名报告员,将让每只海龟报告其
who
数字加1-因此
who
为0的海龟将报告1,而
who
为1的海龟将报告2,依此类推-因此
海龟的
最小值不会改变

如果您必须使用不推荐的
who
号码,您可以尝试:

globals [ nb-white nb-red ]

to setup
  clear-all

  crt 2
  ask first sort turtles [ set color white ] 
  ask item 1 sort turtles [ set color red ]

  set nb-white count turtles with [color = white]
  set nb-red count turtles with [color = red]

  reset-ticks
end
对海龟进行排序
返回一个按升序排列的代理列表-
第一个
将返回最低的
(与
最小一只海龟[who]
相同),
第1项
第二低

编辑:

globals [ nb-white nb-red ]

to setup
  clear-all
  reset-ticks
end

to go
  ask patch 0 0 [sprout 1]
  ask first sort turtles [ set color white ] 
  if count turtles > 1 [
    ask item 1 sort turtles [ set color red ]
  ]

  set nb-white count turtles with [color = white]
  set nb-red count turtles with [color = red]
end

重申(正如尼古拉斯所言),你应该明确地考虑,如果你真的需要使用<代码>谁<代码>数字,这通常是不需要的,这不是很好的练习,并且会引起问题。

卢克的答案是正确的,但是他特别指出,你不应该使用<代码>谁<代码>数字。如果你发现自己想用
who
做任何事情,来这里问另一个问题。卢克的回答是正确的,但他特别正确地指出,你不应该使用
who
数字。如果你发现自己想用
who
做任何事情,来这里问另一个问题。有人很可能会建议一个更好的方法来做事情。谢谢你的回复。这是一个很棒的语法。我在我的实际模型上写下并测试了它。但是,“item”语法中有一个问题规范,同时出现以下运行错误消息。“由于列表[(turtle 0)]的长度只有1,因此没有第一个元素。”也许这个问题是因为我的模型使用了“sprout 1”,而我一直在运行,就像在示例代码中询问它一样)。在这种情况下我该怎么办?谢谢。@goodgest-你说得对,这是因为你一开始只有一只乌龟在第一次叫
go
的时候。如何处理可能取决于您实际希望发生的事情,但最简单的方法可能是将
行包装在
if
语句中,以便仅当有多个海龟时才调用它。请参见编辑以获取快速示例谢谢您的回复。这是一个很棒的语法。我在我的实际模型上写下并测试了它。但是,“item”语法中有一个问题规范,同时出现以下运行错误消息。“由于列表[(turtle 0)]的长度只有1,因此没有第一个元素。”也许这个问题是因为我的模型使用了“sprout 1”,而我一直在运行,就像在示例代码中询问它一样)。在这种情况下我该怎么办?谢谢。@goodgest-你说得对,这是因为你一开始只有一只乌龟在第一次叫
go
的时候。如何处理可能取决于您实际希望发生的事情,但最简单的方法可能是将
行包装在
if
语句中,以便仅当有多个海龟时才调用它。有关快速示例,请参见编辑