Garbage can model NL 6.04

Garbage can model NL 6.04 preview image

1 collaborator

Tags

decision making 

Tagged by Ivan Smarzhevskiy about 5 years ago

organizational behavior 

Tagged by Ivan Smarzhevskiy about 5 years ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.0.4 • Viewed 432 times • Downloaded 19 times • Run 0 times
Download the 'Garbage can model NL 6.04' 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?

It is reconstruction of the original FORTRAN code of the classical M. Cohen, J. March, and J. Olsen "garbage can model" (GCM or CMO) of collective decision making.

HOW IT WORKS

The concept of GCM is decision making, which resolve Problems. Problems have Energy Required (ER) for their decision, Managers (decision makers) have Effective Energy (EE) for the decisions generation. The place of decision making is the Choice Opportunities (Choices) - abstraction of commitees, consul boards and so on.

The Choices and Problems open randomly. The Problems activated by two items and Choices by one item per step of modellig (tick) in first halfe of modelling time. All Managers are ready for action from first modelling step.

Problems and Managers access to Choices in according with system structrure. There is three types of Problems access to Choices and three types of Managers access to Choices.

Unsegmented access type is full access for all Problems (Managers) to all Choices. Hierarchocal access type is access for first and second Problems (first Manager) to Choice number one, access for third and fourth Problems (second Manager) to Choices number one and number two and so on. Spezialized access type is access for first and second Problems (first Manager) only to Choice number one, access third and fourth Problems (second Manager) only to Choices number two and so on.

On each step of modelling Problems and Managers cheks the accesabe (in accordind with system structure) Choices for minimal level of (ER - EE), i.e. Choice nearest to dicision, and migrate to it. Then, all opened Choices cheks decision rule.

If ER <= EE decision with type "Resolution" carried out, the Choice and attached to it Problems closed. If no one Problem attached to open Choice at the step of modelling, Choice will be closed. There is decision "Oversight" (no problems for the committee). If it was Problems in the Choice in past, but now Problems leave the Choice (migrates to other Choices), Choice closes. There is decision "Flight". EE of Managers, accumulated in the Choice, wasted.

The main diference between Problems and Managers is: Problems transfers their ER from Choice to Choice in the process of migration, but Managers get their EE by quantums (quantum volume is equal FULLSYSTEMEE / MODELSIZE / MODELSIZE / 2) and leave EE in Choices in the process of migration.

The critical parameter for effective work of decision making system is ratio between total EE of system (nominal total EE value is exogenuos parameter, controlled by FULLSYSTEMEE slider) and total Energy Required (ER) of Problems. The LOAD slider controls the ratio.

HOW TO USE IT

The MODELSIZE slider controls how many Choices will be created. It's define size of model, so (following the original GCM) number of decision makers (Managers) is equal to MODELSIZE, number of Problems is equal to 2 * MODELSIZE and time of decision making process continue, i.e. total modeling time, is equal to 2 * MODELSIZE.

The LOAD slider controls level of total Energy Required (ER) of problems as part of total Effective Energy (EE) of Managers (value 10 fit to 100% Load, ER = EE).

The FULLSYSTEMEE slider set (only) nominal numeric level of EE.

The SETUP button set the system structure in accordind with "PROBLEMSCHOICES" and "MANAGERSCHOICES" settings. To advance the model one step at a time, use the GO ONCE button. The GO button keeps the model running until Effective energy (EE) of Managers more then 0 (time period equal to 2 * MODEL_SIZE).

The numbers in the view show the numbers of opened Choices and, after Choise closing, text show the type of Decision. Choices, remaining open at the end of modelling, are shown as full yellow circles.

The upper plot show Total current ER of all unsolved Problems. The lower plot show Effective energy wasted in the Choices, which was closed without Problems resolving. The Green line show EE wasted in "Oversight" decision type and the Blue line - in "Flight".

THINGS TO NOTICE

For the MODEL_SIZE equal 1 both Problems will be resolved for any LOAD level.

THINGS TO TRY

