【问题标题】:Two Turtles Breeds _ one breed is the variable of the other?两只乌龟品种_一个品种是另一个品种的变量?
【发布时间】:2016-08-03 09:33:21
【问题描述】:

我有一个关于 Netlogo 的问题。如果我有两种不同品种的海龟,一个品种的指定数量的变量之和可以成为另一个品种的变量吗?

这是我的思路。我想模拟多个家庭的用水量,但一个家庭的用水量需要取决于 a)房子的固定值(如水龙头使用的水)* b)a 使用水龙头的频率人。每个家庭包含 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

【问题讨论】:

    标签: netlogo


    【解决方案1】:

    为什么不简单地把每个小块做成一个家庭,让每个小块有一只或多个乌龟(人),然后将家庭因子计算为小块因子?要定义社区,可以将补丁放入区域(例如,如果 pxcor >= 5 和 pxcor =3 和 pycor

    您可以设置补丁大小以使每个补丁变小并指定一个大补丁区域。

    【讨论】:

      【解决方案2】:

      一个品种的指定数量的变量之和可以成为另一个品种的变量吗?

      当然。

      澄清摘要:在我的代码中,我不让居住在一个家庭中的人的用水量成为该家庭的用水量变量。通常我会建议不要让一个(或多个)代理的状态成为另一个变量的状态的解决方案 - 除非有很好的理由。让状态相互依赖是危险的,因为您始终必须确保在代理之间同步值。更重要的是,这通常是不必要的。在我的解决方案中,每个人都属于一个家庭,当这些家庭计算其总用水量时,它会要求所有居民向他们发送当天的用水量,然后返回所有这些数字的总和。我希望这是有道理的。如果没有,请询​​问。

      *

      您需要使用 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
      

      【讨论】:

      • 嘿,效果很好,谢谢您的建议。
      • 实际上,我确实有一个后续问题。一个家庭中的人是否有可能知道他们在哪个家庭?我的意思是my-household 是一个people 变量,那个人可以和那个房子通信吗? of household (my-household)
      • 可以,尽管您最后发布的代码实际上没有意义。 my-household people-variable 包含对家庭代理的引用,因此您可以执行ask one-of people [ ask my-household [ set size 10 ] ] 之类的操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-28
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 2017-09-27
      • 1970-01-01
      相关资源
      最近更新 更多