Booktrade

Booktrade preview image

1 collaborator

Default-person Michael Gavin (Author)

Tags

book history 

Tagged by Michael Gavin over 11 years ago

digital humanities 

Tagged by Michael Gavin over 11 years ago

history 

Tagged by Michael Gavin over 11 years ago

humanities 

Tagged by Michael Gavin over 11 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.3 • Viewed 1083 times • Downloaded 94 times • Run 0 times
Download the 'Booktrade' modelDownload this modelEmbed this model

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


Bookshops

Purpose

This simulation explores the causes and indirectly observed behaviors of seventeenth-century London booksellers. It examines when and how books run through multiple editions, when they are held for sale, and when they are reverted to pulp. Its main purpose is to test the relative importance of production and inventory costs to booksellers' success.

Entities, state variables, and scales

The model contains the following entities: readers, booksellers, books, and manuscripts. Each reader is assigned a single, unchanging state variable, "money." Money for readers does not represent an account that rises and falls, but instead represents their general purchasing power. Readers maintain collections of books (kept as a list of titles). Booksellers are hatched in random positions but do not move. They maintain a money account ("capital") that increases and decreases as they sells and publish books. They produce and maintain collections of books and manuscripts. If they go too deeply into debt, they goes bankrupt and die. If all booksellers die the simulation stops.

Manuscripts have unique and unchanging variables: title, price, appeal, my-owner. Books are hatched by manuscripts and retain their parents' variables. As books sit in a bookseller's inventory waiting to be purchased, their appeal gradually decreases. As their appeal falls, they are less likely to be purchased, and when their appeal reaches zero, they die.

The model is greatly compressed in time, space, and number. Each tick is meant to represent approximately one day of real time. The size of the space and the number of readers, books, and booksellers (versus seventeenth-century London) is reduced by an adjustable factor of approximately 100 to 1.

Money is not meant to directly reflect actual monetary units. Various price values are meant to be tested in relation to each other. What percentage of printing costs are fixed? What is the proportion between a book's average price and the volatility of a booksellers' capital account? What is the ideal proportion of print runs to book-buyers? How do changing financial conditions change the kinds of bookselling businesses that are successful.

Process overview and scheduling

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.

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-stock.

If a bookseller's inventory falls below the adjustable "inventory-to-print-run" rate, they review their existing manuscripts. They then call their manuscripts to perform the procedure "review-for-reprint." When reviewed, manuscripts check themselves to see if they remain viable. If no copies of the manuscript exist (that is, if the book failed to sell and all copies were destroyed), the manuscript is destroyed. If the manuscript is still selling, it will be reprinted.

If a bookseller's stock of manuscripts falls below the minimum level, he will print new ones.

Each tick, the following sequence of procedures is called:

  1. Readers move randomly and look for books to buy.
  2. If readers move through the bookstore, they might purchase a book.
  3. The bookseller examines inventory to see if it meets minimum quantity and diversity
  4. Bookseller calls inventory, the agentset "my-books," to perform procedures
  5. Books in inventory gradually decrease in appeal according to the "depreciation rate"
  6. Books with appeal zero die, then ask parent manuscript to retire.
  7. Bookseller publishes new books by asking existing manuscripts to hatch new books.
  8. The bookseller calculates his account and confirms that he has not gone bankrupt.

Design Concepts

Adaptation. The bookseller is constantly evaluating his inventory, discarding unsold books and attempting to maintain an inventory with maximum appeal.

Fitness. Fitness of a book is determined by how much appeal it has. If many copies sell, it will be reprinted and maintain its appeal. If it sits unsold, it will be pulped and its parent manuscript will be retired.

Prediction. The bookseller has no ability to predict the success of a newly published manuscript, but will reprint works that have sold well in the past. If a title fails to sell, it will not be reprinted.

Interaction. Readers choose books by weighing the books' appeal versus the books' price. (These interactions are adjusted randomly in each case.) The bookseller controls the books by managing his inventory.

Initialization

