补丁 - 拥有netlogo中的向量

时间:2017-04-27 09:56:46

标签: netlogo agent-based-modeling

在一开始的补丁专用部分,我可以为一个品种索引一个变量,所以它是一个向量而不是一个变量吗?

具体来说,我有一个名为Developers的品种(它是房屋建筑的ABM),补丁拥有土地价格,但我希望他们为每个开发商拥有不同的土地价格。这可能吗?

我与2名开发人员的失败尝试是

patches-own [ land-price ( n-values 2 developer ) ]

感谢。

2 个答案:

答案 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了解您可以做的所有事情......