Try varying LOAD for fixed MODEL_SIZE and structure. How many problems will be resolved and Choices closed?

Try varying the sistem structure (by "PROBLEMSCHOICES" and "MANAGERSCHOICES" settings). What types of Decision types will appear?

EXTENDING THE MODEL

Presented model literally reproduces the original logic of GCM (with one exception: the equal effective energy distribution between managers assumed). There is not any modifications unlike to, in particular, Guido Fioretti modification where decisions are independent NetLogo objects, rather than a product produced by the decision rule checking in the Choices.

You can, by analogy with Guido Fioretti modification, change the rule of managers EE storage, allowing it to increase in the event of the closure Choice by decision type "Resolution" (managers become more effective in the process of decision making).

It is also interesting to investigate the decision-making process in a dynamically changing structure.

NETLOGO FEATURES

The world topology is a "torus" with -65,30 xcor and -5,55 ycor.

The structure of Problem's and Manager's access to Choices is implemented as two-level lists.

You can take off ";;" at the lines marked by "{4 Obswerver}" and look at some data values in Observer window.

RELATED MODELS

The Garbage Can Model of Organizational Choice by Guido Fioretti, posted Jun 22, 2013 at openabm.org https://www.openabm.org/model/3840/version/1/view

Garbage can model Excel reconstruction by Ivan Smarzhevskiy, posted Aug 19, 2014 at openabm.org https://www.openabm.org/model/4310/version/3/view

CREDITS AND REFERENCES

This model is based on the work of the Cohen, M., March, J. & Olsen, J., 1972. A Garbage Can Model of Organizational Choice. Administrative Science Quarterly, Volume 17, pp. 1-25. See also: Fioretti, G. & Lomi, A., 2008. An Agent-Based Representation of the Garbage Can Model of Organizational Choice. Journal of Artificial Societies and Social Simulation http://jasss.soc.surrey.ac.uk/11/1/1.html, 11(11). Fioretti, G. & Lomi, A., 2010. Passing the Buck in the Garbage Can Model of Organizational Choice. G. Fioretti and A. Lomi: Passing the Buck in tComputational and Mathematical Organization Theory, Issue 16 (2), pp. 113-143. Smarzhevskiy, I., 2014. Garbage Can Model: Reconstruction and Logical Analysis : http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2490388. Smarzhevskiy, I., 2014 Four Border Structures in GCM (Small Addition to the 'Garbage Can Model: Reconstruction and Logical Analysis'): http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2519433

HOW TO CITE

If you mention this model or the NetLogo software in a publication, we ask that you include the citations below.

For the model itself:

Smarzhevskiy, I., 2014. Garbage Can Model: Reconstruction and Logical Analysis : http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2490388. Smarzhevskiy, I., 2014 Four Border Structures in GCM (Small Addition to the 'Garbage Can Model: Reconstruction and Logical Analysis'): http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2519433

Please cite the NetLogo software as:

COPYRIGHT AND LICENSE

Copyright 1997 Uri Wilensky.

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 https://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.

Comments and Questions

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

Click to Run Model

globals [turt_size max_er_level k l m n e_global managers_num choice_opens_at choice_num problem_opens_at problem_num jia ika ee_man_per_tick choice_ee_up?]
breed [choices choice]
choices-own [num  open? ee  er decison_type]
breed [problems problem]
problems-own [num  solved? er  my_choice_num my_next_choice_num]
breed [managers manager]
managers-own [num  ee  my_choice_num my_next_choice_num]
;-----------------------------------------------------
;
; Choices and Problems activated randomly
;
;-----------------------------------------------------

to setup
  clear-all

  set_structure
  set turt_size 1
  set max_er_level 10
  set choice_num 0
  set problem_num 1
  set managers_num 1
  set ee_man_per_tick full_system_ee / model_size / model_size / 2
  open_managers ;; create model_size quantity of managers
