Robotic Factory

Robotic Factory preview image

1 collaborator

7ca38943c64d6f6208f80936788f40bc Jack M (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 6.2.2 • Viewed 198 times • Downloaded 8 times • Run 0 times
Download the 'Robotic Factory' 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

turtles-own [
  energy

  goal
  picking
  packing
  dispatching
  charging

  turtles-present

  pending
  collected
  packaged
  dispatched

  laden?
  my-speed
]

;;;;;;;;;;;;;;;;;;;;;;
;; SETUP PROCEDURES ;;
;;;;;;;;;;;;;;;;;;;;;;

to setup

  clear-all
  setup-patches  ;; patches draw themselves
  __change-topology false false  ;; square map, instead of torus, means agents cant wrap sides

  let picking-goal patches with [  ;; make agentset of patches where storage is connected to road
    pcolor = brown  and any? neighbors with [ pcolor = gray + 2 ]]  ;; patches that are brown, beside a road
  let packing-goal patches with  ;; make agentset of patches where agents can pack
    [ pcolor = green and any? neighbors4 with [pcolor = gray + 2 ]]  ;; patches that are yellow, beside a road
  let dispatching-goal patches with  ;; make agentset of patches where agents can drop packages
  [ pcolor = blue and any? neighbors4 with [pcolor = gray + 2 ]]
  let charging-goal patches with  ;; make agentset of patches where agents can charge
  [ pcolor = yellow and any? neighbors4 with [pcolor = gray + 2 ]]  ;; patches that are yellow, beside a road

 ;; set location, direction, energy and color
  create-turtles num-turtles [   ;; initlialise n turtles
    move-to one-of patches with [ pcolor = gray + 2 ]  ;; place on road
    separate
    set energy 300
    set pending num-turtles  ;; slider num
    set color white

    set picking one-of picking-goal  ;; agent goal random storage
    set packing one-of packing-goal  ;; agent goal random pack point
    set dispatching one-of dispatching-goal  ;; agent goal random drop point
    set charging one-of charging-goal  ;; choose random charge point
    set goal picking  ;; agent goal is packing point
  ]
  reset-ticks
end 

to setup-patches  ;; build warehouse
  ask patches with [pycor < 15 and pycor > -10 and pxcor < 15 and pxcor > -15]
 [ set pcolor brown ]  ;; STORAGE
  ask patches [
  if pycor = 15 or pycor = -15 or pycor = 10 or pycor = -10
   or pycor = 5 or pycor = -5 or pycor = 0 or pxcor = 15 or pxcor = -15
   or pxcor = 10 or pxcor = -10 or pxcor = 5 or pxcor = -5  or pxcor = 0
   [ set pcolor gray + 2 ]  ;; ROAD
  if pycor > -15 and pycor < -10
   [ set pcolor gray + 2 ]  ;; ROAD
  if pxcor = 16 or pxcor = -16 or pycor = 16 or pycor = -16
    [ set pcolor black + 3]  ;; WALLS
  if pycor  > -16 and pycor < -12 and pxcor > -16 and pxcor > -16 and pxcor < 16
    [ set pcolor yellow ]  ;; CHARGE STATION
  if pycor > 10 AND pycor < 15 AND pxcor > -15 AND pxcor < -10 [ set pcolor green ]   ;; PACKING
  if pycor < -5 AND pycor > -10 AND pxcor < 15 AND pxcor > 10 [ set pcolor blue ]   ;; DROP OFF
  ]
end 

to separate  ;; separate turtles
  if any? other turtles-here [ move-to one-of patches with [ pcolor = gray + 2 ]]  ;; if collision, place elsewhere
end 

;;;;;;;;;;;;;;;;;;;;;;;;
;; RUNTIME PROCEDURES ;;
;;;;;;;;;;;;;;;;;;;;;;;;

to go
   check-trail?
   check-goal?
   check-charge
   move
 tick
end 

to check-trail?  ;; agents draw their path
  ask turtles [
    set turtles-present count turtles-here
    ifelse show-trail? [ pen-down ] [ pen-up ]
  ]
end 

to check-goal?  ;; agents display goal as label
  ask turtles [
    set turtles-present count turtles-here
    ifelse show-goal?
    [
      if goal = picking [ set label "picking" ]
      if goal = packing [ set label "packing" ]
      if goal = dispatching [ set label "dispatching" ]
      if goal = charging [ set label "charging" ] ]
    [ set label "" ]
  ]
end 

to check-charge
  ask turtles
  [
    ifelse energy < 100 and (goal = picking or goal = packing)  ;; if charge below 100 and agent has cancelled pick or pack
     [ set goal charging set pending pending + 1 ]  ;; charge and add order to pending again
       [ ifelse energy < 100 and (goal = dispatching)  ;; if charge below 100 and cancelled dispatch
         [ set goal charging set packaged packaged - 1 set pending pending + 1 ]  ;; charge and cancel packaged
         [ if energy < 100 [set goal charging set color orange]]  ;; otherwise, charge
       ]
 ]
end 

to move
  ask turtles [
    face next-patch  ;; face goal
    set-speed  ;; move forward if possible
  ]
end 

to reduce-speed
  fd -1
  set my-speed  0
end 

to increase-speed
  fd 1
  set my-speed  1
end 

to set-speed
  if energy > 505 [ fd 1 ]  ;; fixes glitch where agents freeze occasionally after charging

  ifelse not member? patch-here [neighbors4] of charging
  [     ifelse any? turtles-on patch-ahead 1  ;; if path is blocked
   [ lt random 90  ;; incrementally turn
       ifelse [ pcolor ] of patch-ahead 1 != grey  + 2 ;; if not facing path
        [  lt random 90 set color pink ]  ;; incrementally turn and color pink when avoiding obstacle
        [ increase-speed update-energy ]  ;; when path clear move and reduce charge
   ]
    [ increase-speed update-energy ] ] ;; move and reduce charge       ]
    [ set heading 0 update-energy  ;; face up
    if pcolor != yellow [ reduce-speed update-energy]  ;; stay still and begin charging
  ]
