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

How to add a row to a matrix in NetLogo?

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

0 0

0 0

创建者:

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

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

0 0

0 0

10 50

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

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

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

这会 return 你:

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

当然,你必须确保矩阵的维度和添加的行匹配。

为了以防万一这对其他人有帮助,我最后所做的是使用新的代理品种 'orders' 代替矩阵,每个订单海龟基本上都是矩阵。我告诉命令坐在与拥有它的乌龟相同的补丁上,这很容易,因为该模型中的乌龟不会移动。优点是我可以使用矩阵所没有的各种处理可能性。当然,如果你这样做并且行的顺序很重要,你需要包括一些管理它的方法(像 orders-own [index] 会做的)。