;------------------------------------------------ choice_opens_at
  set choice_opens_at n-values model_size [ ?1 -> ?1 ]
  set choice_opens_at shuffle choice_opens_at
  set k position 0 choice_opens_at
  set choice_opens_at replace-item k choice_opens_at model_size
 ;  find 0 at list and replace it to model_size )))))))
  set choice_opens_at fput 0 choice_opens_at
 ;; show choice_opens_at ;; {4 Observer}

  open_choice   ;; create fake-choice (grey colored, #0) for just born problems attachment
  ask choices with [num = 0] [set open? false set shape "circle 2" set color gray]

;------------------------------------------------  problem_opens_at
  set problem_opens_at n-values (2 * model_size) [ ?1 -> ?1 ]
  set problem_opens_at shuffle problem_opens_at
  set k position 0 problem_opens_at
  set problem_opens_at replace-item k problem_opens_at (2 * model_size)
  set problem_opens_at fput 0 problem_opens_at ;; the value is no matter (0 or ...)
 ;; show problem_opens_at ;; {4 Observer}

  reset-ticks ;;
end 
;--------------------------------------------------

to go

   if ticks < model_size  [set choice_num choice_num + 1 open_choice]
   if ticks < model_size  [open_problem]

   problems_seek_best_choice
   managers_seek_best_choice
   ask problems with [not solved?] [problem_move num my_next_choice_num] ; and migrate
   ask managers [manager_move num my_next_choice_num] ; and migrate

   energy_changes ;; transfer ee from manager 2 choice
   decisions?
   if (sum [ee] of managers = 0) [stop]

   tick
end 
;------------------------------------------------

to open_choice
  create-ordered-choices 1   [
    set color yellow    set size turt_size + 4    set shape "circle"
    set num (item choice_num choice_opens_at)   set open? true    set label num set decison_type "Oversight"
    set ee 0 set er 0
    set xcor 0 set ycor 5 * turt_size * num
    ]
end 
;---------------------------------------------------

to open_managers ;; creates model_size instance of managers
   create-ordered-managers model_size
    [
    set color white    set size turt_size + 2     set shape "person";;"turtle"
    set num managers_num set managers_num managers_num + 1
    set label num
    set ee full_system_ee / model_size   ;; manager's full energy  volume
    set my_choice_num 0    ;; at activation managers are attached 2 chiose # 0 (fake choise)
    set xcor (3) * turt_size * (num + 1) set ycor 0
    ]
   if (managers_num  > model_size) [set managers_num  model_size]
end 
;-------------------------------------------------

to open_problem
   create-ordered-problems 2   [
    set color blue set size turt_size + 2 set shape "face sad"
    set num (item problem_num problem_opens_at) set problem_num problem_num + 1
    set label num set solved? false
    set er full_system_ee / model_size / 2 * load / max_er_level
    set my_choice_num 0 ;; at activation problems are attached 2 chiose # 0 (fake choise)
    set xcor (- 3) * turt_size * (num + 1) set ycor 0
    ]
   if (problem_num > 2 * model_size) [set problem_num model_size * 2]
end 
;--------------------------------------------------

to problems_seek_best_choice
   ask problems with [not solved?]
   [
     set l full_system_ee + 1 ;; more then max energy valuue 4 the model_size
     set k my_choice_num set m k
     set n num ;; 2
     set e_global er
     ask choices with [open?]
     [
      let j num
      if (item j (item n jia) = 1) ;;n-th problem has access to j-th choice
      [
       ifelse (k = num) or (k = 0)
       [
         let eer er - ee
         ;; show (word "er " eer " l " l "if 1") ;; {4 Observer}
         if ( eer < l) [set l eer set m num ]
       ] ;; the problem attaced to the choice or to choice # 0
       [
         let eer e_global + er - ee
         ;; show (word "eer " eer " l " l "if 2") ;; {4 Observer}
         if (eer < l) [set l  eer set m num ]
       ; old  if (e_global + er - ee + 0.0001 < l) [set l  e_global + er - ee set m num ]
       ] ;;  the problem not attaced to the choice
      ]
     ]
  ;;   show (word "er-ee " l " # " m) ;; {4 Observer}
     set my_next_choice_num m
   ]
end 
;---------------------------------------------------

to managers_seek_best_choice
  ask managers ;with []
   [
     set l full_system_ee + 1 ;; more then max energy value 4 the model size
     set k my_choice_num set m k
     set n num

     ask choices with [open?]
    [ ;; 2
    let j num ;; 2
    if (item j (item n ika) = 1) ;;n-th manager has access to j-th choice
           [if (er - ee < l) [set l er - ee set m num ] ] ;First naive try
    ] ;; 2
     set my_next_choice_num m
   ]
end 
;---------------------------------------------------

to problem_move [i j] ;; problem i moves to choice j
  ask choices with [num = j and open?]
  [
      ask  problems with [num = i and not solved?]
      [
        let llocal my_choice_num
        let elocal er
        set my_choice_num  j
        ask choices with [num = llocal] [set er er - elocal]  ;; old choise ER decrease
        ask choices with [num = j] [
                                   set er er + elocal   ;; new choce ER increase,
                                   if (decison_type = "Oversight") [set decison_type "Flight"]
                                   ];; decision type correct to "Flight" because now the choice has a problem
        set xcor (- 3) * turt_size * (num + 1) set ycor 5 * turt_size * j
      ]
  ]
end 
;----------------------------------------------------

to manager_move [i j] ;; manager i moves to choice j
  ask choices with [num = j and open?]
  [
      ask  managers with [num = i]
      [
        set my_choice_num  j
        set xcor (3) * turt_size * (num + 1) set ycor 5 * turt_size * j
      ]
  ]
end 
;--------------------------------------

to energy_changes ;; choices & managers
    ask managers
    [
     set choice_ee_up? false
     let llocal my_choice_num
     ifelse (ee - ee_man_per_tick >= 0)
       [ask choices with [num = llocal][set ee ee + ee_man_per_tick set choice_ee_up? true]]
       [set ee 0]

     if (choice_ee_up?) [set ee ee - ee_man_per_tick]
    ;; show ee ;; {4 Observer}
    ]
end 
;---------------------------------------------------

to decisions?
   ask choices with [open?]
   [
  ;; show (word "er " er " ee " ee) ;; {4 Observer}
   if (er <= ee)
     [
       if (er > 0.0000001) ; I mean "er > 0", but calculation errorrrs...
          [
            set decison_type "Resolution"
          ]
       set open? false set shape "circle 2" set label decison_type
       set l num
       ask problems with [my_choice_num = l] [set solved? true set color pink set shape "face happy"]
     ]
   ]
end 
;-----------------------------------------------

to set_structure
    ; Specialized access structure (problems 2 choices)
    ; jia original CMO(GCM) name 4 access structure array - problems * choices
    ; ika - decision structure - choices * managers
    ; ... (item l (item k jia)) ;k is block's (problem's) number,
    ;l - number in block (sublist of choices), value: 1 - access exist ,0 - no

