Netlogo 创建变量列表以查找最大值

Netlogo 创建变量列表以查找最大值,netlogo,Netlogo,我试图创建一个包含一组变量值的列表,这些变量是根据其他变量在每个go过程中计算出来的。在本例中,我尝试创建一个实用程序值列表,这将导致运行过程的代理决定更改其时间变量。所有的计算部分都是正确的,唯一的问题是当尝试创建实用程序列表并从中选择最大值以继续该过程时。有人知道我能做些什么来避免这个问题吗?干杯 to utility-runway let feepKG7 [feepKG] of runway1 let feepKG8 [feepKG] of runway2 let feep

我试图创建一个包含一组变量值的列表,这些变量是根据其他变量在每个go过程中计算出来的。在本例中,我尝试创建一个实用程序值列表,这将导致运行过程的代理决定更改其时间变量。所有的计算部分都是正确的,唯一的问题是当尝试创建实用程序列表并从中选择最大值以继续该过程时。有人知道我能做些什么来避免这个问题吗?干杯

to utility-runway


  let feepKG7 [feepKG] of runway1
  let feepKG8 [feepKG] of runway2
  let feepKG9 [feepKG] of runway3
  let feepKG10 [feepKG] of runway4
  let feepKG11 [feepKG] of runway5
  let feepKG12 [feepKG] of runway6
  let feepKG13 [feepKG] of runway7
  let feepKG14 [feepKG] of runway8
  let feepKG15 [feepKG] of runway9
  let feepKG16 [feepKG] of runway10
  let feepKG17 [feepKG] of runway11
  let feepKG18 [feepKG] of runway12
  let feepKG19 [feepKG] of runway13
  let feepKG20 [feepKG] of runway14
  let feepKG21 [feepKG] of runway15
  let feepKG22 [feepKG] of runway16
  let feepKG23 [feepKG] of runway17


   set utility7 ( ( previous-business1 + previous-leisure1 + previous-business2 + previous-leisure2 ) / feepKG7 )
   set utility8 ( ( previous-business1 + previous-leisure1 + previous-business2 + previous-leisure2 + previous-business3 + previous-leisure3 ) / feepKG8 )
   set utility9 ( ( previous-business2 + previous-leisure2 + previous-business3 + previous-leisure3 + previous-business4 + previous-leisure4 ) / feepKG9 )
   set utility10 ( ( previous-business3 + previous-leisure3 + previous-business4 + previous-leisure4 + previous-business5 + previous-leisure5 ) / feepKG10 )
   set utility11 ( ( previous-business4 + previous-leisure4 + previous-business5 + previous-leisure5 + previous-business6 + previous-leisure6 ) / feepKG11 )
   set utility12 ( ( previous-business5 + previous-leisure5 + previous-business6 + previous-leisure6 + previous-business7 + previous-leisure7 ) / feepKG12 )
   set utility13 ( ( previous-business6 + previous-leisure6 + previous-business7 + previous-leisure7 + previous-business8 + previous-leisure8 ) / feepKG13 )
   set utility14 ( ( previous-business7 + previous-leisure7 + previous-business8 + previous-leisure8 + previous-business9 + previous-leisure9 ) / feepKG14 )
   set utility15 ( ( previous-business8 + previous-leisure8 + previous-business9 + previous-leisure9 + previous-business10 + previous-leisure10 ) / feepKG15 )
   set utility16 ( ( previous-business9 + previous-leisure9 + previous-business10 + previous-leisure10 + previous-business11 + previous-leisure11 ) / feepKG16 )
   set utility17 ( ( previous-business10 + previous-leisure10 + previous-business11 + previous-leisure11 + previous-business12 + previous-leisure12 ) / feepKG17 )
   set utility18 ( ( previous-business11 + previous-leisure11 + previous-business12 + previous-leisure12 + previous-business13 + previous-leisure13 ) / feepKG18 )
   set utility19 ( ( previous-business12 + previous-leisure12 + previous-business13 + previous-leisure13 + previous-business14 + previous-leisure14 ) / feepKG19 )
   set utility20 ( ( previous-business13 + previous-leisure13 + previous-business14 + previous-leisure14 + previous-business15 + previous-leisure15 ) / feepKG20 )
   set utility21 ( ( previous-business14 + previous-leisure14 + previous-business15 + previous-leisure15 + previous-business16 + previous-leisure16 ) / feepKG21 )
   set utility22 ( ( previous-business15 + previous-leisure15 + previous-business16 + previous-leisure16 + previous-business17 + previous-leisure17 ) / feepKG22 )
   set utility23 ( ( previous-business16 + previous-leisure16 + previous-business17 + previous-leisure17) / feepKG23 )


  set utility-list [ utility7 utility8 utility9 utility10 utility11 
    utility12 utility13 utility14 utility15 utility16 
    utility17 utility18 utility19 utility20 utility21 utility22 utility23 ]

  let max-utility max-one-of utility-list

  if max-utility = utility7 [set time 7]  
  if max-utility = utility8 [set time 8]  
  if max-utility = utility9 [set time 9] 
  if max-utility = utility10 [set time 10] 
  if max-utility = utility11 [set time 11] 
  if max-utility = utility12 [set time 12] 
  if max-utility = utility13 [set time 13] 
  if max-utility = utility14 [set time 14] 
  if max-utility = utility15 [set time 15] 
  if max-utility = utility16 [set time 16] 
  if max-utility = utility17 [set time 17] 
  if max-utility = utility18 [set time 18] 
  if max-utility = utility19 [set time 19] 
  if max-utility = utility20 [set time 20] 
  if max-utility = utility21 [set time 21] 
  if max-utility = utility22 [set time 22] 
  if max-utility = utility23 [set time 23] 




