Optimising Compensation
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This model explores the relationship between employee tenures at companies and compensation. This tests the notion that changing jobs more frequently leads to better compensation in a shorter period of time.
HOW IT WORKS
This model creates a number of employers and employees. At each step, each employer evaluates its workforce needs and adjusts its number of job openings accordingly. At each step, the employees decide whether they want to stay in their job and negotiate for a promotion or if they want to apply for a new job.
Employees have a tendency (stayers/changers) which influences which decision they make at each tick. Stayers have a tipping point which is a random value at which they will forego their tendency.
HOW TO USE IT
num-employees
- The number of employees in the simulation.num-employers
- The number of employers in the simulation.annual-salary-increase
- The annual salary increase an employer will receive if un- successful for both applying for a job and negotiating.salary-increase-negotiation
- The salary increase that an employer receives upon a successful negotiation for a raise.salary-increase-changing-jobs
- The salary increase that an employer receives upon successfully changing jobs.inflation
- The annual inflation applied at each time step.
THINGS TO NOTICE
Which group performs better? Stayers or Changers?
How fast does one group reach a plateau versus the other?
What are the numbers of employees with Tenure < 5 compared to those >= 5?
How do the numbers of successful negotiations compare with successful job changes?
THINGS TO TRY
Try reducing the salary increase from changing jobs to match the annual salary increase/salary increase from negotiation to see how that affects salaries.
Try reducing the number of employers/increasing the number of employees to see the effect on number of available jobs and how that relates to the salaries.
Play around with the inflation to see the effects of inflation on salaries.
Adjust values to match average values of other countries to see if they are consistent to South Africa.
EXTENDING THE MODEL
Introduce age to the employees and have willingness to change jobs be a function of their age. Older people tend to not want to move around too much!
Empower the employers more. Have different types of employers. Some that frown upon employees who move around too much. Some that want to hire more youth.
Introduce a job satisfaction property on the employees and track that as employees move around.
RELATED MODELS
- Wilensky, U. (2011). NetLogo Simple Economy model. http://ccl.northwestern.edu/netlogo/models/SimpleEconomy. Center for Connected Learning and Computer-Based Modeling, Northwestern Institute on Complex Systems, Northwestern University, Evanston, IL.
CREDITS AND REFERENCES
- Muzambi, T. (2024). Optimising Compensation model. https://modelingcommons.org/browse/onemodel/7408#modeltabsbrowseinfo
Comments and Questions
; Employee Compensation Optimisation Simulation ; Define global variables. globals [ successful-job-changes ; The number of successful job changes. successful-negotiations ; The number of successful negotiations. initial-salary ; The salary (ZAR) that all agents will initially start with. ] ; Define agents. breed [employers employer] breed [employees employee] ; Define agent attributes. employees-own [ salary ; Monthly salary in ZAR. my-employer ; Current employer. tenure ; Time spent with current employer. tendency ; Whether the employee tends to stay in the same job or change. tipping-point ; The point at which an employee who tends to stay will change. ] employers-own [ num-jobs-available ; Number of job openings currently available. workforce-needs ; Number of employees needed to fulfil company needs. capacity ; Total number of employees company can have. my-employees ; Agentset of employees. ] ; Set up routine. to setup clear-all ; Initialise global variables. set successful-job-changes 0 set successful-negotiations 0 set initial-salary random-normal 50000 25000 ; Create employers and position them in a grid in the top half. let employer-spacing (max-pxcor - min-pxcor) / (ceiling (sqrt num-employers) + 1) let employer-num 0 create-employers num-employers [ set shape "circle 2" set color yellow set capacity (random 96) + 5 set workforce-needs random capacity set num-jobs-available 0 set my-employees [] set size 1 ; Position the employer in a grid in the top half. let row floor (employer-num / ceiling (sqrt num-employers)) let col employer-num mod ceiling (sqrt num-employers) let x-pos (col * employer-spacing) + min-pxcor + (employer-spacing / 2) let y-pos max-pycor - (row * employer-spacing) - (employer-spacing / 2) + 2 setxy x-pos y-pos set employer-num employer-num + 1 ] ; Create employees and position them in a grid in the bottom half. create-employees num-employees [ set shape "person business" set color random color set salary 0 set tenure 0 set tendency one-of ["stay" "change"] set tipping-point random-float 0.15 + 0.15 ; Position the employee in the bottom half. let x-pos random-xcor let y-pos random min-pycor setxy x-pos y-pos ] reset-ticks end ; Go routine. to go ask employers [ eval-workforce-needs ] let application-outcome random-float 1.0 ; Simulate application process. ask employees [ if-else my-employer = 0 and application-outcome > 0.5 [ ; If unemployed, apply for job. seek-job ] [ if-else tendency = "stay" [ ; If employee tends to stay, only apply for job if salary increase is greater or equal to their tipping point. if-else application-outcome > 0.5 and salary-increase-changing-jobs >= tipping-point [ ; Application successful. seek-job ] [ negotiate ; Either appplication unsuccessful or salary increase is less than tipping point, so negotiate for raise. ] ] [ ; Else, employee tends to change so apply for job. if-else application-outcome > 0.5 [ ; Application successful. seek-job ] [ negotiate ; Application unsuccessful, so negotiate for raise. ] ] set salary max (list (salary * (1 - inflation)) 0) ; Apply inflation, up to a min salary of 0. ] ] tick end ;;;;;;;;;;;;;;;;;;;;;; EMPLOYER ROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;; to eval-workforce-needs if workforce-needs > length my-employees [ ; First check if workforce needs are not being met. if length my-employees < capacity [ ; If so, check that capacity hasn't been exceeded. set num-jobs-available workforce-needs - length my-employees ; Open a post. ] ] set size length my-employees / 4 ; Update size of company, scaled down by 4 for visual display. end ;;;;;;;;;;;;;;;;;;;;;; EMPLOYEE ROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;; to seek-job if-else any? employers with [num-jobs-available > 0] [ ; Check if there are jobs available. let new-employer one-of employers with [num-jobs-available > 0] ; Choose one employer with available jobs. let old-employer my-employer set my-employer new-employer ; Update my employer. ask new-employer [ ; Update new employer details. set num-jobs-available num-jobs-available - 1 set my-employees fput myself my-employees ] if old-employer != 0 [ ask old-employer [ ; Update old employer details. set num-jobs-available num-jobs-available + 1 set my-employees remove myself my-employees ] ] if-else salary = 0 [ ; If unemployed, set salary to initial salary. set salary initial-salary ] [ set salary min (list (salary * (1 + salary-increase-changing-jobs)) 1000000) ; Update salary, up to a max of 1 million. ] move-to new-employer ; Move to new employer and reset number of years at employer. set tenure 0 set successful-job-changes successful-job-changes + 1 ; Increment number of job changes. ] [ set salary min (list (salary * (1 + annual-salary-increase)) 1000000) ; If no jobs available, update salary with annual increase, up to a max of 1 million. set tenure tenure + 1 ; Increase number of years at employer. ] end to negotiate let negotiation-outcome random-float 1.0 ; Simulate negotiation process. if-else negotiation-outcome > 0.5 [ ; Negotiation successful. set salary min (list (salary * (1 + salary-increase-negotiation)) 10000000) ; Update salary, up to a max of 1 million. set successful-negotiations successful-negotiations + 1 ; Increment number of successful negotiations. ] [ ; Negotiation unsuccessful. set salary min (list (salary * (1 + annual-salary-increase)) 1000000) ; Update salary with annual increase, up to a max of 1 million. ] set tenure tenure + 1 ; Increase number of years at employer. end ;;;;;;;;;;;;;;;;;;;;;;;;; REPORTERS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; to-report sum-num-jobs-available report sum [num-jobs-available] of employers end to-report total-successful-job-changes report successful-job-changes end to-report total-successful-negotiations report successful-negotiations end to-report avg-salary-job-changers report mean [salary] of employees with [tendency = "change"] end to-report avg-salary-non-job-changers report mean [salary] of employees with [tendency = "stay"] end to-report total-job-changers report count employees with [tenure < 5] end to-report total-non-job-changers report count employees with [tenure >= 5] end
There are 2 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Optimising Compensation.png | preview | Preview for 'Optimising Compensation' | 7 months ago, by Tino Muzambi | Download |
This model does not have any ancestors.
This model does not have any descendants.