If statement Netlogo:通过对其他行/列进行条件化来替换矩阵元素

If statement Netlogo:通过对其他行/列进行条件化来替换矩阵元素,if-statement,matrix,netlogo,If Statement,Matrix,Netlogo,我在Netlogo工作,负责制作大量使用矩阵的一系列模型。简单地说,这些模型包括不同品种的许多状态变量,其中状态变量通常是类似股票的项目。作为一个简单的例子,考虑模型: extensions [ matrix ] globals [ ] turtles-own [ n-items stock-list ] to setup clear-all reset-ticks create-turtles 2 ask turtles [ setxy rando

我在Netlogo工作,负责制作大量使用矩阵的一系列模型。简单地说,这些模型包括不同品种的许多状态变量,其中状态变量通常是类似股票的项目。作为一个简单的例子,考虑模型:

extensions [ matrix ]

globals
[
]


turtles-own 
[
  n-items
  stock-list
]

to setup
  clear-all
  reset-ticks
  create-turtles 2
  ask turtles
  [
    setxy random-xcor random-ycor
    set n-items 10
    let n-vars 3
    set stock-list matrix:make-constant n-items n-vars [0] ; empty matrix
    let stock-item n-values n-items [i -> i]
    let stock-cost n-values n-items [ random-normal 10 2 ]
    let stock-age n-values n-items [ random 50 ]
    matrix:set-column stock-list 0 stock-item
    matrix:set-column stock-list 1 stock-cost
    matrix:set-column stock-list 2 stock-age
  ]
 end
在这里,每个海龟的矩阵
库存列表
被初始化为一个空矩阵,然后根据变量
库存项目
(库存id)、
库存成本
库存年龄
填充其列

想象一个
go
过程,每一个时间步增加一个库龄:

to go
  ask turtles
   [
     let current-age matrix:get-column stock-list 1
     let new-age map [x -> x + 1] current-age
     matrix:set-column stock-list 2 new-age
   ]
  tick
end
我想做的是,仅当年龄大于某个值(例如10)时,才对
库存成本进行操作

;; pseudo-code
for( i = 1 to I = number of items )
 {
   if ( stock-age[i] > 10 ) 
    {
      stock-cost[i] - 1
    }
 }
我知道如何使用
映射
原语,以自身的值为条件更改
库存成本列表,例如:

to decrease-stock-value
  ask turtles
  [
    let current-cost matrix:get-column stock-list 1
    set current-cost map [[?] -> ifelse-value (? > 10) [? - 1][?]] current-cost
    matrix:set-column stock-list 1 current-cost
  ]
但我将其推广到使用不同列表中的值作为条件的努力失败了


谢谢你的帮助!此外,任何关于这是否是建模股票等状态变量的好方法的见解都是有用的

我想我是用以下方法整理出来的:

to decrease-stock-value
  ask turtles
   [
     let current-cost matrix:get-column stock-list 1
     let current-age matrix:get-column stock-list 2
     let new-cost ( map [ [ a b ] -> 
        ifelse-value ( a > 10 ) [ b - 1 ] [ b ] ] 
        current-age current-cost
        )
     matrix:set-column stock-list 1 new-cost
   ]
end