【发布时间】:2019-10-17 18:56:12
【问题描述】:
使用 Netlogo 构建我的第一个 ABM,但遇到了一个涉及 ifelse 语句以及如何使用它们的问题。我正在模拟代理对被淹没的属性的响应。概念如下:
如果代理被淹没,他们会考虑采取保护措施(如果他们还没有)。 如果代理采取了保护措施,并被淹没,则计算该措施的成功。
我的代码如下:
to process-property
let $random-flood-number random-float 1
ask properties [
set flood-damage-list-consequent replace-item 1 flood-damage-list-consequent (item 1 flood-damage-list-initial * (1 - PLP-reduction))
set flood-damage-list-consequent replace-item 2 flood-damage-list-consequent (item 2 flood-damage-list-initial * (1 - PLP-reduction))'
ifelse $random-flood-number < probability-flooding
[
set flooded? TRUE
set number-of-times-flooded (number-of-times-flooded + 1)
if plp-adopted? != TRUE [
calculate-adoption-intention
]
]
[
set flooded? FALSE
]
]
ask properties with [plp-adopted? = TRUE] [
plp-reliability-analysis
]
end
to plp-reliability-analysis
if plp-abandoned? = TRUE [stop]
if flooded? = TRUE [
if number-of-times-flooded > 1 [
let plp-reliability-factor 0.77 ;;This variable represents the probability of success that Manual PLP will offer full reduction in damage. Taken from JBA (2012;2014).
ifelse random-float 1 < plp-reliability-factor
[
set plp-deployed-successful? TRUE
set PLP-reduction 0.25
set successful-flood-damage-reduction (sum flood-damage-list-initial * PLP-reduction)
]
[
set plp-deployed-successful? FALSE
set PLP-reduction 0.9
set unsuccessful-flood-damage-reduction (sum flood-damage-list-initial * PLP-reduction)
calculate-abandonment-intention
]
]
]
end
我编写了以下代码作为错误检查,我不断收到:
if flooded? = FALSE and plp-deployed-successful? = TRUE [error["Properties should only deploy PLP when they are flooded"]]
我认为问题在于“plp-reliability-analysis”过程中的 ifelse 语句。我是 Netlogo 的新手,对何时使用“if”或“ifelse”语句感到困惑。如果有人可以解释并查看上面的代码,我将不胜感激。
谢谢, 大卫
【问题讨论】:
标签: if-statement netlogo agent-based-modeling