Optimising Compensation

Optimising Compensation preview image

1 collaborator

Tino_muzambi Tino Muzambi (Author)


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
Download the 'Optimising Compensation' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


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.


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.


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


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?


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.


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.



Comments and Questions

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

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

  ; 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


; Go routine.

to go

  ask employers [

  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.
    ] [
      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.
        ] [
          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.
          ] [
            negotiate                                   ; Application unsuccessful, so negotiate for raise.
      set salary max (list (salary * (1 - inflation)) 0)                                        ; Apply inflation, up to a min salary of 0.


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

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

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.

;;;;;;;;;;;;;;;;;;;;;;;;; REPORTERS ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to-report sum-num-jobs-available
  report sum [num-jobs-available] of employers

to-report total-successful-job-changes
  report successful-job-changes

to-report total-successful-negotiations
  report successful-negotiations

to-report avg-salary-job-changers
  report mean [salary] of employees with [tendency = "change"]

to-report avg-salary-non-job-changers
  report mean [salary] of employees with [tendency = "stay"]

to-report total-job-changers
  report count employees with [tenure < 5]

to-report total-non-job-changers
  report count employees with [tenure >= 5]

There are 2 versions of this model.

Uploaded by When Description Download
Tino Muzambi 2 months ago Updates Info tab and resets to default values. Download this version
Tino Muzambi 2 months ago Initial upload Download this version

Attached files

File Type Description Last updated
Optimising Compensation.png preview Preview for 'Optimising Compensation' 2 months ago, by Tino Muzambi Download

This model does not have any ancestors.

This model does not have any descendants.