Как я могу сделать черный список в netlogo? - PullRequest
0 голосов
/ 03 мая 2018

Я хочу знать, как я могу закодировать концепцию как черный список?

У меня 150 клиентов и 3 провайдера. все клиенты имеют возможность выбирать между провайдерами на основе определенных правил. Модель должна работать в течение 5 лет, и каждый год клиенты оценивают своего поставщика, и, если это нежелательно, клиенты должны менять своих поставщиков. В течение следующих лет клиенты выбирают между оставшимися поставщиками (последний поставщик теперь должен быть в черном списке только на 1 год), основываясь на том же правиле. Поставщик, заблокированный клиентом, остается в черном списке в течение 1 года.

Примечание. Например, клиент 1 выбирает поставщика 1 на первые годы. В конце первого года клиент оценивает поставщика 1 и решает сменить поставщика. Теперь для второго года клиент может выбрать только между поставщиком 2 и 3. Затем предположим, что на второй год клиент выбрал поставщика 2 и в конце второго года снова захотел сменить поставщика. Затем клиент может выбрать между поставщиком 1 и 3 на третий год.

Ответы [ 2 ]

0 голосов
/ 03 мая 2018

Я полагаю, что вы хотите, чтобы каждый клиент вел свой собственный черный список, а не имел единый черный список, доступный для всех клиентов. Если это так, то вам нужно создать собственный атрибут turtles для клиентов, который содержит их черный список.

Этот черный список проще всего использовать, если он представляет собой набор агентов. Таким образом, вы можете использовать not member?, чтобы исключить поставщиков при выборе. Однако вам нужно будет сохранить его в виде списка агентов (никогда не используйте идентификаторы, такие как who число), если вам нужны более сложные операции, такие как запоминание порядка, в котором они были добавлены в черный список.

Этот код создает черный список, исключает членов из выбора, а также добавляет и удаляет из черного списка вероятностно.

breed [providers provider]
breed [customers customer]
customers-own [blacklist]

to setup
  clear-all
  create-providers 3 [setxy random-xcor random-ycor set color red]
  create-customers 10
  [ setxy random-xcor random-ycor
    set color blue
    set blacklist (turtle-set [])
  ]
  reset-ticks
end

to go
  ask customers
  [ let choice ifelse-value any? blacklist
      [ one-of providers with [not member? self [blacklist] of myself] ]
      [ one-of providers ]
    ; stuff here about purchasing from their choice
    ask blacklist [ if random-float 1 < 0.3 [ die ] ]
    if random-float 1 < 0.2 [ set blacklist (turtle-set blacklist choice) ]
    show blacklist
  ]
  tick
end
0 голосов
/ 03 мая 2018

Я считаю, что вы можете использовать список для каждого клиента (в качестве атрибута) для этого. Например, если у вас есть p провайдеров (и вы даете им идентификатор от 0 до p-1), то вы пометите звездочкой set blacklist n-values p [-1]. Когда провайдер с id = n попадает в список, вы устанавливаете его значение равным нулю: replace-item n blacklist 0. Каждый год вы просите клиентов увеличивать значения своего черного списка, равные >= 0. Мол,

foreach blacklist [ provider_id -> 
  if provider_id >= 0 [
    replace-item n blacklist (item provider_id blacklist + 1)
  ] 
]

Наконец, вы replace-item n blacklist -1, если когда-либо провайдер n выходит из черного списка!

Надеюсь, это поможет. Если у вас есть какие-либо сомнения, пожалуйста, спросите!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...