【发布时间】:2013-11-27 11:37:18
【问题描述】:
我很抱歉一直询问链接,但我要添加到我的模型中的功能之一是在村庄的未来关系中考虑不同村庄的人的集体相互关系,
我有几千个链接,当村庄想要做出决定时调用链接并获得它们的价值效率不高(在时钟 0 时每 48 个滴答做出决定)
代理拥有属于一对一的"Village1" Village2" Village3" or "Village4"
链接具有关系的价值。
这是我用来更新链接值的函数:
to Update_link_Values [Other_Agent Value]
if self != Other_Agent
[
ifelse out-link-neighbor? Other_Agent
[
ask out-link-to Other_Agent
[
set Value-Of-The-Relationship Value-Of-The-Relationship + Value
set-List-of-Mutual-Obligations
]
]
[
create-link-to Other_Agent
[
set Value-Of-The-Relationship Value-Of-The-Relationship + Value
set-List-of-Mutual-Obligations
]
]
]
end
如果我使用以下公式来存储不同村庄的关系值之和,则计算所有相互关系值需要 0.003 毫秒
if [belongs_to] of end1 = "Village1" and [belongs_to] of end2 = "Village2"
[
set List-of-Mutual-Obligations replace-item 0 List-of-Mutual-Obligations (item 0 List-of-Mutual-Obligations + Value-Of-The-Relationship)
]
虽然这需要 1.002 毫秒来执行,
if [belongs_to] of end1 = "Village1" and [belongs_to] of end2 = "Village2"
[
set List-of-Mutual-Obligations replace-item 0 List-of-Mutual-Obligations sum [Value-Of-The-Relationship] of links with [[Belongs_to] of end1 = "Village1" and [Belongs_to] of end2 = "Village2"]
]
我对第一个版本的问题是,它将每个链接的值添加到该组中先前链接的所有值的总和,并且不考虑链接是否已失效,但第二个更准确。
由于关系值是链接属性,因此我不想在代码中多次询问链接,并且每当更改或创建链接时,我都会更新总和值。
我认为每 48 个滴答声更新一次值可能会更好,因为许多代理可能会在每个滴答声中调用此函数,但为此我必须调用链接,但我不确定哪种方式更好?
更新:
我已经更改了我的代码,所以每当做出决定时我都会计算我需要的链接:
to-report Value-of-Mutual-Obligations [Village1 Village2]
report sum [Value-Of-The-Relationship] of links with [[Belongs_to] of end1 = Village1 and [Belongs_to] of end2 = Village2]
end
【问题讨论】:
标签: netlogo