Я хочу, чтобы спрос увеличивался на единицу только тогда, когда энергия батареи достигает определенного значения - PullRequest
0 голосов
/ 13 апреля 2020
globals [ demand1 stimer energy_c_evehicle1 energy_b_evehicle1 scaling_factor]
breed[endusers1 enduser1]
to setup
  clear-all
  reset-timer
  reset-ticks
  set stimer 0
  world_scaling
  create-clusters
create-enddistributor
  dec_timer
   set energy_b_evehicle1 5 * 1.56

to create-clusters
   ask patches with [pxcor <= -70 and  pycor <= 30 and pycor > 20]   [set pcolor green]
  ask patches with [pxcor = -70 and pycor = 25] [set plabel "cluster 1"]
end

to  create-enddistributor
  ask patches with [pxcor = -69 and pycor = 25] [set pcolor brown]
end

to world_scaling
  set scaling_factor (world-width / (world_scale * 1000)) ;; patches per meter
end



to create_endusers1
  create-endusers1 numcluster1
  [
    move-to one-of patches with [ pcolor = green ]
    set color white
    set shape "triangle"
    set size 2
    ]
end
to call_dist1
  foreach sort endusers1 [ ?1 ->
    ask ?1
    [

     set demand1 demand1 + 1

    ]
  ]
end

to calculate_endusers1

    every 1 [ ask endusers1[ set energy_c_evehicle1  avgspeed_evehicle * 0.147]];  each evehicle consumes
    every 1 [ set energy_b_evehicle1  energy_b_evehicle1 - energy_c_evehicle1]; energy left in battery
                                                                  ; each battery= 1.56kWh, 5 such battery needed
end
to demand_battery
 ask endusers1
  [if energy_b_evehicle1 < 1.56 [call_dist1]]
end
to dec_timer
  every 1
  [
   set stimer stimer + 1
  ]
end

to-report timer-expired?
   report ( stimer >= 24 )

end


to go

  calculate_endusers1
 demand_battery
  dec_timer

  tick

if  timer-expired? [ stop]
end

В моем моделировании я строю солнечную электростанцию. Я хочу, чтобы спрос увеличивался на единицу для каждого конечного пользователя1, если энергия _b _evehicle1 <1.56. Но здесь спрос увеличивается на 1, каждый тик после energy_b_evehicle1 ниже 1,56. Я не хочу, чтобы спрос продолжал увеличиваться с каждым тиком, я хочу, чтобы он увеличивал спрос только один раз после того, как энергия достигла определенного значения. Как я могу связать количество тиков с реальным временем в моей симуляции? Пожалуйста, помогите мне с этим. </strong>

1 Ответ

1 голос
/ 15 апреля 2020

Мне нужно сделать некоторые предположения о структуре вашей модели. Во-первых, кажется, что energy_c_evehicle1, energy_b_evehicle1 и demand1 являются переменными, которые относятся к батарее каждого endusers1. Следовательно, они должны быть определены как endusers1-own переменные, а не как глобальные переменные. (Как и глобальные значения, каждый enduser1 работает на одной и той же батарее.)

endusers1-own [
  energy_c_evehicle1
  energy_b_evehicle1
  demand1
]

Инициализация energy_b_evehicle1 будет затем перемещаться с setup на create_endusers1.

to create_endusers1
  create-endusers1 numcluster1 [
    move-to one-of patches with [ pcolor = green ]
    set color white
    set shape "triangle"
    set size 2
    set energy_b_evehicle1 5 * 1.56
  ]
end

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

Еще одно наблюдение: в demand_battery вы просите каждого конечного пользователя1 call_dist1. Но в call_dist1 вы просите каждого конечного пользователя1 увеличить ее спрос. Таким образом, каждый enduser1 просит каждого enduser1 увеличить свою потребность, поэтому потребность каждого enduser1 будет увеличена в numcluster1 раз. Я сомневаюсь, что это то, что вы хотите. Если demand_battery будет просто

to demand_battery
  ask endusers1
  [if energy_b_evehicle1 < 1.56 [set demand1 demand1 + 1]]
end

Каждый конечный пользователь1 будет проверять только свою собственную батарею и увеличивать свою собственную потребность, если условие выполнено.

Надеюсь, это поможет, Чарльз

...