# Garbage can 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 FULL*SYSTEM*EE / MODEL*SIZE / MODEL*SIZE / 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 FULL*SYSTEM*EE slider) and total Energy Required (ER) of Problems. The LOAD slider controls the ratio.

## HOW TO USE IT

The MODEL*SIZE 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 MODEL*SIZE, number of Problems is equal to 2 * MODEL*SIZE and time of decision making process continue, i.e. total modeling time, is equal to 2 * MODEL*SIZE.

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 FULL*SYSTEM*EE slider set (only) nominal numeric level of EE.

The SETUP button set the system structure in accordind with "PROBLEMS*CHOICES" and "MANAGERS*CHOICES" 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 "PROBLEMS*CHOICES" and "MANAGERS*CHOICES" 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:

- Wilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. Center for Connected Learning and Computer-Based Modeling, Northwestern University, Evanston, IL.

## COPYRIGHT AND LICENSE

Copyright 1997 Uri Wilensky.

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

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 [?] 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) [?] 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 over 8 years ago by Ivan Smarzhevskiy.

## Attached files

File | Type | Description | Last updated | |
---|---|---|---|---|

Garbage can model.png | preview | Preview for 'Garbage can model' | over 8 years ago, by Ivan Smarzhevskiy | Download |

This model does not have any ancestors.

This model does not have any descendants.