【发布时间】: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-cost 和stock-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