The Paranoid Imaginarium of Roger L'Estrange

The Paranoid Imaginarium of Roger L'Estrange preview image

1 collaborator

Default-person Michael Gavin (Author)

Tags

book history 

Tagged by Michael Gavin about 10 years ago

censorship 

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 856 times • Downloaded 52 times • Run 0 times
Download the 'The Paranoid Imaginarium of Roger L'Estrange' modelDownload this modelEmbed this model

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


The Paranoid Imaginarium of Roger L'Estrange

WHAT IS IT?

This model simulates the censorship practices of the seventeenth-century book trade in London under state licenser Roger L'Estrange. It creates a field of bookshops and highly politicized readers. It is designed to simulate, not so much the history of the seventeenth-century print marketplace, but the history of how censors imagined the reading public they were tasked with policing.

The model is designed to simulate the impact that seditious publication might have had on a reading public during the hand-press era. As politically engaged books are circulated through a population, that population becomes either more or less radical, perhaps leading towards the revolution that censors fear and hope to prevent.

HOW TO USE IT

The SETUP button initializes the model. Brown bookshops are distributed around the world, as are a number of readers and informers. Slider bars control the number of each breed created at initialization. Additionally, the slider bars on the top right, "number-of-radicals" and "number-of-propagandists" create additional "reader" turtles with special properties.

Readers' behavior is determined by several variables: color, expressivity, and money. All readers will seek out books of their own color. They gain money every tick and use money to buy books. Each reader also has an "expressivity" score that increases gradually with each tick; when the expressivity score reaches 1, the reader produces a manuscript and its expressivity score is returned to baseline level. Readers are defined primarily by their "opinion" score. As they move about, the talk to each other, read books, and their opinions gradually change. When a reader's opinion score falls below -.9, it is considered a "radical."

Manuscripts are composed by readers and given to booksellers. They are "published" by hatching a number of books that share their variables. They maintain a "profit" score, which increases whenever a copy is sold, and profitable manuscripts are chosen for reprinting.

Booksellers collect manuscripts and publish them as books. Books are passive objects owned by booksellers and readers. They have appeal and a price. Books slowly lose their appeal, and if they remain too long in the booksellers' inventory, they die. They are hatched in identical batches from manuscripts. Like readers, they have an opinion score and if they are radical (-.9 or lower) they are marked by the color red.

At the start of each tick, informers check to see if there are radical readers or books in their vicinity. If so, they move around and hunt for seditious books. If informers find a red colored bookstore in their region, that destroy all the books and manuscripts and send the bookseller to prison. If "hunt-authors" is activated, informers will also kill radicals that have published multiple books.

The simulation will STOP if one of three conditions are met. If more than 50% of the population turns radical (revolution succeeds), if all persuadable readers are rendered docile (revolution fails), or if the system reaches 3,000 ticks (equilibrium/stability).

THINGS TO NOTICE

As the model runs, watch to see if the revolution succeeds. What factors seemed to influence the outcome?

How does the system react when a radical book is published?

Follow the informers.

THINGS TO TRY

Try varying the number of "radicals" or "propagandists" at initialization. How do they change behavior of the system?

Try toggling the "hunt authors" option. How does turning on the "hunt authors" option affect the outcome?

Try increasing or decreasing the income rate. How does that affect reader behavior?

EXTENDING THE MODEL

In the seventeenth century, informers hunted authors much the way law enforcement today tracks drug dealers--they captured peddlers on the street and then tried to get information up the chain of supply. In this model, there is no anonymity, and informers are able to identify and execute radical authors. A procedure could be included, when informers raid bookstores, of gaining information from the sellers about the authors of the books they distribute.

CREDITS AND REFERENCES

The model was inspired most directly by: Jody Greene. The Trouble with Ownership: Literary Property and Authorial Liability in England, 1660-1730. Philadelphia: University of Pennsylvania Press, 2005.

