Как я могу сделать выборку из списка без замены при назначении переменных агентам? - PullRequest
0 голосов
/ 04 июля 2018

У меня есть списки значений, и я хочу, чтобы агенты в моей модели взяли образцы из этих списков без замены. Примитив n-of позволяет мне производить выборку случайным образом, но это означает, что значения иногда дублируются, чего я хочу избежать.

Например, если агент-1 получает 1 из списка 1, агент-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 

1 Ответ

0 голосов
/ 05 июля 2018

Вероятно, проще всего случайным образом выбрать значение индекса, а не случайный выбор из списка, поскольку затем вы можете использовать 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: []"
...