; Unsegmented access structure (problems 2 choices)
let Unsegmented_problems_choices [[] [0 1 1 1 1 1 1 1 1 1 1] [0 1 1 1 1 1 1 1 1 1 1] [0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1]
    [0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1] [0 1 1 1 1 1 1 1 1 1 1]
    [0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1] [0 1 1 1 1 1 1 1 1 1 1]
    [0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1] [0 1 1 1 1 1 1 1 1 1 1]
    [0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1] [0 1 1 1 1 1 1 1 1 1 1]]
; Hierarchical access structure (problems 2 choices)
let Hierarchocal_problems_choices [[] [0 1 1 1 1 1 1 1 1 1 1] [0 1 1 1 1 1 1 1 1 1 1] [0 0 1 1 1 1 1 1 1 0 1][0 0 1 1 1 1 1 1 1 1 1]
    [0 0 0 1 1 1 1 1 1 1 1][0 0 0 1 1 1 1 1 1 1 1][0 0 0 0 1 1 1 1 1 1 1] [0 0 0 0 1 1 1 1 1 1 1]
    [0 0 0 0 0 1 1 1 1 1 1][0 0 0 0 0 1 1 1 1 1 1][0 0 0 0 0 0 1 1 1 1 1] [0 0 0 0 0 0 1 1 1 1 1]
    [0 0 0 0 0 0 0 1 1 1 1][0 0 0 0 0 0 0 1 1 1 1][0 0 0 0 0 0 0 0 1 1 1] [0 0 0 0 0 0 0 0 1 1 1]
    [0 0 0 0 0 0 0 0 0 1 1][0 0 0 0 0 0 0 0 0 1 1][0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1]]
