Netlogo,从列表和单值的组合中选择一个值

时间:2014-10-04 18:33:14

标签: netlogo

我有两个列表和一个值(在每个补丁中)。我想将单个值与列表组合,然后为每个交互设置一个特定的权重值。例如

let single random 3; represent the center patch
let list1 [ 0 1 2 2 1 0 0 2 ]; represent the moore neighbors values 
let weights [0.2 0.3 0.5 0.1 0.8 0.1 0.6 0.2 0.2 ];  combination of centerpatch and neighb.

我想创建一个新列表(list2),其中single和list1的每个组合都获得一个特定的权重值。例如 如果single = 0且list1 = 0,则list2将为0.2 如果single = 1且list1 = 1,则list2将具有0.8,依此类推..

我尝试使用“ifelse-value”但没有成功。

let single_and_list sentence single list1 
let condition1 map [ifelse-value (? = 0 and list1 = 0  )  [0.2][?]] single_and_list 
let condition2 map [ifelse-value (? = 1 and list1 = 1  )  [0.8][?]] single_and_list
let list2 [condition1, condition2,….]

我将非常感谢任何见解,谢谢

2 个答案:

答案 0 :(得分:2)

我建议编写一个显式的报告程序来将列表中的值和单个值转换为权重。例如:

to-report weight [ single list-val ]
  if single = 0 and list-val = 0 [ report 0.2 ]
  if single = 1 and list-val = 1 [ report 0.8 ]
  ...
  report <default-value>
end

然后,为了获得权重,你可以做到

let weights map [ weight single ? ] list1

通过这样划分代码,它变得更加清晰。

答案 1 :(得分:2)

我同意Bryan Head的建议,但会增加一个建议。它看起来好像是single而list1总是包含小整数。如果这是正确的,那么一个选项是将要返回的值放入列表列表中。例如,您可以在报告者中添加这些行:

let weights [[0.2 0.3 0.5]
             [0.1 0.8 0.1]
             [0.6 0.2 0.2]]

report (item list-val (item single weights))

在上一行中,single必须为0,1或2,并选择要使用的内部列表(行)。然后list-val - 也必须是0,1或2 - 从item single weights选择的列表中选择一个数字。 (显然,您可以使用更多行或更长的内部列表来扩展此模式。)