网络徽标 :从其他列表创建列表并添加计算:这是"best"方式吗?



我记下了这些行,以便为每个补丁计算一个change-LU-list,该用于从相关权重中随机选择LU(更改LU列表的第0项i项)之一(使用最终函数rnd:weighted-one-of-list

如您所见,我正在使用列表列表的数据来构建change-LU-list,然后我从更新的项目中进行一些计算,删除不需要的项目,所以我最终只拥有其权重LU

这是在网络徽标中做到这一点的最佳方式吗?还是我应该使用array扩展?

由于每个补丁的change-LU-list都不同,因此我将其设置回ask patches块内的 nul 值。还是我应该使用局部变量进行change-LU-list

我还有一个"删除项目"命令的问题,该命令无法按预期工作,错误请求"命令"。

我仍在学习过程中,并正在寻找任何建议,以网络徽标风格构建我的模型。

感谢您抽出宝贵时间!(抱歉,如果太难阅读,如有必要,我可以对其进行编辑以使其看起来更简单)

to change-LU

ask patches with [eligible = true] [
;; creation of a list of possible LU (from historic data item 1) and adding a second item for the weight, it should be updated for every patch !
set change-LU-list map [inner-list -> (list item 1 inner-list 0 0 0 ) ] historic-data
;; let's replace item 1 by the area, item 2 by the yield, item 3 by the price, item 4 by the cost, item 5 by the historic, item 6 by the final weight
let i 0
while [i < length historic-data] [
let x item 0 item i historic-data

set change-LU-list replace-item i change-LU-list (replace-item 1 item i change-LU-list (area))      ;; area is a patch variable

set change-LU-list replace-item i change-LU-list (replace-item 2 item i change-LU-list (last (first (filter [yield-inner-list -> (item 0 yield-inner-list = year) ;; year is a global variable
AND (abs (real-x - item 1 yield-inner-list) <= 0.01375)
AND (abs (real-y - item 2 yield-inner-list) <= 0.01375)
AND (item 3 yield-inner-list = x ) ] yield-data))))

set change-LU-list replace-item i change-LU-list (replace-item 3 item i change-LU-list ( item 2 (first (filter [sgm-inner-list -> (item 0 sgm-inner-list = year) AND (item 1 sgm-inner-list = x )] sgm-data))))
set change-LU-list replace-item i change-LU-list (replace-item 4 item i change-LU-list ( item 3 (first (filter [sgm-inner-list -> (item 0 sgm-inner-list = year) AND (item 1 sgm-inner-list = x )] sgm-data))))

set change-LU-list replace-item i change-LU-list (replace-item 5 item i change-LU-list ( item 3 (first(filter [historic-inner-list -> (item 0 historic-inner-list = LU) AND (item 1 historic-inner-list = x) ] historic-data))))

set change-LU-list replace-item i change-LU-list (replace-item 6 item i change-LU-list ( (( (item 2 item i change-LU-list) * (item 3 item i change-LU-list)) / (item 4 item i change-LU-list)) * (item 5 item i change-LU-list)))


set change-LU-list remove-item i change-LU-list (remove-item 2 item 0 change-LU-list)
set change-LU-list remove-item i change-LU-list (remove-item 3 item 0 change-LU-list)
set change-LU-list remove-item i change-LU-list (remove-item 4 item 0 change-LU-list)
set change-LU-list remove-item i change-LU-list (remove-item 5 item 0 change-LU-list)    
]
let LU-result first rnd:weighted-one-of-list change-LU-list last
set LU LU-result ;; updating the patch properties "LU"
] 
end

这是在网络徽标中执行此操作的最佳方法吗?还是我应该使用数组 外延?

当然,您不想多次更改大型列表。 但是,建立一个庞大的列表然后减少它是非常低效的。 如果我理解这个问题,每一行(i)都独立于另一行,所以我建议为每个"i"计算你需要的两个值(一个数字和一个权重),并将结果存储在一个数组中,因为你知道数组会有多大。 跳过制作任何庞大的清单。但是在每个"i"中,列表可能和数组一样容易使用。

由于每个补丁的更改 LU 列表都不同,因此我将其设置回 Ask 补丁块内的 NUL 值。或者我应该使用本地 变量用于更改 LU 列表 ?

您绝对不希望大量列表的内存要求乘以补丁数量。不要使用局部变量。

我还有一个"删除项目"命令的问题,该命令不起作用 正如预期的那样,错误请求"命令"。

你有一个对我来说没有意义的命令。检查 语法字典。

删除项目只有两个参数,一个项目编号和一个列表。 我不知道你在括号里的第三项在做什么。

涉水 ( "可供租用,请参阅个人资料" )

最新更新