Copyright

This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

This model was created by Michael Gavin, University of South Carolina. 2014.

Comments and Questions

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

Click to Run Model

;; The Paranoid Imaginarium of Roger L'Estrange
;; Michael Gavin, University of South Carolina
;;

;; Breeds created at initialization.
breed [readers reader]
breed [booksellers bookseller]
breed [books book]
breed [manuscripts manuscript]
breed [informers informer]

globals [ 
  bookshops-raided           ; record of informer behavior
  authors-executed           ; record of informer behavior
  crowds-dispersed           ; record of informer behavior
  book-age-threshold         ; global variable that determines book life-span
  tolerated-publications     ; global variable that determines informer behavior
  ]

turtles-own [ opinion ]      ; all turtles (books and people) have opinions on scale of -1 , 1

booksellers-own [
  my-manuscripts             ; (agentset) sellers keep track of owned manuscripts
  my-books                   ; (agentset) maintain inventory
  imprisoned                 ; (true/false) can be imprisoned
  time-served                ; (numerical) keep track of time served
  ]

readers-own [
  my-books                   ; (agentset) readers carry books with them
  my-manuscripts             ; (agentset) readers sometimes write new manuscripts
  publications               ; (numerical) number of successful publications
  initial-expressivity       ; (numerical) baseline desire to write, normal distribution
  expressivity               ; (numerical) current fluctuating state of desire to write
  defensiveness              ; (numerical) determines how readers respond to others' opinions
  talent                     ; (numerical) determines quality of a reader's manuscripts
  initial-money              ; (numerical) baseline money level, normal distribution
  money                      ; (numerical) current fluctuating state of money
  ]

manuscripts-own [
  my-owner                   ; (agentset) current owner of manuscript
  my-author                  ; (agentset) creator of manuscript
  my-copies                  ; (agentset) books hatched from manuscript 
  book-age                   ; (numerical) number of ticks since hatch
  title                      ; (numerical) randomly generated ID number
  editions                   ; (numerical) record of printings
  appeal                     ; (numerical) appeal of text, normal distribution
  profit                     ; (numerical) record of profit generated for seller   
  price                      ; (numerical) price, normal distribution
  ]


books-own [
  my-owner                   ; (agentset) current owner
  my-author                  ; (agentset) original creator
  book-age                   ; (numerical) number of ticks since hatch
  appeal                     ; (numerical) appeal of text, taken from parent manuscript
  price                      ; (numerical) price of text, taken from parent manuscript
  title                      ; (numerical) title of text, taken from parent manuscript
  ]

