Print Marketplace
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This model was adapted "ThroneCommCircuit.netlogo" by Jeremy Throne, University of California, Santa Cruz, 2012. Its purpose is to create a functioning replica of Robert Darnton's "communications circuit." During the hand-press era (from Gutenberg through the invention of steam presses in the 19th century) books were produced in relatively small quantities and passed through many hands before finally reaching their readers. The print marketplace grew steadily but unevely across this period. As the European economy developed, the book trade grew along with it, but publishing was subject to various contraints. On the one hand, state censors sought to quell seditious publishing and, in various ways, sought to control book production. On the other hand (in England, at least) printing was controlled by a stable and strong monopoly, called The Stationers' Company. This model is designed to show how these three factors: upward population (demand) growth, government suppression, and monopolistic controls generated volatile market conditions.
HOW TO USE IT
This model contains Throne's six original breeds (authors, publishers, printers, shippers, sellers, and readers) and one additional breed (censors). When the model runs, the authors give manuscripts to publishers; publishers submit them to printers; shippers carry books from the printers to the sellers, who sell them to readers. In turn, readers give authors "encouragement," which inspires them to write new manuscripts.
In Throne's original, the quantities of each breed was established at initialization and left unchanging. In this revision, the quantities for each breed are set low and they are set to gradually increase. In this revision, movement in constrained by censors, who suppress all motion with in their orbit. Book production (printing) is controlled by a monopoly of printers who, based on their annual business, either permit or do not permit expansion. These contraints sometimes cause a backlog in the communications circuit, and if that backlog becomes too great, "publishers" can resist censorship.
If the printers experience a very large back-log (that is, their inventory as "jobs" is higher than the supply trigger, the monopoly radius is slightly increased. If their inventory is low, they decrease their monopoly radius.
MOVEMENT: If a censor is present within the turtles surveillance radius, the turtles move about very slowly. Otherwise, they move full speed. The additional movement increases the system's activity. This is the primary mechanism through which the censors constrain turtle behavior.
REFERENCES
Robert Darnton, "What is the History of Books?" in The Book History Reader, 2nd. ed. Jeremy Throne, “Modeling the Communications Circuit: An Agent-based Approach to Reading in “N-Dimensions” forthcoming.
CREDITS
Created by Michael Gavin, University of South Carolina. 2014.
Comments and Questions
;; "Print Marketplace: an Agent-Based Model" ;; by Michael Gavin, University of South Carolina, 2014. globals [ year ;; statistics are calculated annually (every 100 ticks) books-sold ;; calculates cumulative book total smoothed-books-of-readers ;; creates smoothed line of book-sold for easier reading smoothed-num-of-printers ;; creates smooth line of the count of printers for easier reading monopoly-radius ;; distance that printers look for rivals monopolize-trade ;; true/false variable that selects and kills excess printers last-years-sales ;; global calculation of books taken from printers ] ;; The following breed types are based very closely on Jeremy Throne's original model. turtles-own [ surveillance-radius ] ;; distance of vision for all turtles breed [ authors author ] ;; creates a type of turtle named "author" authors-own [ manuscripts ;; provides all "authors" with the ability to store manuscripts encouragement ] ;; provides all "authors" with the ability to receive encouragement breed [ publishers publisher ] ;; creates a type of turtle named "publisher" publishers-own [ submissions ] ;; provides all "publishers" with the ability to store submissions breed [ printers printer ] ;; creates a type of turtle named "printer" printers-own [ jobs ] ;; provides all "printers" with the ability to store jobs breed [ shippers shipper ] ;; creates a type of turtle named "shipper" shippers-own [ cargo ] ;; provides all "shippers" with the ability to store cargo breed [ sellers seller ] ;; creates a type of turtle named "seller" sellers-own [ inventory ] ;; provides all "sellers" with the ability to store inventory breed [ readers reader ] ;; creates a type of turtle named "reader" readers-own [ books ] ;; provides all "readers" with the ability to store books breed [ censors censor ] ;; creates a type of turtle (not included in Throne) named "censor" to setup clear-all set year 1 set smoothed-books-of-readers 0 set monopoly-radius max-monopoly-radius reset-ticks create-authors 2 [ ;; creates authors and sets their initial properties setxy random-xcor random-ycor set shape "person" set color red ;; red signifies where the books are set manuscripts 1 ;; start the author with a single manuscript ] create-publishers 2 [ ;; creates authors and sets their initial properties setxy random-xcor random-ycor set shape "house" set color white ;; white signifies there are no books ] create-printers 2 [ ;; creates printers and sets their initial properties setxy random-xcor random-ycor set shape "x" set color white ;; white signifies there are no books ] create-shippers 2 [ ;; creates shippers and sets their initial properties setxy random-xcor random-ycor set shape "wheel" set color white ;; white signifies there are no books ] create-censors 10 [ ;; creates shippers and sets their initial properties setxy random-xcor random-ycor set surveillance-radius random 10 set shape "wolf" set color white ;; white signifies there are no books ] create-sellers 2 [ ;; creates sellers and sets their initial properties setxy random-xcor random-ycor set shape "triangle" set color white ;; white signifies there are no books ] create-readers 10 [ ;; creates readers and sets their initial properties setxy random-xcor random-ycor set shape "person" set color white ;; white signifies where the books are ] end ;; At go, the turtles are activated. Every 100 ticks a system-level review is performed. STOP after 225 years (22,500 ticks) to go ask authors [ move solicit-publisher ] ask publishers [ move hire-printer resist-oppression ] ask shippers [ move load-cargo deliver-cargo ] ask censors [ move ] ask readers [ move buy-book meet-author ] if ticks = 100 [ perform-review ] if year = 225 [stop] tick end ;; Every 100 ticks (a metric "year"), this procedure is called. to perform-review ;; the following commands control the plot set year year + 1 set-current-plot "Books Published Annually" set-current-plot-pen "Books" set smoothed-books-of-readers 0.7 * smoothed-books-of-readers + ( 0.3 * sum [books] of readers ) ; line smooth rule borrowed from Uri Wilensky, "code examples" plot smoothed-books-of-readers set-current-plot-pen "Population" plot (count readers + count authors) / 5 set-current-plot-pen "Printers" set smoothed-num-of-printers 0.6 * smoothed-books-of-readers + ( 0.4 * count printers ) plot smoothed-num-of-printers set books-sold books-sold + (sum [books] of readers) ;; total books sold is tabulated ask one-of censors [ update-radius warn-stationers ] ;; censors review the state of the system and adjust ask one-of printers [ restrict-printing ] ;; printers enforce their monopoly ask readers [set books 0] ;; books levels are reset expand ;; population growth reset-ticks end ;; censors' procedure, called annually by "perform-review," in which they update their surveillance to update-radius let readers-policed readers in-radius surveillance-radius ifelse count readers-policed > 0 [ let readers-policed-percentage count readers-policed with [books > 0] / count readers-policed ifelse readers-policed-percentage > suppression-threshold [ set surveillance-radius surveillance-radius + 1 ] [ set surveillance-radius surveillance-radius - 1 ] ] [ set surveillance-radius surveillance-radius + 1 ] if surveillance-radius < 0 [ set surveillance-radius 0 ] end ;; censors' procedure, called annually by "perform-review," in which they alert stationers to warn-stationers if any? sellers in-radius surveillance-radius [ ask sellers in-radius surveillance-radius [ set surveillance-radius [surveillance-radius] of myself ] ] if any? shippers in-radius surveillance-radius [ ask shippers in-radius surveillance-radius [ set surveillance-radius [surveillance-radius] of myself ] ] if any? printers in-radius surveillance-radius [ ask printers in-radius surveillance-radius [ set surveillance-radius [surveillance-radius] of myself ] ] if any? publishers in-radius surveillance-radius [ ask publishers in-radius surveillance-radius [ set surveillance-radius [surveillance-radius] of myself set submissions 0 ] ] ;; one publisher's manuscripts are confiscated end ;; Expansion is controlled on a simple line. Most turtles have a 50-50 chance of adding a single ;; turtle; readers are adding on an exponential line. to expand ask one-of authors [ hatch one-of [ 1 0 ] [ setxy random-xcor random-ycor set shape "person" set color red set manuscripts 1 ] ] ask one-of sellers [ hatch one-of [1 0] [ setxy random-xcor random-ycor set shape "triangle" set color white ] ] ask one-of publishers [ hatch one-of [0 1] [ setxy random-xcor random-ycor set shape "house" set color white ] ] ask one-of shippers [ hatch one-of [1 0] [ setxy random-xcor random-ycor set shape "wheel" set color white ] ] ask one-of printers [ hatch one-of [1 0] [ setxy random-xcor random-ycor set shape "x" set color white ] ] ;; Reading population set to grow more quickly on a simple but ever-increasing rate. ask one-of readers [ hatch round (year / 50 ) [ ;; creates readers and sets their initial properties setxy random-xcor random-ycor set shape "person" set color white ] ] ;; but sometimes there's a catastrophe check-for-catastrophe end to check-for-catastrophe let catastrophe-throw random 100 if catastrophe-throw > 95 and catastrophe-throw <= 98 [ let num-readers-to-die round ( count readers / 5 ) repeat num-readers-to-die [ ask one-of readers [ die ] ] ] if catastrophe-throw >= 99 [ let big-num-readers-to-die round ( count readers / 4 ) repeat big-num-readers-to-die [ ask one-of readers [ die ] ] ] if catastrophe-throw <= 1 [ let big-num-readers-to-hatch round ( count readers / 4 ) ask one-of readers [ hatch big-num-readers-to-hatch [ setxy random-xcor random-ycor set shape "person" set color white ] ] ] end ;; Set printer restrictions rule. to restrict-printing ifelse mean [ jobs ] of printers < supply-trigger [ set monopoly-radius monopoly-radius + .5 ] [ set monopoly-radius monopoly-radius - .5 ] if monopoly-radius > max-monopoly-radius [ set monopoly-radius max-monopoly-radius ] if monopoly-radius < min-monopoly-radius [ set monopoly-radius min-monopoly-radius ] repeat one-of [ 5 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 ] [ ask one-of printers [ set jobs 0 enforce-monopoly ] ] end ;; This command moves the turtles. to move ifelse count censors in-radius surveillance-radius = 0 [ rt random 50 ;; turns a turtle some portion of 50 degrees to the right lt random 50 ;; turns a turtle some portion of 50 degrees to the left fd .1 ;; advances forward 1 patch ] [ rt random 50 lt random 50 fd 1 ] end ;; AUTHOR FUNCTIONS ;; The following procedure is borrowed closely from Throne's original. If authors bump into ;; publishers while carrying a manuscript, the manuscripts are converted to "submissions." to solicit-publisher if any? publishers-here [ if manuscripts > 0 ;; and the author has a book [ set manuscripts manuscripts - 1 ;; remove manuscript from author set color white ask one-of publishers-here [ set submissions submissions + 1 ;; increase submissions to publisher set color red ] ] ] end ;; PUBLISHER FUNCTIONS ;; to hire-printer if submissions > 0 and any? printers-here and count censors in-radius surveillance-radius = 0 [ set submissions submissions - 1 ;; take a submission from the publisher ask one-of printers-here [ set jobs jobs + 1 ] ] end ;; when their backlog becomes too high, publishers lash out against the censors, but receive punishment in turn. to resist-oppression if submissions > backlog-threshold [ ; if inventory of submissions has accumulated if any? censors in-radius surveillance-radius [ ; publishers look for censors in radius ask censors in-radius surveillance-radius [ set surveillance-radius 0 ; they then basically shut the censor down set color red ] ] ; and change its color to red. However, they receive backlash (their submissions are lost) repeat round ( count publishers / ( random count publishers + 1 ) ) [ ask one-of publishers [ set submissions 0] ] ;; and any number of publishers feel the pain. ask one-of printers [ hatch 1 [ ; but the moment of social breakdown opens a space for an entrepreneurial printer to open shop setxy random-xcor random-ycor set shape "x" set color white ] ] ] end ;; SHIPPER PROCEDURES ;; When out of state control shippers face a printer before reorienting. Otherwise, they move normally. to ship ifelse count censors in-radius surveillance-radius = 0 and cargo = 0 and any? printers with [ jobs > 0 ] [ face one-of printers with [ jobs > 0 ] rt random 50 lt random 50 fd 1 ] [ rt random 50 lt random 50 fd .2 ] end ;; The "load-cargo" procedure is based closely on Throne's original model. ;; If printers bump into a printer, and if the printer has a job, the shipper takes it. to load-cargo if any? printers-here with [ jobs > 0 ] and count censors in-radius surveillance-radius = 0 ;; if the shipper meets a printer with jobs waiting [ ask one-of printers-here with [ jobs > 0 ] [ set jobs jobs - 1 ] ask one-of shippers-here [ set cargo cargo + 1 ] ;; increase cargo of shipper by one unit ] end ;; The "deliver-cargo" procedure is based closely on Throne's original model. ;; If printers bump into a printer, and if the printer has a job, the shipper takes it. to deliver-cargo if any? sellers-here and count censors in-radius surveillance-radius = 0 [ let delivery cargo ;; turn the cargo into a delivery set cargo 0 ask one-of sellers-here [ set inventory inventory + delivery ] ;; increase the inventory of a seller by the amount of the delivary ] end ;; READER PROCEDURES ;; The "buy book" procedure is based closely on Throne's original. ;; When readers bump into sellers, they buy books. One minor but ;; significant change is that readers can only buy one book per year. to buy-book if any? sellers-here with [ inventory > 0 ] and books < 1 ;; if the reader meets a seller with books to sell and reader has no book. [ ask one-of sellers-here with [ inventory > 0 ] [ set inventory inventory - 1 ] set books books + 1 set color blue ] end ;; The "meet-author" procedure is based closely on Throne's original. ;; When readers bump into authors, they encourage authors to write. One minor ;; but significant change is that authors' "writing-threshold" is changed ;; from the original into a slider variable. to meet-author if any? authors-here [ ask one-of authors-here [ set encouragement encouragement + 1 if encouragement > writing-threshold ;; if authors have enough encouragement [ set manuscripts manuscripts + 1 ;; they write manuscripts set encouragement encouragement - writing-threshold ] ;; and their "encouragement" score is decreased ] ] ] end ;; PRINTER CONTROLS ;; Called above, one printer each year enforces the monopoly by finding ;; and killing one fellow printer within its personal "monopoly-radius." Thus, ;; the smaller the radius the less stringent the monopoly. to enforce-monopoly let printers-to-exclude printers in-radius monopoly-radius with [ who != [who] of myself ] ;; can't enforce against itself! if any? printers-to-exclude [ ask printers-to-exclude [die] ;; kills off competitors ] end
There are 3 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Print Marketplace.png | preview | Preview for 'Print Marketplace' | over 11 years ago, by Michael Gavin | Download |
This model does not have any ancestors.
This model does not have any descendants.