Sequential supply chain

Sequential supply chain preview image

1 collaborator

Default-person Dajun Yue (Author)

Tags

(This model has yet to be categorized with any tags)
Part of project 'Supply Chain Models'
Model group MAM-2013 | Visible to everyone | Changeable by everyone
Model was written in NetLogo 5.0.4 • Viewed 1099 times • Downloaded 45 times • Run 0 times
Download the 'Sequential supply chain' modelDownload this modelEmbed this model

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 [demand-today]

breed [players player]

directed-link-breed [supply-links supply-link]
supply-links-own [orders-filled]

directed-link-breed [demand-links demand-link]
demand-links-own [orders-placed]

players-own [
  role
  base-stock
  on-hand
  backlog
  inventory-position
  last-received
]

to setup
  ca
  layout
  initialize
  resize-shape
  reset-ticks
end 

to go
  if ticks >= 1000 [stop]
  set demand-today daily-demand
  update-policy
  place-order-to-up
  receive-order-from-up
  process-order-from-down
  summarize
  resize-shape
  tick
end 

to update-policy
  ask players with [role = "distributor"]
  [set base-stock base-stock-distributor]
  
  ask players with [role = "retailer"]
  [set base-stock base-stock-retailer]
end 

;; Inventory operations
;; **************************

to place-order-to-up
  ask players with [role = "retailer" or role = "distributor"][
    
    let amount-to-order max list (base-stock - inventory-position) 0
    ask my-out-demand-links [set orders-placed amount-to-order]
  ]
end 

to receive-order-from-up
  ask players [
    ask out-supply-link-neighbors [
      set last-received sum [first orders-filled] of my-in-supply-links
      ask my-in-supply-links [set orders-filled but-first orders-filled]
      set on-hand on-hand + last-received
    ]
  ]
  ask players with [role = "supplier"] [
    set on-hand 10000
  ]
end 

to process-order-from-down
  ask players [
    let new-orders 0
    if role = "distributor" or role = "supplier" [set new-orders sum [orders-placed] of my-in-demand-links]
    if role = "retailer" [set new-orders demand-today]
    let orders-requested new-orders + backlog
    let orders-to-ship min list orders-requested on-hand
    
    set backlog max list 0 (backlog - on-hand + new-orders)
    
    ask my-out-supply-links [
      set orders-filled lput orders-to-ship orders-filled
    ]
    set on-hand on-hand - orders-to-ship
  ]  
end 

to summarize
  ask players [
    let pipeline sum [sum orders-filled] of my-in-supply-links
    set inventory-position on-hand + pipeline - backlog
  ]
end 

;; ****************************

to layout
  set-default-shape players "circle"
  create-players 1 [
    setxy 7 0
    set color red
    set role "retailer" 
  ] 
  create-players 1 [
    setxy 0 0
    set color blue
    set role "distributor" 
  ]
  create-players 1 [
    set size 5
    setxy -7 0
    set color green
    set role "supplier" 
  ]
  ask players with [role = "retailer"] [
    create-demand-links-to players with [role = "distributor"]
    create-supply-links-from players with [role = "distributor"]
  ]
  ask players with [role = "distributor"] [
    create-demand-links-to players with [role = "supplier"]
    create-supply-links-from players with [role = "supplier"] 
  ]
end 

to initialize
  
  ask players [
    if role = "distributor" [
      set base-stock base-stock-distributor
      set on-hand base-stock-distributor
      ask my-out-demand-links [set orders-placed 0]
      ask my-in-supply-links [set orders-filled n-values lead-time-supplier-distributor [0]]
    ]
    if role = "retailer" [
      set base-stock base-stock-retailer
      set on-hand base-stock-retailer
      ask my-out-demand-links [set orders-placed 0]
      ask my-in-supply-links [set orders-filled n-values lead-time-distributor-retailer [0]]
    ]
    if role = "supplier"[
      set on-hand 10000
    ]
    set backlog 0
    set inventory-position on-hand - backlog
  ]
end 

to resize-shape
  ask players with [role = "distributor" or role = "retailer"][
    set size 0.5 * (sqrt on-hand)          ;; visualize the on-hand stock via size of the turtle
  ]
end 



;; Demand distribution generation
;; **************************************

to-report daily-demand
  if distribution = "deterministic"
    [report deterministic-demand]          
  
  if distribution = "poisson" 
    [report random-poisson mean-for-poisson]             
  
  if distribution = "normal"          
    [report truncated-normal mean-for-normal std-for-normal lower-bound-for-normal upper-bound-for-normal]   
end 

to-report truncated-normal [mean-value std-value min-value max-value]
  let random-num random-normal mean-value std-value
  ifelse random-num > max-value or random-num < min-value
  [report min-value + random-float (max-value - min-value)]
  [report random-num]
end 
;; ***************************************************************

There are 2 versions of this model.

Uploaded by When Description Download
Dajun Yue almost 6 years ago corrected some errors Download this version
Dajun Yue almost 6 years ago Initial upload Download this version

Attached files

File Type Description Last updated
Sequential supply chain.png preview Preview for 'Sequential supply chain' almost 6 years ago, by Dajun Yue Download

This model does not have any ancestors.

This model does not have any descendants.