我有一个节点和链接网络。这个数字
是对世界的捕捉。该图表示城市的街道。我已经导入了一个带有gis扩展名的shapefile。灰线是链接,黑点是节点,红点代表人。人们前往下一个节点。在街角,红点通过检查链接所拥有的变量popularity
来选择下一条街道。
links品种有一个变量popularity
,我想在下面的补丁中复制其值。
如果我尝试,例如,这样的东西来访问链接下的补丁会产生错误
ask links [show [(list pxcor pycor)] of patch-here]
另一种方法可以是从补丁访问链接变量流行度,但我不知道如何做到这一点。
我想要这个的原因是因为我想在文件中写入流行度值矩阵,并且它在矩阵中的位置应该与世界中链接的位置相对应。因此,链接下面的补丁会给我矩阵形式。我有一个程序,每个补丁都将补丁的值写入文件中。但是,我不知道如何将popularity
值从链接传递到它下面的补丁。
有没有办法将链接拥有的变量复制到其补丁中?
此致
答案 0 :(得分:2)
如果有人有更好的方法(或者可以简化我的代码),请随意。这是一个完整的工作示例。将其复制到一个空的NetLogo模型中并运行它以使其工作。
setup
过程只是创建一些带有适当测试值的节点和链接,然后调用transfer-link-values过程,这就是我想要的。然后setup
过程将值放入补丁标签中以显示它们并查看结果。
transfer-link-values过程的工作方式是在链接的一端创建一只乌龟,然后乌龟移动到链接的另一端,随着它传递值。当它到达另一端时,乌龟就会死亡。
patches-own [patch-popularity]
links-own [link-popularity]
to setup
clear-all
create-turtles 10 [ setxy random-xcor random-ycor]
while [ any? turtles with [not any? my-links] ]
[ let to-pair turtles with [not any? my-links]
let thisNode one-of to-pair
ask thisNode
[ create-link-with one-of other to-pair
[ set link-popularity 5 + random 5 ]
]
]
transfer-link-values
ask patches [ if patch-popularity != 0 [set plabel patch-popularity ] ]
end
to transfer-link-values
ask links
[ let start-node one-of both-ends
let this-link self
let end-node nobody
ask start-node [ set end-node [other-end] of this-link ]
let transfer-value link-popularity
ask start-node
[ hatch 1
[ face end-node
if transfer-value > patch-popularity
[ ask patch-here [ set patch-popularity transfer-value ] ]
while [ not member? end-node turtles-here ]
[ forward 1
if transfer-value > patch-popularity
[ ask patch-here [ set patch-popularity transfer-value ] ]
]
if transfer-value > patch-popularity
[ ask patch-here [ set patch-popularity transfer-value ] ]
die
]
]
]
end