Результат BehaviorSpace - PullRequest
       4

Результат BehaviorSpace

1 голос
/ 19 февраля 2020

Я моделирую классную комнату, чтобы найти общее потребление энергии от приборов классной комнаты. Теперь я хочу запустить симуляцию в BehaviorSpace, чтобы получать энергопотребление, меняя количество учеников в классе.

         globals[
        temp1 a s simulation-timer number-of-seats number-of-lights 
       number-of-fans number-of-acs gap row col x-cor y-cor half half2 
       student-no t-light t-fan t-ac t-energy
              ]
          breed [seats seat]
         breeed [seat-teachers seat-teacher]
         breed [lights light]
         breed [fans fan]
         breed [acs ac ]
         breed [students student ]

         to setup
         clear-all

          ask patches [ set pcolor 9 ]
          set gap floor ((max-pxcor) / (no-of-row-or-col) )
          set half ceiling (gap / 2)
          set half2 floor (gap / 2)
          place-seat-teachers
          place-seats-students
          place-lights
          place-fans
          place-acs
          ask patches with [ pxcor = 3 * gap + half2 ] [ set pcolor 4 ]
          ask patches with [ pxcor = 6 * gap + half2 ] [ set pcolor 4 ]
          create-students-classroom
          reset-ticks
          reset-timer
          end


          to go
          while [simulation-timer < time ] [

          move-students
          set simulation-timer simulation-timer + 1
          tick ]
           stop
            end

            to create-students-classroom                                    
            create-students number-of-students [
             set entry-time random threshold + 1                         ; 
              set random-entry time to each student

            let stu-no sort-on [who] students                          
            foreach stu-no [x -> ask x [ show (word x " -> " entry-time ) 
            ] ]  
            set shape "person"
            set color 3
               ]
           set s sort [who] of seats                                       
          set a first s

          end

           to move-students                                               

           let l length s

           set temp1 simulation-timer
           tick

          ask students [ if ( entry-time = temp1 )                   
              [
    move-to seat a                                          
   set color red
    appliance-on                                             
    show (word temp1 "," l "," a)
    set s remove a s
    set a a + 1
    set l length s
  ]
]
  end

   to appliance-on                                                    

     ask lights with [not l-on? and any? students in-radius 4]
     [ switch-light-on ]
      ask fans with [not f-on? and any? students in-radius 4]
      [ switch-fan-on]
        ask acs with [ not a-on? and any? students in-radius 9]
      [ switch-ac-on]

        stop

         end
         to switch-light-on                                             
         set color green
         set l-on? true
          set light-turned-on simulation-timer
         set light-on-duration light-on-duration + (time - light-turned-on 
          )
            type "light on duration " print light-on-duration
           end

            to-report energy-calculation

           ask lights [ ifelse ( l-on? )  [ set l-energy (light-on- 
            duration * light-wattage) ][ set l-energy 0 ] ]
             ask fans [ ifelse ( f-on? ) [ set f-energy ( fan-on-duration 
            * fan-wattage )] [ set f-energy 0 ] ]
            ask acs [ ifelse ( a-on? ) [ set a-energy (ac-on-duration * 
             ac-wattage) ] [ set a-energy 0 ] ]

             let light-e sum [l-energy] of lights
              let fan-e sum [f-energy] of fans
              let ac-e sum [a-energy] of acs

              set t-light ( light-e / (60000))
              set t-fan ( fan-e / (60000))
              set t-ac ( ac-e / ( 60000 ) )

              show (word "sum of ac energy = " ac-e )

               report ( t-light + t-fan + t-ac )

                  end

В BehaviorSpace: мера выполняется с использованием этих репортеров. Я ставлю расчет энергии. но в таблице все показывает ноль. Почему это происходит?

1 Ответ

2 голосов
/ 20 февраля 2020

Абдулла,

Я не могу запустить ваш код, как вы его предоставили, но я подозреваю, что проблема заключается в вашей go процедуре. BehaviorSpace рассматривает процедуру go как вечную кнопку, то есть она продолжает работать до тех пор, пока число тиков не превысит Time limit или пока она не будет остановлена ​​каким-либо другим пользовательским условием. Более того, BS запускает репортеров, перечисленных в Measure runs using these reporters, только в конце каждой итерации go. Предполагается, что каждая итерация занимает галочку. Однако ваша go процедура выполняется только один раз. while l oop выполняется time раз, но это все в пределах первой (и единственной) итерации go, после которой моделирование останавливается командой stop. Я не уверен, почему вы используете simulation-timer вместо ticks, чтобы следить за временем, но позвольте мне предложить go процедуру, которая будет делать то, что я подозреваю, что вы хотите.

to go    
  move-students
  tick 
  if ticks > time [ stop ]
end

В этом случае go будет продолжать работать, и BS будет сообщать расчет энергии в конце каждой итерации go, пока количество итераций (тиков) не превысит time. Если вы установите Time limit в BS на time, оператор if будет избыточным, но не в том случае, если вы также используете модель за пределами BS. (Если вы работаете со вкладки интерфейса, кнопка go должна быть кнопкой «навсегда».)

У вас также есть избыточный stop в конце вашей процедуры appliance-on.

Возможно, я упустил что-то важное в том, что вы пытаетесь сделать, но, возможно, это поможет вам начать решать вашу проблему.

Чарльз

...