移动变量的参数以设置-模型行为更改



这个难倒了我...

我有一个 ABM,它通过单个补丁(喷口程序(上的随机泊松产生到达医院单位的新患者。根据区域和其他分配的变量,为每个患者分配一个要去的区域和在病房中花费的时间。当我使用嵌入在程序或报告中的分布创建它时,它每次都工作正常,但是当我将随机变量编码到设置中以便更容易操作时,它会定期生成严重异常的低/高值(以原始格式运行时看不到的范围(,有时创建新患者根本不会发生,尽管模型仍然在滴答作响......唯一更改的是变量在设置中的位置,而不是在代码正文中的位置。

我不知道为什么它会随机没有病人进入系统,这让我不信任它产生的任何其他东西。这只是Netlogo不喜欢的格式风格吗?还是我错过了什么?

感谢您在解决此问题方面的任何建议/帮助

原始代码:

if ticks = 1000 [stop]
ask arrivals                                   
[
assess                                       
crowding-check                               
relocate                                     
]
end
to assess      
sprout-patients random-poisson 1.5                                                  
[set time_arrived ticks                                                           
set condition random-float 1.0                                                   
set NEWS2 random-float 7.0                                                       
set shape "person"
]
end
to-report AEC_treatment_time ;; gamma dist                                           
let result random-gamma 3.478 0.525                                                
if result < 2  [ report 2 ]                                                        
if result > 20 [ report 20]
report result
end
to-report AMU_treatment_time ; gamma dist                                            
let result random-gamma 5.7716 0.3                                                
if result < 4  [ report 4]
if result > 48 [ report 48]
report result
end

新代码:

ca

set new-patients random-poisson 1.5
set AEC-los random-gamma 3.478 0.525
set AMU-los random-gamma 5.7716 0.3

reset-ticks
end
to go
if ticks = 1000 [stop]
ask arrivals                                   
[ 
sprout-patients new-patients
assess                                       
crowding-check                               
relocate                                     
]
end
to assess                                                                             
ask patients-here
[set time_arrived ticks                                                           
set condition random-float 1.0                                                   
set NEWS2 random-float 7.0                                                       
set shape "person"
]
end
...
to-report AEC_treatment_time ;; gamma dist                                           
let los-AEC AEC-los                                                                
if los-AEC < 2  [ report 2 ]                                                       
if los-AEC > 20 [ report 20]
report los-AEC
end
to-report AMU_treatment_time ; gamma dist                                            ;; reports treatment time for patients in AMU
let los-AMU AMU-los                                                                
if los-AMU < 4  [ report 4]
if los-AMU > 48 [ report 48]
report los-AMU
end

PS尝试多次迭代,似乎是随机泊松变化是导致问题的原因

如果没有完整的代码,很难看到,因为它看起来是过程连接方式的问题,但是您的新结构ask patients-here(在评估过程开始时(在循环中贯穿ask arrivals(go 过程(。到达是一种品种吗?

一般来说,嵌套ask turtles类型的结构是一件坏事,因为每只都会询问所有满足条件的海龟,所以你可能会得到微妙的错误。无论如何,这可能会让你回到以前做的事情:

to go
if ticks = 1000 [stop]
ask arrivals                                   
[ sprout-patients new-patients [assess]                                       
crowding-check                               
relocate                                     
]
end
to assess                                                                             
set time_arrived ticks                                                           
set condition random-float 1.0                                                   
set NEWS2 random-float 7.0                                                       
set shape "person"
end

这种结构使评估过程成为从的角度(或上下文(运行的过程,并在创建时立即运行。

最新更新