end

首先,我假设每个
跑道#
都是一只海龟或一条
跑道
品种。构造此代码的更好方法是一次对所有值应用相同的操作。为此,首先我们创建一个
feepKG
值列表:

let feepKGs map [ [ feepKG ] of ? ] sort runways
跑道前面的排序使得
feepKGs
的第一项对应于第一条
跑道
,依此类推。不幸的是,由于
sort
返回一个列表,因此必须使用
map
而不是
of
来获取
feepKG
s的列表

接下来,我们需要从feepkg列表中获取实用程序列表。看起来您对
实用性7
的计算可能不正确,因为这是唯一不同的一个。无论如何,要对列表中的每个项目应用相同的操作,我们使用:

map
将该大表达式应用于
feepKGs
的每个元素(其中
是元素)。因此
实用程序
这里与
实用程序列表
相同(假设
实用程序7的表达式实际上是错误的)。要获取max实用程序的值,只需使用
max

let max-utility max utilities
然后,我们得到max实用程序的索引,以确定它是哪一个。由于您的公用事业编号从7开始,列表索引从0开始,因此我们必须在索引中添加7:

set time 7 + position max-utility utilities

[feepKG]某种跑道
实际上不是有效的代码我刚刚意识到我工作中的一个错误,它已经被编辑过了。我的问题是每个跑道都是一个独立的品种,因为当我对netlogo的了解比较有限时,我就开始用这种方式来编程了,我不能独立地为每只海龟设置变量。实用性7等式是正确的,错误的是实用性23等式。其思想是,每条跑道的实用性是其时段需求量与使用费的比率。但是航空公司本身就被分配了可变时间的跑道位置,这就是我最后两条线路的工作。只需使用
max
来获取最大值本身,然后使用
position
来获取其索引。您并不是在说您得到的是什么错误消息。但我猜问题是您需要将
设置实用程序列表[utility7 utility8 utility9…]
替换为
设置实用程序列表(list utility7 utility8…
。它是
set time 7 + position max-utility utilities