end 

to update-energy
 ifelse laden? = true  ;; if carrying item,
   [ set energy energy - 2 ]  ;; increase rate of energy consumption
   [ set energy energy - 1 ]  ;; otherwise, normal rate

  if member? patch-here [neighbors] of charging [ set energy energy + 10 ]  ;; increase turtle energy when on bay
  if pcolor = yellow and energy > 499 [ increase-speed set goal picking ]  ;; if full charge leave bay
end 

to-report next-patch  ;; establish goal of agent
  if goal = picking [ set color white ]
  if goal = picking and (member? patch-here [ neighbors4 ] of picking) [  ;; if goal pick and order picked
    set goal packing  ;; goal set to packing order
    set color green - 1
    set pending pending - 1
    set laden? true  ;; carrying item
]
  if goal = packing [ set color green ]
  if goal = packing and (member? patch-here [ neighbors4 ] of packing) [  ;; if goal pack and order packed
    set goal dispatching   ;; goal set to dispatching order
    set color  blue - 1
    set packaged packaged + 1
  ]
  if goal = dispatching [ set color blue ]
  if goal = dispatching and (member? patch-here [ neighbors4 ] of dispatching) [  ;; if goal drop and order dropped
    set goal picking  ;; goal set to next order
    set color  white
    set dispatched dispatched + 1
    set packaged packaged - 1 set pending pending + 1
    set laden? false  ;; not carrying item
  ]
  ;; CHOICES is agentset of the candidate patches that the robot can move to
  let choices neighbors with [ pcolor = gray + 2 or pcolor = yellow]  ;; grey patches are roads
  let choice min-one-of choices [ distance [ goal ] of myself ]  ;; move to patch closest to goal
  report choice  ;; report chosen patch
end 

to watch-robot
   stop-watching
   watch one-of turtles  ;; pick random agent
   ask subject
   [
     inspect self  ;; show view
     set size 1.5  ;; increase size

     ask picking [
       set pcolor yellow - 1
       set plabel-color yellow
       set plabel "picking"
     ]
     ask packing [
       set pcolor orange - 1
       set plabel-color orange
       set plabel "packing"
     ]
       ask dispatching [
       set pcolor white - 1
       set plabel-color white
       set plabel "dispatching"
     ]
     ask charging [
       set pcolor red - 1
       set plabel-color red
       set plabel "charging"
     ]
     set label [ plabel ] of goal
   ]
end 

to stop-watching ;; reset the picking and packing patches from previously watched car(s) to the background color
  ask patches
  [ if pcolor = orange - 1 [
      stop-inspecting self
      set pcolor green
      set plabel ""
    ]
    if pcolor = red - 1 [
      stop-inspecting self
      set pcolor yellow
      set plabel ""
    ]
    if pcolor = yellow - 1 [
      stop-inspecting self
      set pcolor brown
      set plabel ""
    ]
    if pcolor = white - 1 [
      stop-inspecting self
      set pcolor blue
      set plabel "" ]
  ]
  ask turtles  ;; close open inspectors
  [ set label ""
    stop-inspecting self
  ]
   reset-perspective
end 

;; JACK MCGRADY 2022
;; SOME ELEMENTS INSPIRED FROM " TRAFFIC GRID GOAL" & "FACTORY ROBOTS" (URI WILENSKY)

There is only one version of this model, created almost 2 years ago by Jack M.

Attached files

File Type Description Last updated
Robotic Factory.png preview Preview for 'Robotic Factory' almost 2 years ago, by Jack M Download

This model does not have any ancestors.

This model does not have any descendants.