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