; Specialized access structure (problems 2 choices)
let Specialized_problems_choices [[] [0 1 0 0 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0 0 0] [0 0 1 0 0 0 0 0 0 0 0][0 0 1 0 0 0 0 0 0 0 0]
   [0 0 0 1 0 0 0 0 0 0 0][0 0 0 1 0 0 0 0 0 0 0][0 0 0 0 1 0 0 0 0 0 0] [0 0 0 0 1 0 0 0 0 0 0]
   [0 0 0 0 0 1 0 0 0 0 0][0 0 0 0 0 1 0 0 0 0 0][0 0 0 0 0 0 1 0 0 0 0] [0 0 0 0 0 0 1 0 0 0 0]
   [0 0 0 0 0 0 0 1 0 0 0][0 0 0 0 0 0 0 1 0 0 0][0 0 0 0 0 0 0 0 1 0 0] [0 0 0 0 0 0 0 0 1 0 0]
   [0 0 0 0 0 0 0 0 0 1 0][0 0 0 0 0 0 0 0 0 1 0][0 0 0 0 0 0 0 0 0 0 1] [0 0 0 0 0 0 0 0 0 0 1]]

  if (problems_choices ="Unsegmented")
  [set jia Unsegmented_problems_choices]
  if (problems_choices ="Hierarchocal")
  [set jia Hierarchocal_problems_choices]
  if (problems_choices ="Specialized")
  [set jia Specialized_problems_choices]

; Unsegmented decision structure (managerss 2 choices)
let Unsegmented_managers_choices [[] [0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1]
    [0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1]
    [0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1][0 1 1 1 1 1 1 1 1 1 1]]
; Hierarchical decision structure (managerss 2 choices)
let Hierarchocal_managers_choices [[] [0 1 1 1 1 1 1 1 1 1 1][0 0 1 1 1 1 1 1 1 1 1][0 0 0 1 1 1 1 1 1 1 1]
    [0 0 0 0 1 1 1 1 1 1 1][0 0 0 0 0 1 1 1 1 1 1][0 0 0 0 0 0 1 1 1 1 1][0 0 0 0 0 0 0 1 1 1 1]
    [0 0 0 0 0 0 0 0 1 1 1][0 0 0 0 0 0 0 0 0 1 1][0 0 0 0 0 0 0 0 0 0 1]]
;Specialized decision structure (managers 2 choices)
let Specialized_managers_choices [[] [0 1 0 0 0 0 0 0 0 0 0][0 0 1 0 0 0 0 0 0 0 0] [0 0 0 1 0 0 0 0 0 0 0]
   [0 0 0 0 1 0 0 0 0 0 0][0 0 0 0 0 1 0 0 0 0 0] [0 0 0 0 0 0 1 0 0 0 0][0 0 0 0 0 0 0 1 0 0 0]
   [0 0 0 0 0 0 0 0 1 0 0][0 0 0 0 0 0 0 0 0 1 0] [0 0 0 0 0 0 0 0 0 0 1]]

  if (managers_choices ="Unsegmented")
  [set ika Unsegmented_managers_choices]
  if (managers_choices ="Hierarchocal")
  [set ika Hierarchocal_managers_choices]
  if (managers_choices ="Specialized")
  [set ika Specialized_managers_choices]
end 

There is only one version of this model, created about 5 years ago by Ivan Smarzhevskiy.

Attached files

File Type Description Last updated
Garbage can model NL 6.04.png preview Preview for 'Garbage can model NL 6.04' about 5 years ago, by Ivan Smarzhevskiy Download

This model does not have any ancestors.

This model does not have any descendants.