powered by NetLogo

view/download model file: consumersMKT.nlogo

WHAT IS IT?

Consumers Profile Monitor is an simple adaptation from Evolution Employee, designed for The Organisational Responsibility Model (Passos, Chamovitz and Theodoulidis), which was built based on the Aging Chains model proposed by John Sterman in the book Business Dynamics: Systems Thinking and Modeling for a Complex World.

Original model had been constructed to help managers to monitor status of 3 types of employees: Trainees, Common Employees and Masters, during employee life cycle.

Staff evolution model mapped the evolution of professionals’ careers, taking into account PROMOTION and OUTFLOW along employee life cycle, from hiring up to retirement.

Consumers Profile Monitor considers 3 TYPES OF CONSUMERS: BEGINNERS, COMMON AND MASTERS .ere is a DELAY that makes the employee takes certain time to pass from beginner to more experienced positions. There is also ANOTHER DELAY for the employee to pass from the last employee stage, master, to finish his career at that company. The closure can be prematurely finished, along the intermediate stages.

The model was adapted from the original to allow SHORT-TERM OR LONG-TERM LEAVES, and the main consequence is the consequent delay for their evolution/promotions, causing the employee to remain longer at each stage.

Agent Based Modelling allows modelling each agent individually. For this model there is a PROBABILITY for each different agent leaving the company, as well as a different TIME for the agent to STAY TEMPORARY OUT of the company.

The model then allows the manager to perform simulations changing parameters until he gets to a number of hires that allows, through the replacement of staff, to keep company with a suitable crew to keeping running it’s services.

HOW IT WORKS

Suppose there is a place where a product need to be tested in a specific population from a limited and closed region. For this model, no new clients are considered, since there is a specific period to test the product (for example 35 weeks).

This product can have 3 distinct types of consumers. As they get older, they can change their behaviour. One example could be an anti-aging cosmetic.

AGENTS (consumers) can assume different STATUS:

Beginners (B) is true when the agent is a beginner
Common Consumers (C) is true after beginners upgrade
Masters (M) is true after Employee upgrade

When the test starts, no new consumers enter the system. However, customers can stop to consume (they are OUT OF MARKET) for a short or long time, due to a trip, a disease, or other cause.

When an AGENT is OUT OF THE MARKET, status assume values as follows:

Beginners_OutOfWork (T) is true if beginner is is out
Beginners_OutOfWork (C) if true if common consumer is out
Beginners-OutOfWork (M) is true if master is out

The test starts with all consumers being beginners and no one out of company.

Along the time, the 3 groups of agents (B, M, C) upgrade their status.

delay-retirement - defines the number of masters that left definitely the market.

Whilst AGING,

HOW TO USE IT

select the number of new consumers (beginners) are entering the market for the test.
Than try to change fraction_1 consider a test after a period and part of them will not be promoted, only X %.
Run the model and observe the graphic.
Do the same with fraction_2
Run the model again and observe the graphic.

THINGS TO NOTICE

Consider, for start:

These parameters reflect the opportunity that the company offers for public workers for building a career for life in the company. Nowadays the profile of the youth follows a different behavior, they does not think of staying in the same organization for all his life.

This parameter reflects consumers’ fidelity stability. Some consumers stop to buy products and return, after a time.

THINGS TO TRY

Modify the main parameters and compare the graphics, and the final results.

EXTENDING THE MODEL

This model was extended from Production and Business Management to the Market field, to monitor consumers behaviour.

NETLOGO FEATURES

RELATED MODELS

This section could give the names of models in the NetLogo Models Library or elsewhere which are of related interest.

CREDITS AND REFERENCES

Thanks for Uri Wilensky

References:

NetLogo website. http://ccl.northwestern.edu/netlogo/,

PASSOS, G.F. CHAMOVITZ, I. Modelo De Responsabilidade Organizacional, Aplicado Em Empresa Pública De Tecnologia Da Informação E Fundamentado Em Dinâmica De Sistemas. In: IX Congresso Nacional de Excelência em Gestão – CNEG 2013, 2013, Rio de Janeiro – RJ.

PASSOS, G.F. CHAMOVITZ, I., THEODOULIDIS, B. Organizational Responsibility Model: Dealing with demand for services higher than installed capacity. Article accepted for presentation at the IEEE SMC 2013 Conference (SMC: Systems Science), October, 2013.

STERMAN, J. Business dynamics: systems thinking and modeling for a complex world.Boston, MA: Irwin McGraw-Hill, 2000

CC BY-NC-SA 3.0

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.

Commercial licenses are also available. To inquire about commercial licenses, please contact Uri Wilensky at uri@northwestern.edu.

CODE

;; vari�veis globais