At set up, the bookseller is placed at the center and readers are distributed randomly. Various factors are controlled using sliders. These are:

1. Number of readers. Ranges from 0 to 500 in increments of 20. 2. Initial capital. Ranges from 100 to 1000 in increments of 20. This sets the booksellers' initial money account. 3. Overhead. Ranges from 0 to 1 in increments of .02. This decreases the bookseller's account each tick. 4. Average price. Ranges from 3 to 7 in increments of 1. This sets the average price of each book. 5. Depreciation rate. Ranges from 0 to .5 in increments of .1. This sets the rate at which books lose appeal each click. 6. Compositor rate. Ranges from 10 to 50 in increments of 5. This sets the fixed cost for any new edition. 7. Printing cost. Ranges from .1 to .9 in increments of .1. This sets the percentage of per-copy cost of new editions. 8. Print run. Ranges from 5 to 100 in increments of 5. This sets the average size of each print run. 9. "Inventory to print run." Ranges from .5 to 5 in increments of .5. This sets the ratio of inventory the bookseller keeps in relation to the average print run. 10. Minimum title diversity. Ranges from 1 to 10 in increments of 1. Sets the minimum number of book titles the bookseller will keep on hand at any moment.

Submodels

CREDITS AND REFERENCES

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

Comments and Questions

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

Click to Run Model

breed [readers reader]
breed [booksellers bookseller]
breed [manuscripts manuscript]

readers-own [
  book-list
  number-of-books
  money
  curiosity
  my-seller
  ]

booksellers-own [
  my-manuscripts
  min-title-diversity
  preferred-print-run
  price-target
  career-span
  capital
  ]



manuscripts-own [
  my-publisher
  title
  editions
  appeal
  price
  depreciation-rate
  book-age-threshold
  earnings
  expenses
  copies-on-the-shelf
  shelf-time
  viable
  failed-solicitations
  ]

to setup
  ca
 
  ; Booksellers publish and distribute manuscripts. They have a capital of money, and if they slip
  ; into too much debt, they go bankrupt and die.
  set-default-shape booksellers "house"
  create-booksellers initial-booksellers [ 
    set color brown
    set size 3
    set career-span 0
    set min-title-diversity 0
    set preferred-print-run 200 - random 190
    set price-target 0.5 + random-gamma 1 2
    set my-manuscripts nobody
    set capital initial-capital
    setxy random-xcor random-ycor
    ]
   
  ; Readers' behavior is controlled by several variables: color, closed-mindedness, and money. All readers will
  ; seek out books of their own color. If they are curious (that is, not incurious) they will also
  ; look for books of different color. They gain money every tick and use money to buy books.
  set-default-shape readers "circle"
  create-readers number-of-readers [
    set color 55 + random-float 4
    set money 0.5 + random-gamma 1 2
    set book-list []
    set size 1.5
    set curiosity random 100
    set my-seller one-of booksellers
    setxy random-xcor random-ycor
  ]
  
  ; Manuscripts are owned by booksellers. They are "published" by hatching
  ; a number of books that share their variables.
  set-default-shape manuscripts "star"

  reset-ticks
end 

; Go activates readers and booksellers.

to go
  tick
  ask readers [ determine-behavior ]
  ask booksellers [manage-inventory check-accounts]
  if not any? booksellers [ stop ]
  if mean [capital] of booksellers > initial-capital * 2 or mean [career-span] of booksellers > 500 [ create-booksellers 1 [
    set color brown
    set size 3
    set career-span 0
    set preferred-print-run 200 - random 190
    set price-target 0.5 + random-gamma 1 2
    set my-manuscripts nobody
    set capital initial-capital
    setxy random-xcor random-ycor ] 
  ]
end 

to determine-behavior
  set curiosity curiosity + 1
  if my-seller = nobody [ set my-seller one-of booksellers ]
  ifelse curiosity > curiosity-threshold 
    [ buy-books ]
    [ move ]
end 

; Readers move about randomly and carry their books with them.

to move                
  rt random 50
  lt random 50
  fd 0.5
