Debugging netlogo中的while循环调试
我在理解网络徽标项目中两个连续while循环出现的错误时遇到困难Debugging netlogo中的while循环调试,debugging,while-loop,netlogo,Debugging,While Loop,Netlogo,我在理解网络徽标项目中两个连续while循环出现的错误时遇到困难 ;;;;;;;;;;;;;;;;;;;;;;;; ;;; Global variables ;;; ;;;;;;;;;;;;;;;;;;;;;;;; globals [it] ;;;;;;;;;;;;;;;;;;;;;; ;;; Breedin agents ;;; ;;;;;;;;;;;;;;;;;;;;;; breed [houses house] breed [firms firm] ;
;;;;;;;;;;;;;;;;;;;;;;;;
;;; Global variables ;;;
;;;;;;;;;;;;;;;;;;;;;;;;
globals [it]
;;;;;;;;;;;;;;;;;;;;;;
;;; Breedin agents ;;;
;;;;;;;;;;;;;;;;;;;;;;
breed [houses house]
breed [firms firm]
;;;;;;;;;;;;;
;;; Setup ;;;
;;;;;;;;;;;;;
to setup
clear-all
reset-ticks
create-firms F
create-houses H
;; sets position of the firms in the space for better visualisation
set it 0
while [it < F ]
[ask firm it [
set color yellow
set heading it * 360 / F
fd 5
]
set it it + 1
]
;; sets position of the households in the space for better visualisation
set it 0
while [it < H ]
[ask house it [
set color yellow
set heading it * 360 / H
fd 15
]
set it it + 1
]
指向将其放置在代码中
请注意,当我只运行第一个while循环时,一切正常
我想在网络徽标中使用while循环时有一些我不理解的地方
为什么第二个循环似乎认为我打电话给公司,虽然我要求打电话给房子?<李>
- 有没有更好的方法来实现网络徽标中的while循环
非常感谢您的帮助发生了什么事?
who
NetLogo中的数字是从所有海龟的相同序列中分配的,与它们的品种无关。如果您这样做:
create-firms 1
create-houses 1
然后你将拥有公司0
和一号房屋
,你也可以称之为海龟。例如,在命令中心:
observer> show turtle 0
observer: (firm 0)
observer> show turtle 1
observer: (house 1)
有这样的唯一标识符是有意义的,因为海龟的品种是非常短暂的。它可以更改为:
observer> ask firm 0 [ set breed houses ]
observer> show turtle 0
observer: (house 0)
尽管品种发生了变化,海龟仍然保持了它的who
编号
为什么第二个循环似乎认为我打电话给公司,虽然我要求打电话给房子?
你所做的就相当于把海龟(一家公司)扔到房子里。这就是NetLogo抱怨公司0
不是房子的原因
更好的方法
有没有更好的方法来实现网络徽标中的while循环
是:在
时不要使用!更严重的是:在
时使用,通常是不必要的。通常有更好的方法做事情
另外,一般来说,不要使用who
数字来表示任何事情。如果你想一次对付很多海龟,就用海龟套装。如果要跟踪海龟,请直接存储对它的引用(例如,将我的公司设置为公司之一
)。如果你发现自己想使用who
号码,请后退一步,重新思考你的问题:几乎可以肯定还有另一种方法
你想对你所有的房子做点什么?问问他们
ask houses [
set color yellow
fd 15
]
然而,上面的代码片段没有提到一件事:您对均匀分布的海龟的要求。但是您可以通过使用创建海龟来实现这一点。使用它,您的整个设置
将变成:
clear-all
create-ordered-firms F [
set color yellow
fd 15
]
create-ordered-houses H [
set color yellow
fd 15
]
但是如果你真的需要索引呢?
但是如果createordered-
不存在,或者如果您想做一些类似的事情,需要某种索引,该怎么办?您仍然不需要,而:和的组合将使您达到以下目标:
create-houses H
(foreach sort houses n-values H [ ? * 360 / H ] [
ask ?1 [
set color yellow
set heading ?2
fd 15
]
])
(我们通常将房屋
海龟集转换为一个列表,但房屋
的[self]如果您希望它们被洗牌,也可以使用。)
这段代码一开始可能看起来很奇怪,但实际上它是NetLogo中非常常见和有用的模式。它用你想分配给它的索引“拉链”你想做的事情。与while循环相比,它还有一些很好的优点:没有“逐个关闭”的错误,没有额外的变量,也没有忘记递增计数器或意外改变计数器的风险。非常感谢@Nicolas Payette。非常清楚和深刻的回答。
create-houses H
(foreach sort houses n-values H [ ? * 360 / H ] [
ask ?1 [
set color yellow
set heading ?2
fd 15
]
])