列表中值的总和

问题描述 投票:0回答:1

我有学生(海龟)和 30 所学校(补丁)。对于每个学生,我从包含每个学校效用的效用函数创建了一个变量(效用)(因此每个学生有 30 个值)。问题是我无法生成一个新变量来对每个学生的 30 个效用值求和。

turtles-own
[
  
  utilities; schools' utilities for each individual
  cumul;
]
patches-own
[
  
  schoolachievement_2 ; overall mean school achievement
  
]
 to go
ask turtles [ utility ]

to utility
  set utilities [ school-utility ] of patches with [ schoolachievement_2 > 0 ]
  set cumul  reduce +  [ utilities ] of turtles
end 
end

reduce +
给出错误:“+预期输入是数字,但得到了列表”。

如果我使用

sum
而不是
reduce +
,我所有学生都会得到 0。 如果我使用
reduce +
代替
map sum
,我会收到错误:“SUM 预期输入是一个列表,但得到的是数字 0”。

sum netlogo
1个回答
1
投票

LeirsW 关于语法问题的说法是正确的。但这里实际上存在很多问题。首先,我假设

school-utility
是补丁(学校)变量或使用其他补丁变量返回数字的报告者。由于它似乎不知道海龟叫它什么,所以所有海龟的答案可能都是相同的。这是你想要的,还是我错过了什么?接下来,在
utility
例程中,第一行让海龟创建一个实用程序列表(如果没有补丁满足
with
条件,则该列表可能为空)。在下一行中,每只海龟尝试对所有海龟的效用求和,而不仅仅是它自己的效用。因此,您正在对一个列表的列表进行求和,而不仅仅是一个简单的列表。有几种方法可以做到这一点。 第一个是

let cumul sum [sum utilities] of turtles

每只海龟将其效用相加,并将其传递给累积求和。 另一种方法是使用

sentence
将列表列表折叠为简单列表,然后对其求和。

let cumul sum sentence [utilities] of turtles

但是,这两种解决方案都回避了一个问题:为什么每只乌龟都被要求做同样的事情。累积量的计算应该在

utility
之外进行,因此只进行一次。

当然也许

cumul
应该只针对个体海龟?如果是的话,你只需要

let cumul sum utilities
show cumul

你把它放在正确的地方了。

查尔斯

© www.soinside.com 2019 - 2024. All rights reserved.