end 
   
; Reader look for books to buy. The decision to purchase a book is based on
; a simple randomization of the books' appeal. 

to buy-books
  if my-seller != nobody [ face my-seller ]
  fd 1
  
  if count booksellers in-radius seller-radius > 0 [
  let temp-list [book-list] of self
  let books-to-buy manuscripts in-radius seller-radius with [ ; creates agentset of nearby books   
    copies-on-the-shelf > 0 and                        ; must be owned by bookseller
    not member? title temp-list and
    (appeal + random-float 1 - random-float 1) >= price and  ; appeal (randomly adjusted) must be higher than price
    price <= [money] of myself                               ; reader must have enough money
    ]
  
  let chosen-book one-of books-to-buy                         ; reader chooses one of the eligible books
  ifelse chosen-book != nobody [
    let chosen-seller [my-publisher] of chosen-book
    set book-list fput [title] of chosen-book book-list
    set number-of-books length book-list
    set curiosity 0
    ask chosen-seller [                             
      set capital capital + [price] of chosen-book ]           ; booksellers account is increased
    ask chosen-book [ 
      set earnings earnings + price 
      set copies-on-the-shelf copies-on-the-shelf - 1 ]  
  ] 
  [ 
    set my-seller one-of booksellers 
    ]
  ]
end 

; Booksellers check their inventory.

to manage-inventory
  set capital capital - overhead
  set career-span career-span + 1
  set min-title-diversity abs capital / 100
  set my-manuscripts manuscripts with [my-publisher = myself]
  ask my-manuscripts [update-mss]
  
  if count my-manuscripts with [viable = true] <= min-title-diversity [ acquire-copy ]
  
  if count my-manuscripts with [copies-on-the-shelf > 0] < min-title-diversity [ print-mss ]
end 
  
; When sitting on the shelf, books lose appeal over time.

to update-mss
  set appeal appeal - depreciation-rate
  if earnings >= expenses [ 
    set viable true 
    set shelf-time 0 
    ]
  if expenses > earnings [
    set viable false
    set shelf-time shelf-time + 1 
    ]
  if shelf-time > book-age-threshold [ 
    ask my-publisher [ set capital capital + ([price] of myself * pulp-rate) ]
    die
    ]
  if failed-solicitations > 5 [ die ]
  if appeal < 0 [ die ]
end 

; Bookseller creates a new title.

to acquire-copy
    hatch-manuscripts 1 [
    set size 1
    set color 25 + random-float 4
    set title random-float 100 ; The title create an identifier that can be inherited by copies
    set viable true
    set appeal 1.5 - random-float 1 
    set my-publisher myself
    set price [price-target] of myself - random-float .5
    set depreciation-rate 0.01 - random-float .009
    set book-age-threshold 700 - random 600
    ]
end 

  
; Manuscripts "hatch" copies of themselves as books. When manuscripts hatch books
; those books retain the original's title, appeal, and price.

to print-mss
  let chosen-manuscript one-of my-manuscripts with [ viable = true ]
  if chosen-manuscript != nobody [
  set capital capital - (fixed-cost + ([price] of chosen-manuscript * (preferred-print-run * per-unit-cost)))
  ask chosen-manuscript 
    [
      set expenses expenses + (fixed-cost + ([price] of chosen-manuscript * ([preferred-print-run] of myself * per-unit-cost)))
      set copies-on-the-shelf copies-on-the-shelf + [preferred-print-run] of myself
      ]
  ]
end 

; Booksellers check to see if they have gone bankrupt.

to check-accounts
  if capital < -200 [ 
    ask my-manuscripts [ die ]
    die 
    ]
end 

There are 2 versions of this model.

Uploaded by When Description Download
Michael Gavin over 11 years ago documentation edited Download this version
Michael Gavin over 11 years ago Initial upload Download this version

Attached files

File Type Description Last updated
Booktrade.png preview Preview for 'Booktrade' over 11 years ago, by Michael Gavin Download

This model does not have any ancestors.

This model does not have any descendants.