globals   [ 
  Employee_Trainee   Employee   Employee_Master       Total-Employees   
  Trainee_OutOfWork    OutOfWork    Employees_OutOfWork   Masters_OutOfWork
  ]

turtles-own   [ 
  Employee_Trainee?                             ;; se verdadeiro, a pessoa eh Employee Trainee
  Employee?                                     ;; se verdadeiro, a pessoa eh Employee
  Employee_Master?                              ;; se verdadeiro, a pessoa eh Master Employee 
  Trainee_OutOfWork?                            ;; se verdadeiro, a pessoa esta como Employee Trainee Afastado
  Employees_OutOfWork?                          ;; se verdadeiro, a pessoa esta como Employee Afastado
  Masters_OutOfWork?                            ;; se verdadeiro, a pessoa esta como Mestere Employee Afastado 
  
  ;;  anos-na-empresa                               ;; anos da pessoa na empresa    
 
  ]                                             

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; prepara o programa para ser executado
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to setup
  ;; (for this model to work with NetLogo's new plotting features,
  ;; __clear-all-and-reset-ticks should be replaced with clear-all at
  ;; the beginning of your setup procedure and reset-ticks at the end
  ;; of the procedure.)
  __clear-all-and-reset-ticks                                        ;; limpa todas vari�veis e a interface 
 
  set-default-shape turtles "person"             ;; prepara a tartaruga para a forma person (pessoas)
  crt num_initial_consumers  [                   ;; cria as pessoas de acordo com o n�mero de pessoas 
      set Employee_Trainee?  true                ;; atribui verdadeiro ao estado Employee Trainee da pessoa
      set Employee?          false               ;; atribui falso ao estado Employee da pessoa
      set Employee_Master?   false               ;; atribui falso ao estado Master Employee da pessoa 
      set Trainee_OutOfWork? false               ;; atribui falso ao estado Trainee_OutOfWork da pessoa
      set Employees_OutOfWork? false             ;; atribui falso ao estado Employees_OutOfWork da pessoa
      set Masters_OutOfWork?   false             ;; atribui falso ao estado Masters_OutOfWork da pessoa  
      set color yellow                           ;; atribui cor amarela � pessoa no estado Employee Trainee
      set size 1.5                               ;; atribui 1.5 ao tamanho da pessoa, mais f�cil de ver
      setxy random-xcor random-ycor              ;; posiciona aleatoriamente as pessoas no patch
      ]
    
  atualiza-variaveis-globais                       ;; executa a procedure que atualiza variaveis globais
  reset-ticks
  
end

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; executa o programa, procedure principal
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to go
  
  envelhece                                        ;; executa a procedure que envelhece a pessoa                              
  move                                             ;; executa a procedure que move a pessoa 
  atualiza-variaveis-globais                       ;; executa a procedure que atualiza variaveis globais
  tick  
  if ticks = (delay_retirement + delay_promotion_1 + delay_promotion_2) [ stop ]
  
end


to atualiza-variaveis-globais                      ;; procedure que atualiza variaveis globais
  set Employee_Trainee     count turtles with [Employee_Trainee?] 
  set Employee             count turtles with [Employee?]
  set Employee_Master      count turtles with [Employee_Master?] 
  set Trainee_OutOfWork    count turtles with [Trainee_OutOfWork?]
  set Employees_OutOfWork  count turtles with [Employees_OutOfWork?]
  set Masters_OutOfWork    count turtles with [Masters_OutOfWork?]
  set OutOfWork         ( Trainee_OutOfWork + Employees_OutOfWork + Masters_OutOfWork )
  set Total-Employees ( Employee_Trainee +  Employee + Employee_Master + OutOfWork )     
  update-plot                                     ;; atualiza o gr�fico
end

                                                  
to envelhece                                      ;; procedure que envelhe as pessoas

  ask  n-of (  ( Employee_Trainee / delay_promotion_1 ) * fraction_1  )        turtles with [Employee_Trainee?]  [ promove-Employee ] 
  ask  n-of (  ( Employee_Trainee / delay_promotion_1 ) * ( 1 - fraction_1 ) ) turtles with [Employee_Trainee?]  [ demite-Trainee ]   

  ask  n-of random (  Employee_Trainee * fraction_T )                         turtles with [Employee_Trainee?]   [ afasta-Trainee ] 
  ask  n-of random (  Trainee_OutOfWork / delay_T  )                          turtles with [Trainee_OutOfWork?]  [ retorna-Trainee ]  
       
   
  ask  n-of (  ( Employee / delay_promotion_2 ) * fraction_2  )             turtles with [Employee?]             [ promove-Master ] 
  ask  n-of (  ( Employee / delay_promotion_2 ) * ( 1 - fraction_2 ) )      turtles with [Employee?]             [ demite-Employee ]    

  ask  n-of random (  Employee * fraction_C  )                              turtles with [Employee?]             [ afasta-Employee ]    
  ask  n-of random (  Employees_OutOfWork / delay_C  )                      turtles with [Employees_OutOfWork?]  [ retorna-Employee ]    
  
  ask  n-of ( Employee_Master / delay_retirement )                          turtles with [Employee_Master?]      [ promove-retirement ]  
 
  ask  n-of random (  Employee_Master * fraction_M  )                       turtles with [Employee_Master?]      [ afasta-Master ]     
  ask  n-of random (  Masters_OutOfWork / delay_M  )                        turtles with [Masters_OutOfWork?]    [ retorna-Master ]     
 
