我有一个Netlogo问题。如果我有两种不同品种的海龟,那么一个品种的特定数量的变量是否可以变成另一品种的变量?
这是我的思路。我想模拟多个家庭的用水量,但家庭的用水需要依赖于a)房屋的固定值(如水龙头用的水)* b)水龙头的使用频率人。每个家庭包含1个或更多人(人),使用频率可能因人而异。
使用两只海龟品种的想法可以让我看到一个品种的决定如何影响另一个品种。
这是我的伪代码,用于帮助说明我在想什么(不打算成为工作代码)
globals []
breed [People person]
breed [Community household]
People-own [frequency]
Community-own [waterusefacuet HouseholdWaterUse]
;; =================================================================================================================
;; =================================================================================================================
to setup
clear-all
HouseholdCreation
PersonCreation
reset-ticks
end
to go
ask Community [WaterConsumption]
tick
end
;; =================================================================================================================
;; =================================================================================================================
to HouseholdCreation
ask patches [ sprout-Community n of 1 [
set size 1.0 set shape "square" set color blue
set waterusefacuet (1)
] ]
end
to PersonCreation
ask Community [ hatch-People 1 [
set size 0.5 set shape "circle" set color red
set frequency (1 + random 4)
]]
end
to WaterConsumption
Set HouseholdWaterUse (waterusefacuet * (frequency * # of people) )
end
答案 0 :(得分:2)
为什么不简单地将每个补丁都设为一个家庭,让每个补丁都有一个或多个海龟(人),然后将家庭因素计算为补丁因子?为了定义社区,可以将补丁放入区域(例如,如果pxcor> = 5并且pxcor< = 8且pycor> = 3并且pycor< = 6设置区域1)< ==并不意味着代码,只是这个想法。
您可以设置修补程序大小以使每个修补程序变小,并指定一个较大的修补程序区域。
答案 1 :(得分:2)
一个品种的指定数量的变量总和可以变成另一个品种的变量吗?
绝对。
snipsnip以获得澄清:在我的代码中,我不会让居住在家庭中的人的用水成为该家庭的用水量变量。通常我建议不要让一个(或多个)代理的状态成为另一个变量的状态 - 除非有一个非常好的理由。让状态相互依赖是危险的,因为您始终必须确保在代理之间同步值。更重要的是,它通常是不必要的。在我的解决方案中,每个人都属于一个家庭,当家庭计算其总用水量时,它会要求所有居民在当天向他们发送使用,然后返回所有这些数字的总和。我希望这是有道理的。如果没有,请询问。
* LT; / snipsnip>
您需要使用of
关键字。 of
允许您从一个或多个单个代理的上下文/透视图直接访问变量。所以,假设我们有家庭和人,而人们(因为我们都有不同的用水习惯)有一定的水龙头使用频率。事实上,我们可以让人们每天从他们独特的正态分布中抽取他们使用的水量。我们这样做:
breed [people person]
breed [households household]
people-own [
mean-use-per-day ;; mean use per day
sd-use-per-day ;; standard dev per day
my-household ;; the household to which a person belongs
]
to setup
create-households 10 [
hatch-people random 4 + 1 [ ;; between 1 and 4 people in a household
set mean-use-per-day random 5 + 5 ;; mean 5-9
set sd-use-per-day random-float 3 ;; sd 0.00-2.99
set my-household myself ;; we set the person's household to the household that hatched them
]
]
to-report household-water-use ;; household reporter
report sum [random-normal mean-use-per-day sd-use-per-day] of people with [my-household = myself] ;; this creates a list of water uses based on the random use of each person in the household.
end
为了运行此代码,您只需调用
即可show [household-water-use] of households
来自指挥中心。这将为您提供每个家庭的用水清单。或者,如果您想在一个随机的日子里看到一个家庭的用水量,您可以尝试
show [household-water-use] of one-of households