# Optimising Compensation

### 1 collaborator

Tino Muzambi (Author)

### Tags

social science

Tagged by Tino Muzambi 2 months ago

wealth distribution

Tagged by Tino Muzambi 2 months ago

Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.4.0 • Viewed 46 times • Downloaded 3 times • Run 0 times

## 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.

## CREDITS AND REFERENCES

Click to Run Model

```; 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 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

eval-workforce-needs
]

let application-outcome random-float 1.0              ; Simulate application process.
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.