如何在NetLogo中向矩阵添加一行?

时间:2019-04-19 09:56:48

标签: netlogo

我有一个2 * 2的矩阵,称为orders:

0 0

0 0

创建者:

set orders matrix:from-row-list [[0 0] [0 0]]

,我想将其更改为3 * 2矩阵:

0 0

0 0

10 50

如何执行此操作? (我想您必须创建一个也称为订单的新矩阵来覆盖现有订单,但是我无法弄清楚语法。)

2 个答案:

答案 0 :(得分:2)

最简单的方法可能是先将矩阵转换为列表,然后将新行添加到列表,然后再将其转换回矩阵。不是很优雅,但是下面的报告功能应该可以解决问题:

extensions [ matrix ]

to-report matrix-add-row [matrix row-added]

  let temp-list matrix:to-row-list matrix ;; converts the matrix to a list
  set temp-list lput row-added temp-list ;; the new row is added to the list
  report matrix:from-row-list temp-list ;; converts the list back to a matrix

end

to test

  let orders matrix:from-row-list [[0 0] [0 0]]
  show orders
  show matrix-add-row orders [ 10 50 ]

end

这将使您返回:

observer> test
observer: {{matrix:  [ [ 0 0 ][ 0 0 ] ]}}
observer: {{matrix:  [ [ 0 0 ][ 0 0 ][ 10 50 ] ]}} 

当然,您必须确保矩阵和添加的行的尺寸匹配。

答案 1 :(得分:0)

以防万一这对别人有帮助,最后我要做的是使用一个新的代理品种“订单”代替矩阵,每个订单乌龟本质上就是矩阵中的一行。我告诉订单要和拥有它的海龟坐在同一块地上,这很容易,因为该模型中的海龟不会移动。优点是我可以使用矩阵所没有的各种处理可能性。当然,如果您这样做并且行的顺序很重要,则需要包括某种管理方式(类似于orders-own [index]可以做到)。