значение случайного пуассона для всего списка в netlogo - PullRequest
0 голосов
/ 28 декабря 2018

У меня есть агенты, называемые «заказами». В этих агентах есть ряд устройств в качестве атрибута.В зависимости от возраста каждого из устройств определенное количество устройств будет повреждено в соответствии со случайным пуассоновским процессом.Например:

Заказы имеют атрибуты:

  • Количество установленных устройств (количество установлено)
  • Количество сломанных устройств (количество сломано)
  • Количество устройств, сломанных на этом временном шаге (в этом году)
  • Возраст устройств в этом порядке (возраст заказа)
  • Средняя продолжительность жизни заказа (средняя продолжительность жизни)

Я нашел несколько способов, как реализовать это с использованием фильтра в подходе со списком:

ask orders [
    let broken-list n-values amount-installed [random-poisson order-age]
    set broken-list filter [s -> s >= average-lifespan] broken-list
    set broken-this-year length broken-list
    set amount-installed amount-installed - broken-this-year
    set amount-broken amount-broken + broken-this-year
]

Другой способ, который я нашел для реализации этого, - использование цикла whileподход:

 ask orders [
    while [amount-checked < amount-installed] [
      if random-poisson order-age >= average-lifespan [
        set broken-this-year broken-this-year + 1
      ]
      set amount-checked amount-checked + 1
    ]
    set amount-installed amount-installed - broken-this-year
    set amount-broken amount-broken + broken-this-year
]

Поэтому должно быть несколько установленных устройств, которые ломаются, в то время как некоторое количество устройств все еще продолжает работать.Однако каждый заказ состоит из нескольких тысяч устройств, а в моей модели сотни заказов.Поэтому этот процесс занимает очень много времени до того момента, когда компьютер зависает.Должен быть способ достичь тех же результатов без использования метода цикла.Кто-нибудь знает лучший способ подойти к этому?

...