Netlogo:如何要求链接邻居做某事

Netlogo:如何要求链接邻居做某事,netlogo,Netlogo,我在模拟教室。在教室里大约有90个座位,20盏灯,20个风扇和4个空调。我创建了一个学生数,每个学生都有一个指定的随机进入时间。当每个学生在一段随机时间后进入并坐在座椅上时,相应的(半径内)灯或风扇或交流电源打开,学生和半径内设备之间建立链接。每个设备(例如灯、风扇和交流)都有自己的瓦数值。所有学生坐下后,将计算所有风扇、灯和空调的总能耗(KWh) 如何存储每个设备的开启时间,例如(时间减去进入时间),其中时间是总上课时间。因此,之后我可以将每个设备(如风扇)的所有开启时间相加,并将其与瓦特值相

我在模拟教室。在教室里大约有90个座位,20盏灯,20个风扇和4个空调。我创建了一个学生数,每个学生都有一个指定的随机进入时间。当每个学生在一段随机时间后进入并坐在座椅上时,相应的(半径内)灯或风扇或交流电源打开,学生和半径内设备之间建立链接。每个设备(例如灯、风扇和交流)都有自己的瓦数值。所有学生坐下后,将计算所有风扇、灯和空调的总能耗(KWh)

如何存储每个设备的开启时间,例如(时间减去进入时间),其中时间是总上课时间。因此,之后我可以将每个设备(如风扇)的所有开启时间相加,并将其与瓦特值相乘。这是代码的一部分

 globals[
  temp1 simulation-timer number-of-seats number-of-lights number- 
  of-fans number-of-acs ]
 breed [lights light] 
 breed [fans fan]
 breed [acs ac ]
 breed [students student ]

to setup
 ...
...
place-seats-students
place-lights
place-fans
place-acs
create-students-classroom
end

to create-students-classroom                                    
   create-students number-of-students [
   set entry-time random threshold + 1                          
   let stu-no sort-on [who] students                            
   foreach stu-no [x -> ask x [ show (word x " -> " entry-time ) 
   ] ]            
   ask students [
   set shape "person"
   set color 3
   ] ]
  end

to go
    set simulation-timer 0                              
    output-show (word "timer = "simulation-timer )     
    tick
    move-students
    while [simulation-timer < time ] [
    set simulation-timer simulation-timer + 1                       
    output-show (word "timer = "simulation-timer )
 end

 to move-students                                               
      let s sort [who] of seats
      let a first s
      let l length s
      while [ l > (number-of-seats - number-of-students )] [       
      set temp1 simulation-timer
      tick
      tick
      ask students [ if ( entry-time = temp1 ) [
      move-to seat a                                          
      set color red
      ask students
     [create-links-with lights in-radius 5
      create-links-with fans in-radius 5
      create-links-with acs in-radius 9 ]
      show (word "number of links is" count links)

    appliance-on
    store-on-time
    show (word temp1 "," l "," a)
    set s remove a s
    set a a + 1
    set l length s
     ]
   ]
    set simulation-timer simulation-timer + 1                       
    output-show (word "timer = "simulation-timer )]
   end

 to appliance-on

   ask students with [color = red ]
   [ask my-links
   [ask other-end [set color green] ] ]
  stop
end

 to store-on-time
  ask students [ 
    ask link-neighbor fan ifelse it is on [
    let on-time [ time - entry-time ]
    [do nothing]
 ask students [ 
    ask link-neighbor light ifelse it is on [
    let on-time [ time - entry-time ]
    [do nothing]
 end
globals[
temp1模拟计时器座位数灯光数-
风扇的数量[acs的数量]
繁殖[光]
繁殖[粉丝]
品种[acs ac]
繁殖[学生]
设置
...
...
为学生安排座位
点灯
放置风扇
放置acs
创建学生课堂
结束
创建学生课堂
创造学生人数[
设置进入时间随机阈值+1
让斯图不要对学生[谁]有什么意见
foreach stu编号[x->ask x[显示(单词x“->”输入时间)
] ]            
询问学生[
设置形状“人”
设置颜色3
] ]
结束
外带
将模拟计时器设置为0
输出显示(word“timer=”模拟计时器)
打上钩
感动学生
而[模拟计时器<时间][
设置模拟计时器模拟计时器+1
输出显示(word“timer=”模拟计时器)
结束
感动学生
让我们把座位分成几类
让我们先来看看
让l长度为s
而[l>(座位数目-学生人数)][
设置temp1模拟计时器
打上钩
打上钩
询问学生[如果(入学时间=temp1)[
移到a座
设置颜色为红色
询问学生
[创建半径为5的灯光链接
创建与半径为5的风扇的链接
在radius中创建与acs的链接9]
显示(单词“链接数为”计数链接)
应用于
按时存储
显示(单词temp1、l、a)
设置s删除s
设置a+1
设置l长度s
]
]
设置模拟计时器模拟计时器+1
输出显示(word“timer=”模拟计时器)]
结束
利用

用[颜色=红色]询问学生 [询问我的链接 [询问另一端[设置绿色]] 停止 结束 按时存储 询问学生[ 询问链接邻居风扇是否打开[ 准时出租[时间-进场时间] [什么也不做] 询问学生[ 询问链路邻居灯是否亮起[ 准时出租[时间-进场时间] [什么也不做] 结束

如何编写store on time过程,以便以后我能够将所有设备的所有开启时间相加,以计算耗电的KWh。任何帮助都将不胜感激。

如果您需要存储某些内容,则需要为其创建一个变量。因为它们可能会开启、关闭、开启等,我个人将有两个变量每个设备的es(例如,
灯自己的
风扇自己的
等)。对于灯,它们可以被命名为亮起时间、亮起持续时间,对于其他设备也可以被命名为亮起持续时间

这在代码中的工作方式是add

set light-on-time ticks
只要你把灯打开,你就可以

set light-on-duration light-on-duration + ticks - light-on-time + 1

每当你关灯的时候,报告者就发出滴答声。

用[color=red]询问学生[询问我的链接[if(color=green)[将灯亮起持续时间+滴答声-灯亮起时间+1]]但是如果我写这篇文章,它会给出一个错误,说你不能在链接上下文中使用light on duration。模拟计时器实际上是以分钟为单位的上课时间。你可以使用变量模拟计时器,而不是滴答声。如果你在用时间做一些不寻常的事情,原理是一样的。你的链接在做什么?它是怎么做的如果一个新学生坐在一个已经打开的灯附近工作?你需要将你的灯打开/关闭与链接创建分开。然后,当你打开灯时,你
要求
灯设置这些变量值,而不是链接。是的,如果一个新学生坐在一个已经打开的灯附近,我也有问题然后,该灯光将不会添加到灯光打开持续时间,因为它之前已经添加了。因此,我应该这样做:询问学生[询问半径为4的灯光[设置绿色]]而不是:询问学生[颜色=红色][询问我的链接[询问另一端[设置绿色]]?链接的目的是什么?您可以简单地
询问
半径范围内当前关闭的任何灯光
以打开,并在同一代码块中设置开始时间。是的,谢谢我完成了该工作,但在灯光打开持续时间中存在重复,因为当另一个研究开始时,已经打开的灯光会增加灯光打开持续时间nt坐在它旁边。我应该做些什么来防止重复?