在一开始的补丁专用部分,我可以为一个品种索引一个变量,所以它是一个向量而不是一个变量吗?
具体来说,我有一个名为Developers的品种(它是房屋建筑的ABM),补丁拥有土地价格,但我希望他们为每个开发商拥有不同的土地价格。这可能吗?
我与2名开发人员的失败尝试是
patches-own [ land-price ( n-values 2 developer ) ]
感谢。
答案 0 :(得分:3)
这可以通过多种方式解决。
一种解决方案可以是将补丁变量作为列表。您无法在补丁自己的块中初始化它。而是在您的设置方法中初始化它。
patches-own [land-prices]
to setup
ca
create-developers 10
let initial-price 10
ask patches [ set land-prices (count developers) initial-price]
end
你需要小心订购。例如,很多像of
这样的命令会产生一个随机大小的列表。您可能希望使用开发人员的who
对其进行索引。
解决这个问题的一种方法是使用表扩展来创建一个价格表的表。您需要在扩展程序中包含表格并修改设置。请参阅:https://ccl.northwestern.edu/netlogo/docs/table.html
考虑这个表解决方案,我在表中使用from-list函数来初始化表:
patches-own [land-prices]
breed [developers developer]
extensions [table]
to setup
ca
create-developers 10
let initial-price 10
ask patches [ set land-prices table:from-list [(list who initial-price)] of developers]
end
这两项都是内存密集型操作。您可能想要轻描淡写或解释为什么需要存储这么多信息。
答案 1 :(得分:2)
@ mattsap建议使用table
扩展名可能是要走的路,但只是为了记录:你也可以考虑使用链接。
在这种情况下,问题是链接只能在乌龟和乌龟之间,而不能在乌龟和补丁之间。
但是,你可以考虑制作你的“土地”乌龟,并在每个补丁上加一个。以下是我的意思的完整示例:breed [ lands land ]
breed [ developers developer ]
undirected-link-breed [ price-links price-link ]
price-links-own [ price ]
to setup
clear-all
set-default-shape lands "square"
create-developers 10
ask patches [
sprout-lands 1 [
set color green - 3
create-price-links-with n-of 2 developers [
hide-link
set price random 100
]
]
]
end
根据你想要做的事情,可能会有一些权衡(内存是一个),但从概念上讲,这是一种非常干净的方式。
使用NetLogo可以非常轻松愉快地使用链接(在我看来比使用table
扩展程序更令人愉快)。主要优点是您可以从两个方向查询链接:
observer> ask one-of developers [ show [ price ] of my-price-links ]
(developer 6): [85 68 79 26 40 60 72 85 94 50 63 75 81 97 15 46 71 34 75 15 87 0 30 9 57 23 14 63 73 66 5 13 94 20 78 8 36 12 18 49 43 35 24 38 93 34 15 72 63 68 15 86 46 21 30 67 19 89 73 62 83 33 14 13 62 46 54 17 12 35 58 7 29 51 35 99 95 96 78 74 81 36 98 45 86 2 3 45 24 35 35 43 11 63 72 11 50 16 14 60 36 89 83 50 64 65 11 38 92 75 78 94 76 12 77 30 6 61 79 63 39 68 20 99 43 72 74 1 12 18 70 98 23 72 2 15 11 44 29 17 24 73 74 53 42 63 23 53 86 45 6 60 17 49 98 79 69 96 54 6 19 20 99 46 1 31 66 85 22 42 74 2 19 60 93 54 37 20 77 75 64 42 78 40 82 11 91 13 56 56 28 34 42 5 75 7 46 91 69 83 76 92 69 71 14 35 30 85 78 95 25 3 2 1 77 73 92 31 54 83 5 89 2 32 19 10 59 72 80 93 60 62 44 92 49 49]
observer> ask one-of lands [ show [ price ] of my-price-links ]
(land 997): [43 70]
或者你可以直接从陆地到开发商(反之亦然):
observer> ask one-of lands [ show sort price-link-neighbors ]
(land 112): [(developer 4) (developer 5)]
显示特定土地的特定开发商的价格:
observer> ask developer 2 [ show [ price ] of price-link-with land 737 ]
(developer 2): 94
请参阅Links section of the NetLogo dictionnary了解您可以做的所有事情......