Shopping Mall Dynamics

Shopping Mall Dynamics preview image

2 collaborators

Terry Bossomaier (Team member)

Tags

marketing 

Tagged by Steven D'Alessandro 2 days ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 7.0.3 • Viewed 38 times • Downloaded 3 times • Run 0 times
Download the 'Shopping Mall Dynamics' modelDownload this modelEmbed this model

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


WHAT IS IT?

This is a model which seeks to explain factors of retail structure in a mall. In particular the number of specialist retailers. Important factors in the model are "stickness", which is the efforts of mall managers to have customers stay longer in the mall. Degree of noise in customer decsion making, and social network factors such as probability of forming links and weight given to WOM information.

HOW IT WORKS

The customers are represented by an agent, denoted i. Customers are randomly connected to other customers and exchange information about their retailing experiences through these social networks. The more links within the networks of customers the more effectively information about retailing alternatives can pass through the customers. The probability of agent i linking to another agent is given by the parameter η, which is randomly calculated for each agent.

Each time step t, there is a chance that the agent will perceive a need to make a purchase. The agent then chooses whether to purchase the product from the bricks and mortar retailer at a mall (BMR) or the online retailer (OR). The retailing choice of customer i at time step t denoted ci(t) depends on its experience xij(t) with the j being one of the categories of retailer (BMR or OR).

We assume the probability of choosing between the option of shopping from a retailer at a mall or an online retailer is a logistic function of the customer’s levels of past experience with the retailers. The probability of customer i choosing BMR at time step t is then:

P{i chooses BMR} = e^(β(x(i,BMR) (t) - x(i,OR) (t)))/(1+ e^(β(x(i,BMR) (t) - x(i,OR) (t))) ) (1)

After the calculation of all the customers’ experiences, the customers then share the experiences across their social networks. To calculate the sharing of information about retailers, each agent calculates a weighted average of their own experience with each type of retailer this time step with the experience of each of their network neighbors. The weight given to the neighbors’ experience is α ϵ [0-1].

HOW TO USE IT

The interface shows a number of sliders (variables) such as stickness, probablity of links, weight given to WOM (gossip weight), and number of specailist retailers.

THINGS TO NOTICE

When running the model, having the customers stay longer is most effective strategy, even given high levels of noise in decision making. There seems to be a curviliner relatiohsip between number of original specialists and the number of final retail specialsts.

THINGS TO TRY

Manipulate the sliders on stickness, number of specialist retailers and and customer noise (Beta) and see if the curviliner relationship with the orignal versus final number of specialist retailers holds.

EXTENDING THE MODEL

As yet we have not run the model under different social network factors of the probability of forming links and WOM effects (Gossip weight in the interface panel).

NETLOGO FEATURES

There is some clever coding here which covers retailer survival and consumer expenditure.

RELATED MODELS

This model is related to a published model in Duncan, Roderick, Bossomaier, Terry and D’Alessandro, Steven (2014) The defence of bricks and mortar retailing. 13th International Conference on Modelling and Applied Simulation, Bordeaux, France: 111-116, available online at http://www.msc-les.org/conf/mas2014/

CREDITS AND REFERENCES

Duncan, Roderick, Bossomaier, Terry, D’Alessandro, Steven and Murphy, Danny (2015) Clothes maketh the man and the regional mall, The 12th International Multidisciplinary Modelling and Simulation Multi-Conference, Bergeggi, Italy.

Comments and Questions

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

Click to Run Model

globals
[
  retailing-patches
  residential-patches
  house-patches
  specialist-patches
  mall-entrance-patches
  average-exp-bricks
  average-exp-online
  number-customers-bricks
  number-customers-online
  candidate
]


breed [customers customer]
customers-own
[
  cash
  house-xcor
  house-ycor
  pref-distance
  gossip-weight
  exp-online
  exp-bricks
  new-exp-online
  new-exp-bricks
  shopping
  prob-choice-bricks
  purchase-need
  purchase-target
]

breed [houses house]

breed [departments department]
departments-own
[
  honeypot
  stickiness
  cash
]

breed [specialists specialist]
specialists-own
[
  honeypot
  stickiness
  cash
]

patches-own
[
]

to setup
  clear-all
  setup-patches
  setup-agents
  setup-networks
  reset-ticks
end 

to setup-patches

  ;; create the 'house patches'
  set residential-patches patches with [(pycor >= 0) and (pycor <= 31)]
  ask residential-patches [ set pcolor green ]


  ;; create the 'retailing patches'
  set retailing-patches patches with [(pycor >= 32) and (pycor <= 67)]
  ask retailing-patches [ set pcolor brown ]

  set house-patches patches with [(pxcor mod 6 = 3) and (pycor mod 6 = 3) and (pycor < 31)]

  set specialist-patches patches with [((pxcor mod 3 = 1) and (pycor = 62) and (pxcor > 5) and (pxcor < 43)) or
    ((pycor mod 3 = 1) and (pycor <= 60) and (pycor > 31) and (pxcor = 1)) or ((pycor mod 3 = 1) and (pycor <= 60) and (pycor > 31) and (pxcor = 46))]

  set mall-entrance-patches patches with [(pxcor > 3) and (pxcor < 43) and (pycor = 32)]
  ask mall-entrance-patches [ set pcolor grey]
