【问题标题】:Netlogo: replacing matrix elements by conditioning on other rows/columnsNetlogo:通过调整其他行/列来替换矩阵元素
【发布时间】:2018-11-27 18:12:42
【问题描述】:

我正在 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

在这里,每个海龟的矩阵stock-list 被初始化为一个空矩阵,然后根据变量stock-item(股票ID)、stock-coststock-age 填充其列。

想象一个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

我想做的是对stock-cost 进行操作,前提是年龄大于某个值,例如10

;; pseudo-code
for( i = 1 to I = number of items )
 {
   if ( stock-age[i] > 10 ) 
    {
      stock-cost[i] - 1
    }
 }

我知道如何使用 map 原语根据自己的值更改 stock-cost 条件列表,例如:

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
  ]

但我试图将其概括为使用不同列表中的值作为条件的努力失败了。

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

【问题讨论】:

    标签: if-statement matrix netlogo


    【解决方案1】:

    我想我是这样整理出来的:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-06
      相关资源
      最近更新 更多