end


to promove-Employee
  set Employee_Trainee? false               ;; atribui falso ao estado Employee Trainee da pessoa
  set Employee? true                        ;; atribui verdadeiro ao estado Employee da pessoa
  set color blue                            ;; atribui cor azul � pessoa no estado Employee 
end  

to promove-Master
  set Employee? false                       ;; atribui falso ao estado Employee  da pessoa
  set Employee_Master? true                 ;; atribui verdadeiro ao estado Master Employee da pessoa
  set color green                             ;; atribui cor azul � pessoa no estado Employee 
end  

to demite-Trainee
  set Employee_Trainee? false               ;; atribui falso ao estado Employee Trainee da pessoa
  die
end 

to demite-Employee
  set Employee? false                      ;; atribui falso ao estado Employee Trainee da pessoa
  die
end 

to promove-retirement
  set Employee_Master? false               ;; atribui falso ao estado Master Employee da pessoa
  die
end 

to afasta-Trainee
  set Employee_Trainee? false               ;; atribui falso ao estado Employee Trainee da pessoa
  set Trainee_OutOfWork? true                 ;; atribui verdadeiro ao estado Trainee Afastado da pessoa
  set color red                               ;; atribui cor vermelha � pessoa afastada 
end  

to retorna-Trainee
  set Trainee_OutOfWork? false                ;; atribui falso ao estado Trainee Afastado da pessoa
  set Employee_Trainee? true                ;; atribui verdadeiro ao estado Employee Trainee da pessoa
  set color yellow                            ;; atribui cor amarela � pessoa no estado Employee Trainee 
end  

to afasta-Employee
  set Employee? false                       ;; atribui falso ao estado Employee da pessoa
  set Employees_OutOfWork? true             ;; atribui verdadeiro ao estado Employee Afastado da pessoa
  set color red                               ;; tribui cor vermelha � pessoa afastada 
end  

to retorna-Employee
  set Employees_OutOfWork? false            ;; atribui falso ao estado Employee Afastado da pessoa
  set Employee? true                        ;; atribui verdadeiro ao estado Employee da pessoa
  set color blue                              ;; atribui cor azul � pessoa no estado Employee 
end  

to afasta-Master
  set Employee_Master? false                ;; atribui falso ao estado Master Employee da pessoa
  set Masters_OutOfWork? true                 ;; atribui verdadeiro ao estado Master Afastado da pessoa
  set color red                               ;; tribui cor vermelha � pessoa afastada 
end  

to retorna-Master
  set Masters_OutOfWork? false                ;; atribui falso ao estado Master Afastado da pessoa
  set Employee_Master? true                 ;; atribui verdadeiro ao estado Master Employee da pessoa
  set color green                             ;; atribui cor verde � pessoa no estado Master Employee 
end  


to move                                        ;;  move todas as pessoas 
  ask turtles
  [ rt random 100
    lt random 100
    fd 1 ]
  
end


to update-plot                                             ;; atualiza o gr�fico
  set-current-plot "population"                             ;; seta o gr�fico population como corrente
  
  set-current-plot-pen "Beginner"                           ;; atualiza a vari�vel pessoas Employee_Trainee
  plot   Employee_Trainee                                ;; plota o n�mero de pessoas Employee_Trainee no gr�fico

  set-current-plot-pen "Consumer"                        ;; atualiza a vari�vel pessoas Employee
  plot   Employee                                        ;; plota o n�mero de pessoas Employee no gr�fico   
    
  set-current-plot-pen "Master"                            ;; atualiza a vari�vel infectadas Employee_Master
  plot   Employee_Master                                 ;; plota o n�mero de pessoas Employee_Master no gr�fico

  set-current-plot-pen "Away"                          ;; atualiza a vari�vel pessoas Afastadas 
  plot   OutOfWork                                         ;; plota o n�mero de pessoas OutOfWork no gr�fico  
  
  set-current-plot-pen "Total"                             ;; atualiza a vari�vel total de pessoas
  plot   Total-Employees                                 ;; plota o n�mero total de pessoas  
  

end