Wisdom of Crowd vs. Unpopular Norm
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
A model of bystanders' effect on volunteering (in case of an observed crime or critical situation) is extended to incorporate the possibility of a sense of guilt (after nonintervention). Based on sound theoretical and experimental foundations, an existing model of the spread of unpopular norms is used to allow dispersion of an unpopular norm (a mild crime) so that a population of agents may follow or accept it. The question asked is why a society (as a whole) is not able to overturn an unpopular norm through interventions. The model and simulation reveal that a sense of guilt of bystanders improves the volunteering tendency. The simulation results also provide pieces of evidence of clear differentiation between the individual and societal perception of a crime. This is an important result as it suggests that, in a certain situation and community, we can predict how people will react against an unpopular norm.
HOW IT WORKS
A model to study dynamics of co-evolution of the spread of Unpopular norms and guilt-driven volunteering (to intervene). In addition to the time dynamics, we have also introduced spatial dynamics, which allow the agents to have the capability to move (along with their states). The form of mobility introduced is random-walk.
HOW TO USE IT
- Set Models parameters (UN, VD, Combined)
- Set simulation parameters population, interaction range (radius), are agents mobile, should the guilt be incorporated in volunteering model and model to run (Centola, Gerritsen or Combined)
- press Setup, press Go
THINGS TO NOTICE
UN alone
- As the radius of interaction increase, the DBs who end up complying the UN increase.
- Within a radius, as the initial \% age of TBs increase, the DBs who end up complying the UN increase.
- Compliance jumps to highest level right at the start and then keep fluctuating across this highest level.
- As the population density increases, the DBs who end up complying the UN increase.
VD alone
- As the radius of interaction increase, the believers who end up as being neutralized by the volunteering effect decrease substantially.
- Within a radius, as the initial \% age of TBs increase, the neutralization is rather unclear (no relationship can be drawn).
- Neutralization happens progressively (and in phases) with time and then stays constant.
- As the population density increases, neutralization tendency decreases.
Combined
A sense of guilt of bystanders improves the volunteering tendency as the spread of UN happens.
THINGS TO TRY
EXTENDING THE MODEL
NETLOGO FEATURES
RELATED MODELS
CREDITS AND REFERENCES
To appear: "When the Wisdom of Crowd is able to overturn an Unpopular Norm? Lessons learned from an Agent-Based Simulation" in ACM SIGSIM PADS 2021 scheduled on June 2021 (https://www.acm-sigsim-pads.org/).
Comments and Questions
extensions [table] breed [believers believer] ; True blievers of an unpopular norm breed [disbelievers disbeliever] ; Disblievers of an unpopular norm turtles-own[observe belief strength compliance complying-for property believe offender-index perform_intervention my-thresholds neighbor-list Enforcement enforcement-Need desire intention] globals [DBComp DBEnf cnt-inter cnt-offenders cnt-neutralized curr-oi] to setup __clear-all-and-reset-ticks ask patches [set pcolor white] let total_number population * count patches / 100 ; total population in terms of percentage of space to be acquired let number_of_TB total_number * tb-perc / 100 ; number of TBs in the population let number_of_DB total_number - number_of_TB ; the rest are DBs in the population ;//////////////////////////////////; ;creating TBs, color = red, placed randomly at empty patches only (no overlapping) create-believers number_of_TB [ set color red setxy random-pxcor random-pycor while [any? other turtles-here] [ let empty_patch one-of patches with [any? turtles-here = false] move-to empty_patch ] ] ;//////////////////////////////////; ;//////////////////////////////////; ; setting up TBs ask believers[ set belief 1 ; a TB really believes in UN set compliance 1 ; a TB is also complying the UN initially set strength 1 ; a TB is quite strong set heading 0 ; visual representation of compliance set complying-for 0 ; for how many continuous iterations a TB is complying set property "offender" ; in addition of being believer, a TB is also offender initially set observe table:make set believe table:make ; table of various observations set offender-index 1 ; since TB is offender so it offends with highest possible value of 1 set size 1 set shape "arrow" ] ;//////////////////////////////////; ;//////////////////////////////////; ; creating DBs color = green, placed randomly at empty patches only (no overlapping) create-disbelievers number_of_DB [ set color green setxy random-pxcor random-pycor while [any? other turtles-here] [ let empty_patch one-of patches with [any? turtles-here = false] move-to empty_patch ] ] ;//////////////////////////////////; ;//////////////////////////////////; ; setting up DBs ask disbelievers [ set belief -1 ; a DB does not believe in UN set compliance -1 ; a DB is also not complying the UN initially set strength random-float 0.3 ; a DB is NOT strong set heading 180 ; visual representation of NOT compliance set complying-for 0 ; for how many continuous iterations a DB is complying set property "bystanders" ; in addition of being DB, a DB is also a bystander initially set observe table:make set believe table:make ; table of various observations set perform_intervention "no" ; definately not to perform intervention initially set my-thresholds threshold ; the changeable my-thresholds initialized with variable threshold set size 1 set shape "arrow" ] ;//////////////////////////////////; ; table of observations; IRRESPECTIVE of TB or DB. first observation is number_intervention_by_others = 0, and crime seriousness = parameter crime-intensity / 3 (from enumeration to index from 0.33 to 1) ask turtles [table:put observe "no_intervention_by_others" 0 table:put believe "seriousness" crime-intensity / 3] ;Global counting variables set cnt-offenders 0 ; number of offenders set cnt-inter 0 ; number of bystanders intervening set cnt-neutralized 0 ; number of offenders neutralized set curr-oi 0 ; average offending index in the system end to go if ticks = stop-at [stop] if models = "Centola" [ ED ; Apply model of emporer dilemma applied to all agents reportdata ; save data for analysis ;VD ; Apply model of volunteering dilemma applied to all agents draw-graphs ] if models = "Gerritsen" [ ;ED ; Apply model of emporer dilemma applied to all agents reportdata ; save data for analysis VD ; Apply model of volunteering dilemma applied to all agents draw-graphs ] if models = "Combined" [ ED ; Apply model of emporer dilemma applied to all agents reportdata ; save data for analysis VD ; Apply model of volunteering dilemma applied to all agents draw-graphs ] if mobility [ask turtles [random-walk]] ; let the agents move random walk if enabled tick end to ED ask turtles [ let N_Neighbors turtle-set turtles in-radius radius ; set of agents in the neighborhood of an agent (regular network within parameter radius) let Ni_list (list N_Neighbors) let Ni count N_Neighbors if Ni = 0 [set Ni 0.001] let Bi [belief] of self let NCi count N_Neighbors with [Compliance != Bi] ; how many agents in the neighborhood whose compliance is not equal to belief (self) ; enfocement need = (1 - (belief (self)/total number of neighbors)) x NCi (above) / 2 set enforcement-Need (1 - Bi / Ni) * NCi ; enfocement need = (1 - (belief (self)/total number of neighbors)) x NCi (above) / 2 set enforcement-need enforcement-Need / 2 COMPLY? ; do compliance sub-routine ENFORCE? ; do enforcement sub-routine ] end TO COMPLY? ;; disbeliever complies if the proportion of neighbors enforcing compliance is greater than the strength of disbeliever's belief; let Si [strength] of self let Bi [belief] of self let N_Neighbors turtle-set turtles in-radius radius let Ej count N_Neighbors with [Enforcement = -1 * Bi] ;; neighbors enforcing opposite belief let Ni count N_Neighbors if Ni = 0 [set Ni 0.001] ; just to aboid division by 0 ; the equation implementation ifelse ((-1 * Bi / Ni) * Ej ) > Si [set compliance -1 * Bi] [set compliance Bi] if Compliance = 1 [set complying-for complying-for + 1] if Compliance = -1 [set complying-for 0] end to VD let in-range nobody let current-intervener nobody ask turtles with [property = "offender"] ; only TBs which are offenders will be affecting an agent to intervene [ ifelse (offender-index <= 0) [set color black set heading 180] ; nuetralized !!!!!!!!!!!!!!!!!!!! [ set in-range other turtles with [property != "offender" and complying-for < crime-intensity] in-radius radius ; not offender and recently compyling or no complying if (count in-range != 0) [ set current-intervener one-of in-range ; if such an agent exist, choose one of these as potential interviener ask current-intervener [set property "intervener" set color blue] ; set its propoerty to intervener and color to blue ask current-intervener [ ; now the chosen potential intervener woudl see who are related neighbors set neighbor-list turtles with [ property != "offender"] in-radius radius ] if (current-intervener != nobody) [applyrules current-intervener who] ; VD apply rules call on the current potential inteverner ] ] ] end to ENFORCE? let Si [strength] of self let Bi [belief] of self let Ci [compliance] of self let Wi Enforcement-Need ;let N_Neighbors turtle-set turtles-on neighbors let N_Neighbors turtle-set turtles in-radius radius let Ej count N_Neighbors with [Enforcement = -1 * Bi] ;; neighbors enforcing opposite belief let Ni count N_Neighbors if Ni = 0 [set Ni 0.001] ifelse ((-1 * Bi / Ni) * Ej) > (Si + K) AND Bi != Ci [ ;RELATIONSHIP set Enforcement -1 * Bi ;set shape "circle" set belief 1 set strength 1 set compliance 1 set complying-for 0 set size 1 set shape "arrow" set heading 0 set property "offender" ;set observe table:make set believe table:make set offender-index 1 ] [ ifelse (Si * Wi) > K AND Bi = Ci [ set Enforcement Bi ] [ set Enforcement 0 ] ] end to applyrules [current-intervener w] let off turtle w ; the aggressor agent / offender ;step 1; count m let m 0 ; m = the number of neighbors who already have performed intervention ;step 2. if there is no intervention already, the belief is that 'intervention will be evaluated negatively', otherwise not ask current-intervener [set m count neighbor-list with [perform_intervention = "yes" ]] ask current-intervener [ifelse (m = 0) [table:put believe "intervention-evaluated-negatively" true] [table:put believe "intervention-evaluated-negatively" false]] ;step 3. ;setting belief with another attribute 'other_observe_me' n with value neighbors list count ask current-intervener [table:put believe "other-observe-me" count neighbor-list] ;step 4. 'audience inhibition' = n or n - m depending on of intervention will be evulated negatively ask current-intervener [ifelse (table:get believe "intervention-evaluated-negatively") [table:put believe "audience-inhibation" table:get believe "other-observe-me"] [table:put believe "audience-inhibation" table:get believe "other-observe-me" - m]] ;step 5. ;setting belief 'intervention_cost' = n - m [there is not much difference in rule 3 and 4 practically, with many agents] ask current-intervener [table:put believe "intervention-cost" count neighbor-list - m] ;step 6. ; gettting speific values from table belief and comparing them with those thresholds , when the threshold values will be greater than of given beliefs then put another attribute to the table belief 'personal-responsibility' and its value 'true' ask current-intervener [ ifelse (table:get believe "intervention-cost" < my-thresholds and table:get believe "audience-inhibation" < my-thresholds ) ; no change in two threshold values [ table:put believe "personal_responsibility" true ] [table:put believe "personal_responsibility" false ] ] ;step 7. Determine belief about seriousness of the event; that is, seriousness=๐ ๐๐๐๐๐ข๐ ๐๐๐ ๐ /(n-m) power ๐ผ, where, initial value of seriousnessis normalized against crime_intensity enumerated as ;mild,medium and strong. Both crime_intensity and ๐ผ are simulation parameters. let x 0 ask current-intervener [ let y count neighbor-list - m if y = 0 [set y 0.001] ; to avoid division by 0 set x table:get believe "seriousness"/ (y ^ alpha) table:put believe "seriousness" x ] ;step 8. Determine belief if it is an emergency situation or not; ifseriousness is greater thannormthenemergency= yes, other-wise, emergency = no, where norm is a simulation parameter. ask current-intervener [ifelse (table:get believe "seriousness" > norm ) [ table:put believe "Emergency" true] [ table:put believe "Emergency" false] ] ;step 9. Know desire; if it is an emergency, the agent has a desire tointervene, otherwise, it has not ask current-intervener [ ifelse (table:get believe "Emergency") [ set desire "intervention" ] [ set desire "no_need_of_intervention" ]] ;step 10. Know Intention; if an agent feel_personal_responsibility andhas a desire, it has an intention to intervene, otherwise, ithas not. ask current-intervener[ ifelse ( table:get believe "personal_responsibility" and desire = "intervention") [ set intention "help" ] [ set intention "not_to_intervene" ] ] ;by default the intervener is capable and has resource. ask current-intervener [table:put believe "capable" true table:put believe "resources" true] ;step 11. ;when the belief contain the attributes 'capable' and 'resources' as true then the belief have another value 'opportunity_for' as true ask current-intervener[ if (table:get believe "capable" and table:get believe "resources" ) [table:put believe "opportunity_for" true ] ] let guilt 0 ask current-intervener[ ;step 12. Decide to intervene; if an agent has an intention and oppor-tunity it will perform. ifelse (intention = "help" and table:get believe "opportunity_for" = true) [ set perform_intervention "yes" set color brown ] ;step 13. Update threshold; if an agent does not perform, a guilt will be developed (guilt=๐๐๐๐๐_๐๐๐ก๐๐๐ ๐๐ก๐ฆโ๐/๐), and threshold(of this agent i) will be updated (๐กโ๐๐๐ โ๐๐๐๐+=๐๐ข๐๐๐ก) [ ifelse incorporate-guilt ; only if this flag is enabled [ set perform_intervention "no" set guilt crime-intensity - (m / count neighbor-list) set my-thresholds my-thresholds + guilt ] [ set perform_intervention "no" ] ] ] ;step 14. Update offender_index of the offender; if agent has per-formed (in above), the offender_index of offender is updatedas:๐๐ ๐๐๐๐๐๐_๐๐๐๐๐ฅโ=(๐/๐๐๐๐๐_๐๐๐ก๐๐๐ ๐๐ก๐ฆ). let what? false ask current-intervener[ if (perform_intervention = "yes") [set what? true]] if what? [ ask off [ set offender-index offender-index - (m / crime-intensity) ; This is not part of VD model if (offender-index <= 0) [set property "neutralized" set color black set heading 180]] ] end to random-walk rt random 360 ; set random heading forward 1 ; advance one step end to reportdata set DBComp count disbelievers with [compliance = -1 * belief] / count disbelievers * 100 set DBEnf count disbelievers with [enforcement = -1 * belief] / count disbelievers * 100 end to draw-graphs set curr-oi 0 ask turtles with [property = "offender"] [set curr-oi curr-oi + offender-index] set curr-oi curr-oi / count turtles set cnt-inter count turtles with [property = "intervener"] / count disbelievers * 100 set cnt-offenders count turtles with [property = "offender"] / count believers * 100 set cnt-neutralized count turtles with [property = "neutralized"] / count believers * 100 end
There is only one version of this model, created over 3 years ago by Kashif Zia.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.