Netlogo: остановить цикл действий после того, как черепахи выполнят действие - PullRequest
0 голосов
/ 15 марта 2019

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

В моем мире есть два вида агентов, секс-работников и офицеров.Каждый из них обладает определенными свойствами:

sexworkers-own
[ assault?       ;; is assaulted?
  trust?         ;; trusts/avoids police to report assault?
  protection?    ;; was protected/arrested by police after report?
  prob-report ]  ;; overall probability to report based on the 
three factors before

officers-own
[ arrest?     ]  ;; arrests or protects assault victims?

В начале симуляции секс-работники случайным образом распределяются среди жертв нападения [нападение?= верно] или нет с вероятностью 0,1% (подвергается преследованию).Офицеры случайным образом распределяются как арестующие секс-работников [арест?= true] с вероятностью 90% ареста.

Во время симуляции секс-работники, подвергшиеся нападению, сталкиваются с возможностью подачи отчета.Они либо решают сотрудничать, либо избегают этого с вероятностью 50%.Если они решают сотрудничать, их атрибут [доверие?] Является истинным, если они избегают, это ложно.

Как только секс-работник решит сотрудничать, полицейские следят за отчетом.В зависимости от [ареста?] Они либо арестовывают, либо обеспечивают защиту.Это приводит к атрибуту секс-работника [защита?].

Каждый из этих вариантов приводит к разнице общей вероятности сообщения (вероятного отчета), которая будет важна позже.

Моя проблема: Я хочу, чтобы секс-работники, которые подверглись нападению, вышли из цикла и перестали выполнять решение сотрудничать или избегать, когда они сделали выбородин раз.Я не могу понять, как изменить свой код, чтобы исключить секс-работников, которые либо уклонялись, либо отказывались от общей процедуры подачи заявок на нападавших секс-работников.

Процесс подачи отчетов, сотрудничества / уклонения, а также защиты сотрудников/ арест работает хорошо.Мне просто нужен способ сделать так, чтобы секс-работники, подвергшиеся нападению, выбрали вариант исключения, поэтому только недавно подвергшиеся нападению секс-работники сталкиваются с выбором.

Большое вам спасибо!

Вот мой код:

to go
  ;; asks sex workers to act depending on whether they have been assaulted
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ;;;;;;;;;PROBLEM: THIS SHOULD NOT BE LOOPED;;;;;;;;;;;;;;;;;;
  ;IF ASSAULT? THE ACTION SHOULD BE CARRIED OUT ONLY ONCE;;;;;;
  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  ask sexworkers with [ not assault? ] [victimize ]
  ask sexworkers with [ assault? ] [ file ]
end

; determines probability of sex workers being assaulted (1%)
; sets the probability value to file reports to 0.5 
; if sex workers haven't previously been assaulted
to victimize
    ifelse random-float 100 <= 0.1
    [ set assault? true ]
    [ set assault? false ]
  if assault? = false [ set prob-report 0.5 ]
end

; determines probability of sex workers reporting violence (50%)
to file
   ifelse random-float 1 <= 0.5
  [ set trust? true ]
  [ set trust? false ]
  if assault? = true and trust? = false 
  [ avoid ]
  if assault? = true and trust? = true
  [ cooperate ] 
end

; if assaulted sex workers report, the follow-up procedure is started
to cooperate
   follow-up 
end

; this sets the probability value to file reports to 0 
; if sex workers have been assaulted, but didn't report
to avoid
   if assault? = true and trust? = false  
   [ set prob-report 0 ]
end

; asks officers who arrest to arrest and the others to protect
to follow-up
  ask officers with [ arrest? = false] [ protect ]
  ask officers with [ arrest? = true ] [ arrest ]
end

; if officers protect, reporting sex workers' protection? attribute is true
; sets the probability value to file reports to 1
; if sex workers have been assaulted, reported, and protected
; and officers' arrest? attribute is false
to protect
  ask sexworkers-here with [ trust? = true ] [ set protection? true ]
  ask sexworkers [
  if assault? = true and trust? = true and protection? = true 
    [ set prob-report 1 ]
  ]    
end

; if officers arrest, reporting sex workers' protection? attribute is false
; sets the probability value to file reports to -1
; if sex workers have been assaulted, reported, and arrested
; and officers' arrest? attribute is true
to arrest
  ask sexworkers-here with [ trust? = true ] [  set protection? false ]
  ask sexworkers [
    if assault? = true and trust? = true and protection? = false 
    [ set prob-report -1 ]
  ]
end

1 Ответ

1 голос
/ 15 марта 2019

Если на них нападают в одном тике, что вы хотите, чтобы произошло в следующих и последующих тиках? Влияет ли тот факт, что они подвергались нападению на каком-то этапе своего прошлого, как-то влияет на их будущее поведение?

Они запоминаются навсегда, потому что для переменной нападения установлено значение true, и нет возможности изменить ее обратно. Если вам нужно, чтобы они запомнили это навсегда, вам понадобится дополнительный атрибут, чтобы отслеживать факт нападения, о котором они еще не приняли решение. Затем, когда они приняли решение, вы меняете статус этого атрибута. Вы не можете хранить две разные части информации (когда-либо подвергавшиеся нападению и имеющие нерешенное нападение) с одной и той же переменной.

...