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

问题描述 投票:1回答:1

这个绊倒我...

我有一个ABM,它可以在一个贴片上通过随机泊松产生新患者到达医院单位(喷口程序)。根据该区域和其他分配的变量,为每个患者分配一个要去的区域和一个在该单元花费的时间。当我使用嵌入在过程或报告程序中的分布来创建它时,每次都可以正常工作,但是当我将随机变量编码到设置中以使其更易于操作时,它会定期产生严重异常的低/高值(在以原始格式运行),有时即使模型仍在运行,也根本不会创建新的患者。唯一改变的是变量在set中的放置,而不是在代码正文中。

我不知道为什么它会随机地没有病人进入系统,这使我对它产生的任何其他东西都不信任。这只是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尝试多次迭代,这似乎是引起问题的随机泊松变化

variables random installation netlogo
1个回答
0
投票

没有完整的代码很难看到,因为看起来过程连接方式存在问题,但是您的新结构在ask patients-here循环内有ask arrivals(在评估过程的开始)(转到程序)。到来的是品种吗?

通常,嵌套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

此结构使评估程序成为从乌龟的角度(或上下文)运行的过程,并在创建乌龟时立即运行它。

© www.soinside.com 2019 - 2024. All rights reserved.