Newcomb communicative acts
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
General information
This is a model I used in my bachelor thesis entitled:
Agentenbasierte Simulation in der Sozialwissenschaft. Die Modellierung von Extremismus in Meinungsdynamiken.
(in english: Agentbased simulation in social science. The modelling of extremism in opinion dynamics.)
Basically it's a multidimensional version of a deffuant-style bounded confidence opinion dynamics model. (Deffuant et al. 2000) The design is based on the article "An Approach to the Study of Communicative Acts" by TM Newcomb (1953). There is an extremism rule added. It is based on the simplified version of the relative agreement model (Deffuant et al. 2002) presented by Lorenz (2012).
Interaction rules
Pairs of Agents are randomly picked. They change their opinion according to the "opinion-change" variable (see below) if the average of the differences of their opinions in ALL dimensions is below the value of eps. The opinion modification appears in just ONE dimension that is randomly picked.
This sequence is repeatet (number of agents * number of opinion-dimensions) times per tick.
Also there is an extremism rule. Agents that have a very low or very high opinion in dimension one become extremists. They are characterized by the behavior not to change their opinion in this dimension. In all other dimensions they act normal. The variable extremism-range specifies how high or low the opinion must be to become an extremist.
Elements on the interface tab
num-agents: Selects the number of agents
num-ops: Selects the number of opinons every agent has
eps: Selects the confidence bound
extremism-range: Selects the width of the margins where the extremist? variable set true
opinion-change: Selects different rules for a pair of agents to change their opinion. The rules are:
one changes complete: Agent A adopts the opinion of
agent B. Agent B doesn't change.
both change half: Agent A and B meet at the average
of their opinions
visuals: If activated, a visualisation of the dynamic appears in the world. Notice that this is computationally intensive.
The visualisation in the world gives you the opportunity to track the behaviour of the model on a very basic level. The opinion dimensions are stacked. Every pink dot is one opinion. If the opinion is -1, the dot is on the left border of the world, if it's 1 the dot is on the right border. The grey lines connect the dots that belong to the same agent.
It is hardly possible to see the size of the clusters in the world. Therefore the are a number of plot windows plotting histograms of the deviation of opinions in the dimensions. The dimensions they are plotting are listed in the title of the plot window. The lower dimension is plottet as red bars, the higher dimension is plotted as green lines. The dimension one is the upmost dimension in the world view.
The monitor "proportion-extremists" shows the proportion of extremists in the overall population. It can gain values between 0 and 1.
The monitor "distribution-extremists" calculates the number of extremists with a very high opinion minus the number of extremists with a very low opinion, divided by the overall number of extremists. If abs(opinion)>(1-extremism-range) is true, the agent becomes an extremist.
Additional reporters for behaviour space experiments
The reporter "change-occured?" reports false if the opinion profile did not change since 1000 ticks. This can be used to stop runs that reached a stable state.
The reporter "format" creates a string out of the agents current and initial opinion profiles with all values seperated by comma. The data is organized in the following way:
a(X, Y ,Z) stands for opinion Y of agent X. Z can either be c for the current opinion Y of agent X or i for the initial opinion.
the string then looks like:
"a(1,1,c), a(1,2,c),..., a(1,5,c), a(2,1,c),..., a(num-agents,5,c), , ,
a(1,1,i),a(1,2,i),..., a(1,5,i), a(2,1,i),..., a(num-agents,5,i)"
If there are less than 5 opinion dimensions, the missing values are filled with "NA".
References
Deffuant, Guillaume; Neau, David; Amblard, Frederic und Gerard Weisbuch (2000): Mixing beliefs among interacting agents In: Advances in Complex Systems, Vol. 3, 87 - 98.
Deffuant, Guillaume; Amblard, Frederic; Weisbuch Gerard und Thierry Faure (2002): How can extremism prevail? A study based on the relative agreement interaction model In: Journal of Artificial Societies and Social Simulation, Vol. 5 (4)
Lorenz, Jan (2012): Zur Methode der agenten-basierten Simulation in der Politikwissenschaft am Beispiel von Meinungsdynamik und Parteienwettstreit In: Braeuninger, Thomas; Baechtiger, Andre und Susumu Shikano (Hrsg.): Jahrbuch fuer Handlungs- und Entscheidungstheorie. Band 7: Experiment und Simulation. VS Verlag fuer Sozialwissenschaften
Newcomb, Theodore M.(1953): An approach to the study of communicative acts. In: Psychological Review, Vol. 60 (6), 393-404
Comments and Questions
globals[ proportion-extremists distribution-extremists change? prev-op initial-profile ] breed [agents agent] breed [points point] ;; the points are used for visualisation only and don't affect the model's dynamics agents-own[ op ;; a list that holds the opinions of the agent extremist? ;; a binary value that is set true if the agent's opinion is in the extremism-range ] to setup clear-all reset-ticks create-agents num-agents [ set op (list) repeat num-ops [set op lput (random-float 2 - 1) op] set hidden? true ifelse (abs (item 0 op) > 1 - extremism-range) [set extremist? true][set extremist? false] ] visualise extremism-makro mk-initProfile set prev-op map [precision ? 2] reduce sentence map [[op] of ?] sort agents ;; this is important for the change-occured? reporter set change? true end to go repeat num-agents * num-ops[ ask one-of agents [update-opinion]] if ( visuals) [visualise] extremism-makro tick end to update-opinion ;;turtle procedure ;;makes the agents change their opinion values let i random num-ops let B one-of other agents let B-op [op] of B let AB attraction B-op if (AB )[ if (opinion-change = "both change half")[ let new-op (item i op + item i B-op) / 2 if (not(extremist? and i = 0) )[ set op replace-item i op (new-op) if (abs (item 0 op) > 1 - extremism-range) [set extremist? true] ] ask B [ if (not(extremist? and i = 0) )[ set op replace-item i op (new-op) if (abs (item 0 op) > 1 - extremism-range) [set extremist? true] ] ] ] if (opinion-change = "one changes complete")[ if (not(extremist? and i = 0) )[ set op replace-item i op (item i B-op) if (abs (item 0 op) > 1 - extremism-range) [set extremist? true] ] ] ] end to-report attraction [liste] ;; this reporter calculates the attraction between two agents based on the ;; average of the differences between their opinions in all opinion-dimensions let i 0 let erg 0 repeat num-ops [ set erg erg + abs(item i op - item i liste) set i i + 1 ] report erg / num-ops < eps end to visualise ;; creates the visualisation in the world window. For every opinion of every agent ;; a point is created and set to x coordinates of the world. the different dimensions are stacked to the y axis ask points [die] foreach sort agents[ let i 0 let prev 0 create-points num-ops [ set color 125 set shape "dot" if (prev != 0)[create-link-with prev] setxy ([item i op] of ? * 9) ((num-ops - i - 0.5) / num-ops) * max-pycor set i i + 1 set prev self] ] end to extremism-makro ;;calculates the output of the monitors in the interface tab set proportion-extremists count agents with [extremist?] / num-agents ifelse (proportion-extremists != 0)[ set distribution-extremists (count agents with [extremist? and item 0 op > 0] - count agents with [extremist? and item 0 op < 0]) / count agents with [extremist?] ][set distribution-extremists "NA"] end to-report change-occured? ;; this reporter reports false if no change occured for more than 1000 ticks. It is used for behaviour space experiments. if (ticks mod 1001 = 1000)[ let op-list map [precision ? 2] reduce sentence map [[op] of ?] sort agents let i 0 set change? false foreach op-list[ if (? != item i prev-op) [set change? true] set i i + 1] set prev-op op-list ] report change? end to mk-initProfile set initial-profile (list) foreach sort agents[ set initial-profile lput (map [precision ? 2][op] of ?) initial-profile repeat 5 - num-ops[set initial-profile lput "NA" initial-profile]] end to-report format ;;This reporter organizes the data for statistical analysis. let current-profile (list) foreach sort agents[set current-profile lput (map [precision ? 2][op] of ?) current-profile repeat 5 - num-ops[set current-profile lput "NA" current-profile]] set current-profile reduce sentence current-profile set initial-profile reduce sentence initial-profile report (word txt current-profile ",," txt initial-profile) end to-report txt [liste] let text "" foreach liste [set text (word text ? ",")] report text end
There is only one version of this model, created almost 13 years ago by Hannes Bruns.
Attached files
No files
This model does not have any ancestors.
This model does not have any descendants.