to setup
  ca
  
  set bookshops-raided 0
  set authors-executed 0
  set crowds-dispersed 0
  set book-age-threshold 50         ; global variable (could be converted to slider bar)
  set tolerated-publications 2      ; global variable (could be converted to slider bar)
  
  ; creates readers (randomized properties)
  set-default-shape readers "person"
  create-readers number-of-readers [
    set opinion 1 - random-float 2
    ifelse opinion < -.9 
       [ set color red ] 
       [ set color violet + opinion ] 
    set talent random 10
    set initial-expressivity (1 - random-float 1)
    set expressivity initial-expressivity
    let defensiveness-randomization random-float 10
    ifelse defensiveness-randomization > 5
      [ set defensiveness one-of [ 1 -1 ] ]
      [ set defensiveness 1]
    set initial-money random 10
    set money initial-money
    set my-books nobody
    set my-manuscripts nobody
    set publications 0
    set size 2
    setxy random-xcor random-ycor
  ]
  
  ; creates readers with pre-determined properties typical of "radicals"
  create-readers number-of-radicals [
    set opinion -1                          ; strong negative opinion
    set talent 9                            ; high talent
    set initial-expressivity .95            ; very expressive
    set expressivity initial-expressivity
    set defensiveness -1                    ; very defensive
    set initial-money 0
    set money random 10
    set my-books nobody
    set my-manuscripts nobody
    set publications 0
    set size 2
    setxy random-xcor random-ycor
  ]
 
  ; creates readers with pre-determined properties typical of "propagandists" 
    create-readers number-of-propagandists [
    set opinion 1                            ; strong negative opinion
    set talent 9                             ; high talent
    set initial-expressivity .95             ; very expressive
    set expressivity initial-expressivity
    set defensiveness -1                     ; very defensive
    set initial-money 0
    set money random 10
    set my-books nobody
    set my-manuscripts nobody
    set publications 0
    set size 2
    setxy random-xcor random-ycor
  ]
  
  ; create informers
  set-default-shape informers "person"
  create-informers number-of-informers [ 
    set color white
    set size 2
    set opinion 0
    setxy random-xcor random-ycor ]
  
  ; create booksellers
  set-default-shape booksellers "house"
  create-booksellers number-of-booksellers [
    set color brown
    set size 3
    set my-manuscripts nobody
    set imprisoned false
    setxy random-xcor random-ycor
    ]
  
  ; create books
  set-default-shape books "box"
  create-books number-of-readers [ 
    set opinion 1 - random-float 2
    ifelse opinion < -.9 [ set color red ] [ set color violet + opinion ] 
    set my-owner one-of booksellers
    setxy ([xcor] of my-owner) ([ycor] of my-owner)
  ]
  ; set shapes for manuscripts (none created at initialization)
  set-default-shape manuscripts "star"

  reset-ticks
end 

; Go activates readers and booksellers.

to go
  ask readers [ 
    manage-books
    update-color
    discuss
    move
    buy-books ]
  ask booksellers [ check-for-booksellers-freedom ]
  ask informers [ determine-behavior ]
  if percentage-red >= 50 [stop]
  if not any? readers with [ opinion < -0.5 and defensiveness > 0 ] [ stop ]
  if ticks = 3000 [stop]
  tick
end 

; informer

to determine-behavior
  let potential-rebels readers with [color = red] in-radius informer-radius
  let seditious-books books with [color = red] in-radius informer-radius
  if count potential-rebels + count seditious-books > 1 [ hunt-for-books ]
end 

; Hunting for books means that informers move around the screen and look for red booksellers

to hunt-for-books
  rt random 20
  lt random 20
  fd .5
  let booksellers-to-oppress booksellers with [color = red] in-radius informer-radius
  if any? booksellers-to-oppress [ 
      ask booksellers-to-oppress [ 
        ask my-books [ die ]
        ask my-manuscripts [ die ]
        go-to-jail
        set bookshops-raided bookshops-raided + 1 ]
        ]
   if count ( readers with [color = red ] in-radius informer-radius ) > 2 [ 
     ask readers with [color = red ] in-radius informer-radius [ setxy random-xcor random-ycor ]
     set crowds-dispersed crowds-dispersed + 1
  ]
  if hunt-authors = true [
  let authors-to-oppress readers with [ color = red and publications > tolerated-publications ]
  if any? authors-to-oppress in-radius informer-radius [ ask one-of authors-to-oppress [ 
        hatch 1 [ set opinion 1 - random-float 2]
          ask my-books [die]
          ask my-manuscripts [die]
          die ] 
        set authors-executed authors-executed + 1]
  ]
end 
  
; booksellers do this when raided

to go-to-jail
  set imprisoned true
  set color black
  set time-served 0
  serve-time
end 

; while imprisoned, booksellers count down their sentences

to serve-time
  set time-served time-served + 1
  if time-served >= sentence-length [
    set imprisoned false ]
end 

; if they're free, sellers manage their inventory

to check-for-booksellers-freedom
  ifelse imprisoned = false [ manage-inventory ] [ serve-time ]
end 

; Booksellers manage their inventory by looking through the agentset
; of their books and manuscripts. They ask their books to "age" and
; they look for opportunities to reprint existing manuscripts or
; publish new ones.

