netlogo将概率转换为行值

netlogo将概率转换为行值,netlogo,Netlogo,我有一个10个概率的列表,我想转换为线段,这样我就可以执行轮盘赌轮选择。如何转换为线段 概率表: [0.17 0.15 0.14 0.14 0.11 0.1 0.06 0.06 0.04 0.03] 当转换为直线段时,应: [0.17 0.32 0.46 0.60 0.71 0.81 0.87 0.93 0.97 1.0] 现在这是我的代码: to calculate-s let i 1 ;; previously added a 0 to list using set p-list fput

我有一个10个概率的列表,我想转换为线段,这样我就可以执行轮盘赌轮选择。如何转换为线段

概率表:
[0.17 0.15 0.14 0.14 0.11 0.1 0.06 0.06 0.04 0.03]

当转换为直线段时,应:
[0.17 0.32 0.46 0.60 0.71 0.81 0.87 0.93 0.97 1.0]

现在这是我的代码:

to calculate-s
let i 1 ;; previously added a 0 to list using set p-list fput 0 p-list
while [i < 11] [
  ask turtles [
    if [p] of self = item i p-list [
      let s (p + item (i - 1) p-list)
    ]
  ]
  set i (i + 1)
]
end
计算-s
让我看一看;;以前使用set p-list fput 0 p-list将0添加到列表中
而[i<11][
问海龟[
如果自身的[p]=项目i p-列表[
设s(p+项目(i-1)p-列表)
]
]
集合i(i+1)
]
结束
当然,它只是将当前概率和前一个概率相加,所以我得到:
[0.17 0.32 0.29 0.28等]

我不确定直线段的确切含义,但如果您只需要一个自包含的块,它可以创建一个列表,其中

newlist[i]=(oldlist[i]+(newlist[i-1]))

您可以使用
foreach
单步遍历旧列表并生成一个新的求和值列表,如下所示

to make-segments

  let oldlist [0.17 0.15 0.14 0.14 0.11 0.1 0.06 0.06 0.04 0.03]
  let newlist []

  let n 0

  foreach oldlist [
    [x]->
    ifelse n < 1 [ ;;; if index is 0 you can't index 0 -1, so just use item 0
      set newlist lput item 0 oldlist newlist   
    ]
    [   ;;; else, add the item n from the old list to the 
        ;;; previous item in the new list.
      set newlist lput (precision (item n oldlist + item (n - 1) newlist) 2) newlist
    ]
    set n n + 1
  ] 

  print newlist

end
生成段
let oldlist[0.17 0.15 0.14 0.14 0.11 0.1 0.06 0.06 0.04 0.03]
让新列表[]
让n0
foreach旧列表[
[x] ->
如果else n<1[;;;如果索引为0,则不能索引0-1,因此只需使用项0
设置新列表lput项0旧列表新列表
]
[;;;否则,将旧列表中的项n添加到
;;新列表中的上一项。
设置新列表lput(精度(项目n旧列表+项目(n-1)新列表)2)新列表
]
集合n+1
] 
打印新列表
结束
似乎是的副本