Citizen Initiatives for Global Solidarity - Fulfillment of Needs

No preview image

1 collaborator

Default-person Erika Frydenlund (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by the author
Model was written in NetLogo 6.2.0 • Viewed 59 times • Downloaded 9 times • Run 0 times
Download the 'Citizen Initiatives for Global Solidarity - Fulfillment of Needs' modelDownload this modelEmbed this model

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


Comments and Questions

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

Click to Run Model

;; note in this version I flipped what's considered "risky" behavior
;; still no "tenacity" in the model -- this is the one thing from the original PPT I'm not sure what to do with.
;; based on ppt sent by Jose from Lesbos on 13Apr2019
;; CIGS seek out needs that are < expertise and < time-available
;; if there are no matching needs, they seek out additional funding
;; once the need is fulfilled, it goes away and CIGS find a new cause (having level-up expertise)
;; failure partially implemented
;; unemployed implemented
;; passive/aggressive development added based on slide 5
;; consolidated some code for setup procedures
;; added tracking of different need types: those with CIGS addressing them, those with no one addressing them.
;; inserted code to track CIGS status (dead or alive) by risk-profile/strategy per Jose's interest (26 Feb 2020)

globals [
  fulfilled-needs ;; counter for needs that went away
  failed-CIGS ;; counter for failed CIGS
  unfulfilled ;; agentset of needs with no CIGS
  in-progress ;; agentset of needs with CIGS attached

  ;; Jose's interest variables added
  CIGS-1-alive
  CIGS-1-dead
  CIGS-0-alive
  CIGS-0-dead
]

breed [ CIGS a-CIGS ]
breed [ funding a-funding ]
breed [ needs need ]

;; establishing up each agent attributes

CIGS-own [
  expertise ;; Random (0,100)
  time-available ;; Random (0, 365 days)
  tenacity;; Boolean (y/n)
  risk-profile;; – Boolean (aggressive/passive)
  unemployed;;  random (0-30)
  status ;; alive/dead
  possible-cause ;; agent-set for use later
  cause ;; the need being addressed currently
]

funding-own [
  funding-amount ;; Random (0-100)
  funding-regenerate ;; random [0, 1)
]

needs-own [
  need-size ;;Random (0-100)
  need-type ;; for later??
  time-required-to-complete;; random (0-365)
]

;; initilize variables and set up environment

to setup
  clear-all

  create-CIGS CIGS-Start [ make-CIGS ]
  create-funding funder-Start [ make-funders ]
  create-needs needs-Start [ make-needs ]

  ;; initialize globals
  set in-progress 0
  set unfulfilled 0
  set CIGS-1-alive 0
  set CIGS-1-dead 0
  set CIGS-0-alive 0
  set CIGS-0-dead 0

  reset-ticks
end 

to go
  ask CIGS [
    if cause = nobody [ find-a-cause ] ;; look for a cause if you don't already have one

    if cause != nobody [
      re-evaluate
      fulfill-need ;; each day work to fulfill need
    ]
    set time-available time-available - 1 ;; decrement 1 day per tick
  ]

  ask funding [
    ifelse funding-amount = 0
    [ die ]
    [ set funding-amount ( funding-amount * funding-regenerate + funding-amount ) ] ;; increment funding amount daily
                                                                                    ;; note: zero funding is not going to improve!
  ]

  ;; regeneration of needs
  create-needs random needs-replacement [ make-needs ]

  update-globals

  ;; regeneration of CIGS and funding
  if count needs with [count link-neighbors = 0] > 0 [
    create-funding random funder-replacement [ make-funders ] ;; unaddressed needs breed more CIGS
    create-CIGS random CIGS-replacement [ make-CIGS ] ;; addressed needs breed more funding -- MAYBE SOMETHING TO WORK OUT LATER
  ]

  if count CIGS = 0 or count needs = 0 [ stop ]

  tick
end 

to find-a-cause
  ifelse risk-profile = 1
  [
    set possible-cause needs with [ (time-required-to-complete < [time-available] of myself ) AND (need-size < [expertise] of myself) ]
  ]
  [
    set possible-cause needs with [ (time-required-to-complete < [time-available] of myself ) AND count link-neighbors > 0 ]
    ;; low risk profile joins fulfillment of a need without expertise if that need already has other CIGS involved
    ;; note this makes no determination of friend/foe CIGS
  ]
  ifelse count possible-cause > 0 [
    set cause one-of possible-cause
    move-to cause
    create-link-with cause
    jump 2 ;; so they don't overlap
  ]
  [
    set unemployed unemployed - 1 ;; CIGS can only exist as long as they are employed
    pursue-funding
    if unemployed = 0
    [ set failed-CIGS failed-CIGS + 1
      ifelse risk-profile = 0 [ set CIGS-1-dead CIGS-1-dead + 1 ] [ set CIGS-0-dead CIGS-0-dead + 1 ] ;; tallying dead by risk type
      die
    ]
  ]
end 

;; not sure if this works

to pursue-funding
  ifelse count funding with [funding-amount > 0] > 0
  [
    move-to one-of funding with [funding-amount > 0]
    let funder one-of funding-here
    let ask-for-money random 10 + 1
    set time-available ((1 / ask-for-money) * [funding-amount] of funder + time-available );; increase time available by fraction of money given
    ask funder [ set funding-amount ( funding-amount - (1 / ask-for-money) * funding-amount ) ] ;; deduct funding
  ]
  [

    ;; adding Jose's interest code here
    ifelse risk-profile = 0 [ set CIGS-1-dead CIGS-1-dead + 1 ] [ set CIGS-0-dead CIGS-0-dead + 1 ] ;; tallying dead by risk type
    die
    set failed-CIGS failed-CIGS + 1
  ]
end 

to fulfill-need ;; this is a weird way to do this by using the "cause" variable owned by CIGS
  ask cause [
    ifelse time-required-to-complete = 0
    [
      ask link-neighbors [ set expertise expertise + random 10 ] ;; each of contributing CIGS increases expertise
      set fulfilled-needs fulfilled-needs + 1 ;; increment global counter of fulfilled needs
      die
    ]
    [
      set time-required-to-complete time-required-to-complete - 1  ;; decrement by 1 day;
    ]
  ]
  ;; note that multiple CIGS working on the same cause will decrement more quickly even though the cause units is days (like man-hours then)
end 

to re-evaluate
    if (expertise > [ need-size ] of cause) AND (time-available < [time-required-to-complete] of cause)
    [ ifelse risk-profile = 1
      [ pursue-funding ]
      [
        die
        ifelse risk-profile = 0 [ set CIGS-1-dead CIGS-1-dead + 1 ] [ set CIGS-0-dead CIGS-0-dead + 1 ] ;;
        set failed-CIGS failed-CIGS + 1
      ]
    ]
end 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; setup agents by type ;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

to make-needs
  set shape "house"
  set color red

  set need-size random 100 + 1 ;; 0 < need-size <= 100
  set time-required-to-complete random 365 + 1 ;; 0 < time-required-to-complete <= 365

  setxy random-xcor random-ycor ;; distribute everyone randomly in the environment
end 

to make-funders
  set shape "star"
  set color yellow

  set funding-amount random 100 + 1 ;; 0 < funding-amount <= 100

  setxy random-xcor random-ycor ;; distribute everyone randomly in the environment
end 

to make-CIGS
  set shape "person"
  set color blue

  set expertise random-float 100 ;; note this will never reach 100 -> 0<= expertise < 100
  set time-available random 365 + 1 ;; 0 < time-available <= 365 to give at least 1 day to exist and is translated from funding
  set tenacity random 2 ;; can be either 0 or 1 -- establish 0 = no; 1 = yes
  set risk-profile random 2 ;; can be either 0 or 1 -- estabish 0 = passive; 1 = aggresive
  set unemployed random 30 + 1 ;; 0 < time-left-to-exist <= 30 to give at least 1 day without funding and without a need
  set status 1 ;; initially set to "alive"
  set cause nobody ;; no one to start

  setxy random-xcor random-ycor ;; distribute everyone randomly in the environment
end 

to update-globals
  set unfulfilled needs with [ count link-neighbors = 0 ] ;; no links means no one's working on that need
  set in-progress needs with [ count link-neighbors > 0 ] ;; links mean CIGS are working on them.

  set CIGS-0-alive count CIGS with [ risk-profile = 1] ;; tallying CIGS by risk profile/strategy per Jose's interest
  set CIGS-1-alive count CIGS with [ risk-profile = 0]
end 

There is only one version of this model, created over 2 years ago by Erika Frydenlund.

Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.