to manage-inventory
  set my-books books with [my-owner = myself]
  ifelse any? my-books with [color = red] [set color red] [set color brown]
  ask my-books [
    setxy ( [xcor] of myself) ( [ycor] of myself)
    age]
  set my-manuscripts manuscripts with [my-owner = myself]
  ask my-manuscripts [ setxy ( [xcor] of myself) ( [ycor] of myself) ]
  let old-manuscripts my-manuscripts with [editions > 5]
  ask old-manuscripts [die]
  if count my-manuscripts > 0 and count my-books < (2 * 25) [ reprint ]
end 
  
; When first published, books are given an "appeal" score. Every tick,
; that score depreciates according to an adjustable rate. If the books
; lose all consumer appeal, the bookseller will sell them off at a 
; cheap rate as paper-capital.

to age
  if my-owner = one-of booksellers [
  set book-age book-age + 1
  set appeal appeal - depreciation-rate
  if book-age > book-age-threshold [ 
    let my-original manuscripts with [title = [title] of myself]
       ask my-original [ die ]
    die
    ] ]
  if my-owner = one-of readers [
    set book-age book-age + 1
    if book-age > book-age-threshold [die ] ]
end 
  
; "Reprint" is a command that booksellers give to their 
; manuscripts. Each manuscript looks through the agentset of books that
; share their title. If the capital of books has been depleted, and if the
; title has been profitable, it will be reprinted. If too many copies of the
; book remain unsold when the title loses appeal, all copies of the book are
; pulped, and the manuscript is retired. -- NOTE: As written, this command
; leads to overproduction and certain bankruptcy for booksellers. It must be improved.

to reprint
  if count my-manuscripts >= 1 
    [ ask max-one-of my-manuscripts [my-copies] [ 
        set editions editions + 1 
        hatch-books 25 ] ]
end 

; Readers move about randomly, always updating their "my-books" agentset and
; carrying those books along with them.

to manage-books
  set my-books books with [my-owner = myself]
  ask my-books [ setxy ([xcor] of myself) ([ycor] of myself) ]
  if any? my-books [read-books
    ask my-books [                                               ;
    set appeal appeal - (depreciation-rate / 2)                ; but their holdings gradually become obsolete and die.
    if appeal <= 0 [die] ]
    ask my-manuscripts [
    set appeal appeal - (depreciation-rate / 5)
    if appeal <= 0 [die] ]
  ]
  
  set my-manuscripts manuscripts with [my-owner = myself]
  ask my-manuscripts [ setxy ([xcor] of myself) ([ycor] of myself) ]
  if any? my-manuscripts [solicit-publishers]
  
  set money money + income-rate
  set expressivity expressivity * 1.001
  if expressivity >= 1 [ compose ]
end 

; Here is the major function that this version includes. The readers trade
; opinions as they more around.

to update-color
  
  ifelse opinion < -.9 
    [ set color red ] 
    [ set color violet + opinion ]
end 

; When agents "discuss" they update their opinion score based on the mean of all
; turtles within their radius.

to discuss
  let discussants turtles in-radius gossip-radius
  let zeitgeist mean [ opinion ] of discussants
  ifelse opinion * zeitgeist > 0 
    [ set opinion opinion + ( zeitgeist * .001 ) ]
    [ set opinion opinion + ( zeitgeist * .001 * defensiveness)  ]
  if opinion < -1 [ set opinion -1 ]
  if opinion > 1 [ set opinion 1]
end 


; This is a simple rule for updating readers' opinion. Basically, they read their books
; every click. If both the "discuss" and "read-books" procedures are called, this
; basically counts the books twice. This is probably not an ideal way of dealing with
; books, and I think these two procedures should be joined into a single "update-opinion"
; function.

