和
ITSrepo
我已经为负载重量功能编写了以下代码,但来自我的Python背景,看起来非常效率低下。有什么建议吗?
extensions [ csv ]
globals [
data dp-weight li-weight mi-weight hi-weight
dpu-suburb dpu-neigbhour dpu-bu dpu-cbd dpu-mall dpu-markets dpu-road dpu-density dpu-schools dpu-attractive dpu-health dpu-random dpu-water
liu-suburb liu-neigbhour liu-bu liu-cbd liu-mall liu-markets liu-road liu-density liu-schools liu-attractive liu-health liu-random liu-water
miu-suburb miu-neigbhour miu-bu miu-cbd miu-mall miu-markets miu-road miu-density miu-schools miu-attractive miu-health miu-random miu-water
hiu-suburb hiu-neigbhour hiu-bu hiu-cbd hiu-mall hiu-markets hiu-road hiu-density hiu-schools hiu-attractive hiu-health hiu-random hiu-water
dp-w-list li-w-list mi-w-list hi-w-list
]
to setup
clear-all
file-close-all ;; Close any files open from last run
file-open "../data/interim/weights.csv" ;; a csv formated with a header row and column and integers for the weights
set [dp-w-list li-w-list mi-w-list hi-w-list] [[][][][]]
reset-ticks
end
to go
load-weights
show hiu-water
tick
end
to load-weights
;; code based on https://github.com/NetLogo/models/blob/master/Code%20Examples/Extensions%20Examples/csv/CSV%20Example.nlogo
file-close-all ;; Close any open files
file-open "../data/interim/weights.csv"
set data csv:from-file "../data/interim/weights.csv"
set dp-weight item 1 data ;; I skip the first row as it contains only the headers
set li-weight item 2 data
set mi-weight item 3 data
set hi-weight item 4 data
let i 0
repeat length dp-weight [
let w item i dp-weight
if i > 0 [set dp-w-list lput w dp-w-list] ;; I skip the first column, as it contains the line header (e.g., 'dp')
set i i + 1
]
set i 0
repeat length li-weight [
let w item i li-weight
if i > 0 [set li-w-list lput w li-w-list]
set i i + 1
]
set i 0
repeat length mi-weight [
let w item i mi-weight
if i > 0 [set mi-w-list lput w mi-w-list]
set i i + 1
]
set i 0
repeat length hi-weight [
let w item i hi-weight
if i > 0 [set hi-w-list lput w hi-w-list]
set i i + 1
]
set [ dpu-suburb dpu-neigbhour dpu-bu dpu-cbd dpu-mall dpu-markets dpu-road dpu-density dpu-schools dpu-attractive dpu-health dpu-random dpu-water ] dp-w-list
set [ liu-suburb liu-neigbhour liu-bu liu-cbd liu-mall liu-markets liu-road liu-density liu-schools liu-attractive liu-health liu-random liu-water ] li-w-list
set [ miu-suburb miu-neigbhour miu-bu miu-cbd miu-mall miu-markets miu-road miu-density miu-schools miu-attractive miu-health miu-random miu-water ] mi-w-list
set [ hiu-suburb hiu-neigbhour hiu-bu hiu-cbd hiu-mall hiu-markets hiu-road hiu-density hiu-schools hiu-attractive hiu-health hiu-random hiu-water ] hi-w-list
file-close ;; Close any open files
end
您可以使用Netlogo的列表操纵,并使您的代码更加简洁,效率。
我们可以将权重列表直接分配给全局变量列表。
并使用foreach
迭代CSV数据的行和列,消除了对手动索引的需求和重复的foreach
loops。
repeat
global-lists
(来自CSV的行)和
foreach
weight-lists
循环通过每个
global-lists
及其相应的
foreach
变量迭代,使用weight
.。将权重分配给全局变量。