Attitudes and Behaviours towards Pollution
Model was written in NetLogo 5.0.4
•
Viewed 1029 times
•
Downloaded 48 times
•
Run 0 times
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
Comments and Questions
Please start the discussion about this model!
(You'll first need to log in.)
Click to Run Model
globals [carbon] ;; keeps track of how much pollution there is breed [polluters polluter] breed [nonpolluters nonpolluter] turtles-own [ old-attitude new-attitude ] to setup clear-all set-default-shape turtles "circle" ;; the way "set" commands work: the first argument is the object that will be turned into (or given the property of) whatever the second argument is ask patches [;; every patch will either have a polluter or a nonpolluter placed on them. The probability of one over the other is set by the ratio ifelse random-float 100 < polluter-to-nonpolluter-ratio [ sprout-polluters 1 [ ;; "sprout-" just means that an agent of type set color red - 2 set new-attitude (random init-pol-attitude + 1)] ;; the initial attitude is set to be between (inclusive) 1 and the ini-pol-attitude ] [ sprout-nonpolluters 1 [ ;; this works the same as above, except for nonpolluters now set color yellow - 2 set new-attitude (random init-npol-attitude + 1) ] ] ] ask turtles [ set old-attitude new-attitude ] ;; in order to do synchronous updating, we need to delay when agents update their attitudes, so we separate attitudes into new and old set carbon initial-pollution-level reset-ticks end to go if carbon > (delay-armageddon * armageddon) [ stop ] ;; sometimes we want to see whether carbon could have been pulled back after the armageddon value is reach. We can introduce this by delaying when the simulation stops. ask polluters [ if random-float 100 < prob-local-com [;;every polluter has some probablity of communicating with their local (8) neighbors let npol-list nonpolluters-on neighbors let pol-list polluters-on neighbors ifelse random-float 100 < (100 * ((carbon-sensitivity * carbon) / armageddon)) [ ;; the higher carbon is, the more likely polluters listen to nonpolluters if count turtle-set npol-list with [old-attitude > npol-behave-thresh] > pol-neighbor-stubbornness [ ;;number of nonpolluters behaving greater than polluter's stubbornness? set new-attitude new-attitude - 1 ] ][ if count turtle-set pol-list with [old-attitude > pol-behave-thresh] > pol-echochamber-thresh [ entrench-pol-attitude ;; the code for this command is towards the end. It basically entrenches an attitude as long as it hasn't reach the maximum allowed level ] ] ] ] ask nonpolluters [ ;; this code should be the same as above, but with relevant changes for nonpolluters. if random-float 100 < prob-local-com [ let pol-list polluters-on neighbors let npol-list nonpolluters-on neighbors ifelse random-float 100 < (100 * ((carbon-sensitivity * carbon) / armageddon))[ ;; the higher carbon is, the less likely nonpolluters listen to polluters if count turtle-set npol-list with [old-attitude > npol-behave-thresh] > npol-echochamber-thresh [ entrench-npol-attitude ] ][ if count turtle-set pol-list with [old-attitude > pol-behave-thresh] > npol-neighbor-stubbornness [;; number of polluters behaving greater than nonpolluter's stubbornnes? set new-attitude new-attitude - 1 ] ] ] ] ask turtles [ if random-float 100 < prob-non-local-com [;; every agent (or "turtle") has a probability of communicating non-locally let tlist [] while [count turtle-set tlist < 8] [;;after a turtle has been selected, a random set of 8 other turtles are picked set tlist fput one-of turtles tlist ;; pick a random turtle until you have a list containing n turtles ] let nlist turtle-set tlist ;; turns the list of turtles into an agent set (this tells netlogo to treat the objects in the list as agents) if is-polluter? self [;; if the "center" agent that's about to interact with the 8 non-local "neighbors" is a polluter, then ... ifelse random-float 100 < (100 * ((carbon-sensitivity * carbon) / armageddon))[ if count turtle-set nlist with [old-attitude > npol-behave-thresh and breed = nonpolluters] > pol-neighbor-stubbornness [ set new-attitude new-attitude - 1 ] ];;if the "center" agent isn't a polluter, then they have to be a nonpolluter, that's why the "ifelse" command was used [ if count turtle-set nlist with [old-attitude > pol-behave-thresh and breed = polluters] > pol-echochamber-thresh [ entrench-pol-attitude ] ] ] if is-nonpolluter? self [ ifelse random-float 100 < (100 * ( (carbon-sensitivity * carbon) / armageddon))[ if count turtle-set nlist with [old-attitude > npol-behave-thresh and breed = nonpolluters] > npol-echochamber-thresh [ entrench-npol-attitude ] ] [ if count turtle-set nlist with [old-attitude > pol-behave-thresh and breed = polluters] > npol-neighbor-stubbornness [ set new-attitude new-attitude - 1 ] ] ] ] ] ask polluters with [new-attitude <= 0] [ ;; this turns polluters with a new-attitude of 0 into a nonpolluter with an attitude of 1 set breed nonpolluters set color yellow - 2 set new-attitude 1 ] ask nonpolluters with [new-attitude <= 0] [ ;; this turns nonpolluters with a new-attitude of 0 into a polluter with an attitude of 1 set breed polluters set color red - 2 set new-attitude 1 ] ask turtles [ set old-attitude new-attitude ;; all the agents now synchronically update if is-polluter? self [ ;; for those polluters with an attitude at or above the behaviour threshold, they become "bright", else they are "dimmed" ifelse old-attitude >= pol-behave-thresh [ set color red] [set color red - 2] ] if is-nonpolluter? self [ ifelse old-attitude >= npol-behave-thresh [ set color yellow] [set color yellow - 2] ] ] calculate-carbon ;;the code for updating carbon is below tick ;; this keeps track of how much time has gone by. It adds a "tick" once we reach the code here. It effectively counts every synchronis update end to entrench-pol-attitude if new-attitude < pol-max-entrench [ set new-attitude new-attitude + 1 ] end to entrench-npol-attitude if new-attitude < npol-max-entrench [ set new-attitude new-attitude + 1 ] end to calculate-carbon ask turtles [ ;;carbon is updated by adding to past carbon the amount that each agent contributes to carbon. Note that some nonpolluters can still contribute carbon if the max-carbon-offset parameter is lower than max-carbon-contribution let x [new-attitude] of self if is-nonpolluter? self [ set x (0 - x) ] let y ((((max-carbon-contribution - max-carbon-offset) / (pol-max-entrench + npol-max-entrench)) * (x + npol-max-entrench)) + max-carbon-offset ) set carbon carbon + y ] if carbon <= 0 [ set carbon 0 ] endis created
There is only one version of this model, created about 11 years ago by Bert Baumgaertner.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Attitudes and Behaviours towards Pollution.png | preview | Preview for 'Attitudes and Behaviours towards Pollution' | about 11 years ago, by Bert Baumgaertner | Download |
This model does not have any ancestors.
This model does not have any descendants.