end 

to setup-agents
  set-default-shape customers "person"
  create-customers (initial-number-customers)
  [
    set exp-online random-float 1
    set exp-bricks random-float 1
    set color 4 + ((exp-bricks - exp-online) * 10)
    set gossip-weight initial-gossip-weight
    move-to one-of residential-patches
    set house-xcor xcor
    set house-ycor ycor
    set purchase-need 0
    set purchase-target 0
    set cash 100
  ]

  set-default-shape houses "house"
  create-houses (40)
  [
    set color brown
    move-to one-of house-patches with [count houses-here = 0]
  ]

  set-default-shape departments "house"
  create-departments (1)
  [
    set color red
    set size 6
    setxy 2 63
    set honeypot 1
    set stickiness 0.7
    set cash 1000
  ]

  create-departments (1)
  [
    set color blue
    set size 6
    setxy 45 63
    set honeypot 1
    set stickiness 0.7
    set cash 1000
  ]

  set-default-shape specialists "house"
    create-specialists (30)
  [
    set color yellow
    set size 3
    setxy 6 62

    if count (specialists with [honeypot = 1]) < need-purchase-specialists
    [
      set honeypot 1
    ]

    set stickiness (random-float 20) / 100 + average-stickiness - 0.1
    move-to one-of specialist-patches with [count specialists-here = 0]
    set cash 100
  ]
end 

to setup-networks
  ask customers
  [
   if ((random-float 1) < prob-links)
    [
      create-link-with one-of customers with [distance myself > 0]
    ]

  ]
  ask links [set color grey]
end 

to layout
  wait 0.05
  layout-spring customers links 0.2 5 1
  ask customers with [[pcolor] of patch-here != green]
  [
    move-to one-of patches with [(distance myself < 3) and (pcolor = green)]
    set house-xcor xcor
    set house-ycor ycor
  ]
end 

to choose-purchase-need
  ask customers
  [
    if random-float 1 < 0.429
    [
      set prob-choice-bricks (exp (beta * (exp-bricks - exp-online))) / (1 + (exp (beta * (exp-bricks - exp-online))))
      ifelse (random-float 1 < prob-choice-bricks)
      [
        set purchase-need 1
        ifelse random-float 1 < 0.5
        [
          ifelse (need-purchase-specialists > 0)
          [
            set purchase-target one-of specialists with [honeypot = 1]
          ]
          [
            set purchase-target one-of departments
          ]
        ]
        [
          set purchase-target one-of departments
        ]
      ]
      [set purchase-need 2]
    ]
  ]
end 

to shopping-trip
  ask customers with [purchase-need = 1]
  [
    move-to one-of mall-entrance-patches
    ask my-links [set hidden? true]
    set exp-bricks 0.40
    set label cash
    while [distance purchase-target > 4]
    [
      face purchase-target
      fd 1
      ;;wait 0.01

      if specialists with [distance myself < 5] != nobody
      [
;;
        ask specialists with [distance myself < 5]
          [
            set color green
          ]
        set candidate one-of specialists with [distance myself < 5]

        if candidate != nobody
        [
          if random-float 1 < [stickiness] of candidate
          [
            ask candidate
            [
              set cash cash + 5
              set color grey
            ]
            set exp-bricks exp-bricks + 0.05
          ]


        ]
      ]
    ]

    set exp-bricks exp-bricks + 0.05
    set cash cash - 10
    set purchase-need 0

    ask purchase-target
    [
      set cash cash + 10
    ]


    if exp-bricks > 1
    [
      set exp-bricks 1
    ]
    set label cash

    ask my-links [set hidden? false]

  ]
end 

to mouse-move
  ;When enable by actived the button allows individual agents to be moved.
  if mouse-down? [
    set candidate min-one-of customers [distancexy mouse-xcor mouse-ycor]
    if [distancexy mouse-xcor mouse-ycor] of candidate < 1 [
      while [mouse-down?] [
        ask candidate [ setxy mouse-xcor mouse-ycor ]
      ]
    ]
  ]
end 

to return-customers-to-houses
  ask customers
  [
  set xcor house-xcor
  set ycor house-ycor
  ]
end 



;;main routine

to go

  if ticks > 199 [stop]
  if specialists = 0 [stop]

  choose-purchase-need

  shopping-trip



  set average-exp-online mean [exp-online]  of customers * 100
  set average-exp-bricks mean [exp-bricks]  of customers * 100

  return-customers-to-houses

  ask customers
  [
    set purchase-need 0
  ]


  ask departments
  [
    set cash cash - 25
    set label cash
  ]
  ask specialists
  [
    set cash cash - 5
    set label cash
    set color yellow
    if cash < 0
    [
      die
     ]
  ]



  tick
end 

There is only one version of this model, created 2 days ago by Steven D'Alessandro.

Attached files

File Type Description Last updated
Shopping Mall Dynamics.png preview Preview for 'Shopping Mall Dynamics' 2 days ago, by Steven D'Alessandro Download

This model does not have any ancestors.

This model does not have any descendants.