to read-books
  let my-reading mean [opinion] of my-books
  ifelse opinion * my-reading > 0 
    [ set opinion opinion + ( my-reading * .001 )  ]
    [ set opinion opinion + ( my-reading * .001 * defensiveness)  ]
end  

to move
  ifelse ( opinion < 0 and money > 10 )  [ 
    let books-for-me books with [ color = red and my-owner = one-of booksellers ]
    if any? books-for-me [ face min-one-of books-for-me [ distance myself ] ]
    rt random 50
    lt random 50 ]
  [ rt random 50
    lt random 50 ]
  ifelse (count readers with [color = [color] of myself] in-radius gossip-radius) > 2
    [ fd 0.5 ]
    [ fd 1.5 ]
end 
; readers with manuscripts are always on the lookout for publishers

to solicit-publishers
  if any? booksellers in-radius 3 [        ; notice that publishing radius is set arbitrarily to 3. could be converted to slider bar
  let publisher one-of booksellers in-radius 3
  let offered-manuscript max-one-of my-manuscripts [appeal]
  if [appeal] of offered-manuscript > [price] of offered-manuscript [
       ask offered-manuscript [ set my-owner publisher ]
       set publications publications + 1
     ] ]
end 

; when "expressivity" reaches 1, readers compose manuscripts
; note that "opinion" is not explicitly mentioned below, but that
; manuscripts automatically have the opinion score of their parent turtles     

to compose
  hatch-manuscripts 1 [
    set size 1
    set my-author myself
    set my-owner myself
    set book-age 0
    set title random-float 100
    set appeal ([talent] of my-author - random-float 10)
    set price 10 - random-float 9
    ]
  set expressivity initial-expressivity
end 

; When readers buy-books, they create an agentset "books-to-buy" of
; nearby books. Eligible books must be owned by a bookseller and be priced below the
; reader's money level. Among the bookseller's collection, the reader will focus on books
; of the same color or books that are especially appealing. Incurious readers are
; not likely to purchase any book outside their preferred type (color). From the "books-to-buy" 
; agentset, the reader chooses one book at random and buys it.

to buy-books
  let books-to-buy books in-radius 1 with [     ; creates agentset of nearby books that meet one of the following two sets of  
    (my-owner = one-of booksellers with [ imprisoned = false ] and          ; criteria: must be owned by a bookseller, same color, and affordable
    color = [color] of myself and               ; 
    price <= [money] of myself) or              ; or, 
    (my-owner = one-of booksellers and          ; book's appeal (randomly adjusted) must overcome the reader's incuriosity.
    (appeal + random-float 2 - random-float 2) >= price and 
    price <= [money] of myself)
    ]
  
  let chosen-book one-of books-to-buy           ; Among the eligible books, reader chooses one and
  if chosen-book != nobody [
    ask chosen-book [
      set my-owner myself             ; asks chosen-book to update its "my-owner" variable
      let my-original manuscripts with [title = [title] of myself]
        ask my-original [ set my-copies my-copies + 1 ] 
       ]
    
    set money money - [price] of chosen-book    ; reader's money is depleted
    
    ask manuscripts with [title = [title] of chosen-book] [
      set profit profit + [price] of chosen-book]    ; money is subtracted, and the purchase is complete.
  ]
end 

to-report percentage-red
  let R count readers with [color = red]
  let A count readers
    report  R / A * 100
end 

;; 
;;
;;
;; END
;;
;;
;;

There are 3 versions of this model.

Uploaded by When Description Download
Michael Gavin about 10 years ago improved info tab Download this version
Michael Gavin about 10 years ago Error in "info" tab corrected. Download this version
Michael Gavin about 10 years ago Initial upload Download this version

Attached files

File Type Description Last updated
The Paranoid Imaginarium of Roger L'Estrange.png preview Preview for 'The Paranoid Imaginarium of Roger L'Estrange' about 10 years ago, by Michael Gavin Download

This model does not have any ancestors.

This model does not have any descendants.