Netlogo: Как попросить соседа по ссылке сделать что-то - PullRequest
0 голосов
/ 22 сентября 2019

Я симулирую классную комнату.В классе около 90 мест, 20 ламп, 20 вентиляторов и 4 кондиционера.Я создаю количество учеников, где каждому ученику назначается случайное время входа.Когда каждый ученик входит через произвольное время и садится на место, включается соответствующий (в радиусе) свет или вентилятор или переменный ток, и устанавливается связь между учеником и прибором в радиусе.Каждый прибор (например, свет, вентилятор и переменный ток) имеет собственную мощность.После того, как все учащиеся сядут, общее энергопотребление (в кВтч) будет рассчитано для всех вентиляторов, ламп и кондиционеров.

Как сохранить время включения каждого устройства, например (время минус время входа), где время - это общее время занятий.Так что после этого я могу суммировать все время включения каждого устройства (например, вентилятора) и умножить его на его значение в ваттах.Это часть кода.

 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

Как я могу написать процедуру сохранения времени, чтобы позже я смог суммировать все времена включения для всего устройства для расчетаКВтч потребляется.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 22 сентября 2019

Если вам нужно что-то сохранить, то вам нужно создать переменную для него.Поскольку они могут включаться, выключаться, включаться и т. Д., У меня лично будет две переменные для каждого устройства (например, lights-own и fans-own и т. Д.).Для источников света они могут называться «время включения», «время включения источника света» и аналогично для других.

Способ, которым это работает в коде, заключается в добавлении

set light-on-time ticks

всякий раз, когда вы поворачиваетевключить свет.И имейте

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

всякий раз, когда вы выключаете свет.Репортер ticks - это просто текущее состояние часов.

...