将变量分配给代理时,如何在不替换的情况下从列表中采样?
How can I sample from a list without replacement when assigning variables to agents?
我有一个值列表,我希望我的模型中的代理从这些列表中采样而不进行替换。 n-of
原语允许我随机采样,但这意味着值有时会重复,这是我想避免的。
例如,如果 agent-1 从列表 1 中得到一个 1,那么 agent-2 应该也不能得到这个。
希望对您有所帮助。
turtles-own [list1Vals list2Vals]
to test
clear-all
crt 2
let list1 [1 2]
let list2 [3 4]
ask turtles [set xcor random-xcor
set ycor random-ycor
set color red
set list1Vals n-of 1 list1
set list2Vals n-of 1 list2
]
end
可能最容易随机选择一个索引值而不是从列表中随机选择,因为您随后可以使用 item
选择列表值并使用 remove-item
将其从原始列表中删除。更多详情见评论:
turtles-own [list1Vals list2Vals]
to test
ca
let list1 [1 2 3 4 5]
crt 5 [
; Randomly choose an index based on the
; length of list1
let ind1 one-of range length list1
; Have the turtle choose from list1
; using that index
set list1Vals item ind1 list1
; Remove the indexed value from list1
set list1 remove-item ind1 list1
show ( word "I chose " list1Vals ". list1 is now: " list1 )
]
reset-ticks
end
test
输出类似:
(turtle 1): "I chose 5. list1 is now: [1 2 3 4]"
(turtle 4): "I chose 4. list1 is now: [1 2 3]"
(turtle 0): "I chose 3. list1 is now: [1 2]"
(turtle 2): "I chose 2. list1 is now: [1]"
(turtle 3): "I chose 1. list1 is now: []"
或
(turtle 1): "I chose 1. list1 is now: [2 3 4 5]"
(turtle 0): "I chose 4. list1 is now: [2 3 5]"
(turtle 4): "I chose 2. list1 is now: [3 5]"
(turtle 3): "I chose 5. list1 is now: [3]"
(turtle 2): "I chose 3. list1 is now: []"
我有一个值列表,我希望我的模型中的代理从这些列表中采样而不进行替换。 n-of
原语允许我随机采样,但这意味着值有时会重复,这是我想避免的。
例如,如果 agent-1 从列表 1 中得到一个 1,那么 agent-2 应该也不能得到这个。
希望对您有所帮助。
turtles-own [list1Vals list2Vals]
to test
clear-all
crt 2
let list1 [1 2]
let list2 [3 4]
ask turtles [set xcor random-xcor
set ycor random-ycor
set color red
set list1Vals n-of 1 list1
set list2Vals n-of 1 list2
]
end
可能最容易随机选择一个索引值而不是从列表中随机选择,因为您随后可以使用 item
选择列表值并使用 remove-item
将其从原始列表中删除。更多详情见评论:
turtles-own [list1Vals list2Vals]
to test
ca
let list1 [1 2 3 4 5]
crt 5 [
; Randomly choose an index based on the
; length of list1
let ind1 one-of range length list1
; Have the turtle choose from list1
; using that index
set list1Vals item ind1 list1
; Remove the indexed value from list1
set list1 remove-item ind1 list1
show ( word "I chose " list1Vals ". list1 is now: " list1 )
]
reset-ticks
end
test
输出类似:
(turtle 1): "I chose 5. list1 is now: [1 2 3 4]"
(turtle 4): "I chose 4. list1 is now: [1 2 3]"
(turtle 0): "I chose 3. list1 is now: [1 2]"
(turtle 2): "I chose 2. list1 is now: [1]"
(turtle 3): "I chose 1. list1 is now: []"
或
(turtle 1): "I chose 1. list1 is now: [2 3 4 5]"
(turtle 0): "I chose 4. list1 is now: [2 3 5]"
(turtle 4): "I chose 2. list1 is now: [3 5]"
(turtle 3): "I chose 5. list1 is now: [3]"
(turtle 2): "I chose 3. list1 is now: []"