Print Marketplace

Print Marketplace preview image

1 collaborator

Default-person Michael Gavin (Author)

Tags

book history 

Tagged by Michael Gavin about 10 years ago

communications circuit 

Tagged by Michael Gavin about 10 years ago

darnton 

Tagged by Michael Gavin about 10 years ago

digital humanities 

Tagged by Michael Gavin about 10 years ago

history 

Tagged by Michael Gavin about 10 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.3 • Viewed 835 times • Downloaded 63 times • Run 0 times
Download the 'Print Marketplace' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Info tab cannot be displayed because of an encoding error

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

;; "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.

Uploaded by When Description Download
Michael Gavin about 10 years ago improved documentation; censor turtles added Download this version
Michael Gavin about 10 years ago typo corrected, plotting adjusting for readability Download this version
Michael Gavin about 10 years ago Initial upload Download this version

Attached files

File Type Description Last updated
Print Marketplace.png preview Preview for 'Print Marketplace' about 10 years ago, by Michael Gavin Download

This model does not have any ancestors.

This model does not have any descendants.