У меня есть агенты, называемые «заказами». В этих агентах есть ряд устройств в качестве атрибута.В зависимости от возраста каждого из устройств определенное количество устройств будет повреждено в соответствии со случайным пуассоновским процессом.Например:
Заказы имеют атрибуты:
- Количество установленных устройств (количество установлено)
- Количество сломанных устройств (количество сломано)
- Количество устройств, сломанных на этом временном шаге (в этом году)
- Возраст устройств в этом порядке (возраст заказа)
- Средняя продолжительность жизни заказа (средняя продолжительность жизни)
Я нашел несколько способов, как реализовать это с использованием фильтра в подходе со списком:
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
]
Поэтому должно быть несколько установленных устройств, которые ломаются, в то время как некоторое количество устройств все еще продолжает работать.Однако каждый заказ состоит из нескольких тысяч устройств, а в моей модели сотни заказов.Поэтому этот процесс занимает очень много времени до того момента, когда компьютер зависает.Должен быть способ достичь тех же результатов без использования метода цикла.Кто-нибудь знает лучший способ подойти к этому?