Beach Management Unit Kenya
Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)
WHAT IS IT?
This is a model of a "beach management unit" (BMU) in Kenya. The aim is to model the human population (fishers and farmers) and the natural environment (fish populations and coral reef health) and better understand the impacts they have on each other.
HOW IT WORKS
Environmentally, the fish population grows as long as the health of the coral reef remains over a certain amount. Periodically there are storms which take place.
Each morning the individuals decide whether to go fishing depending on storms and their own balance. When they have decided to go, the captains choose a crew and set off in a boat. The boat types symbolise gear types, so each has a target fish species. At the end of the session, the boats return to the BMU.
BMU fees are paid by each fisher depending on the size of the catch. The income from each catch is divided by the captain and the crew. A cost of living is deducted each day and the rest of the income becomes part of the fisher or captain's balance. If this balance falls under a certain amount, the agent migrates to "farmland" to pursue an alternative livelihood.
HOW TO USE IT
The interface tab includes inputs for the BMU-fees and the cost-of-living. By changing these, the impacts of the decisions can be easily seen in the model. There is also a slider for the storm frequency. The frequency of storms is linked to the idea of climate change, so is another important variable which can be experimented with. There is also a button so that the BMU can buy a new canoe and so improve its resources.
There are a number of graphical outputs from the model. This means that the financial situation of all the agents can be easily monitored. The graphs show the aggregate balance of each breed so that the overall changes in balance can be seen. There are also graphs of the changing fish population as fishing and spawning take place.
THINGS TO NOTICE
How quickly the fishers migrate each time the model is run.
How many fishers decide to fish despite the black flag warning.
THINGS TO TRY
Changing the BMU fees to see its effect on migration.
Changing the storm frequency to see its effect on the balance of the fishers and captains.
EXTENDING THE MODEL
As well as putting up a black flag for bad weather days, the BMU could do this if fish stocks were running low. It would then have to subsidise the fishers for that day of fishing. Possibly it could also subsidise for bad weather.
There could be a way for the fishers who have migrated to return to fishing, either if their balance increases, or if they find the other livelihoods too difficult and decide to return to fishing.
Inclusion of the idea of migrant fishers from abroad coming into the BMU fishing area and the possibility of conflicts arising from this.
NETLOGO FEATURES
(interesting or unusual features of NetLogo that the model uses, particularly in the Code tab; or where workarounds were needed for missing features)
RELATED MODELS
(models in the NetLogo Models Library and elsewhere which are of related interest)
CREDITS AND REFERENCES
(a reference to the model's URL on the web if it has one, as well as any other necessary credits, citations, and links)
Comments and Questions
globals [time season minutes hours day sea land coast shallow deep reef farmland abroad] breed [spinners spinner] ; clock in top right corner breed [fishers fisher] ; people breed [BMUs BMU] breed [captains captain] breed [farmers farmer] breed [canoes canoe] ; vessels breed [m-canoes m-canoe] breed [b-boats b-boat] breed [rabbitfishes rabbitfish] ; species of schools of fish breed [kingfishes kingfish] breed [tunas tuna] breed [basket-traps basket-trap] ;;rabbitfish ;;canoe breed [troll-lines troll-line] ;;kingfish ; m-canoe breed [ring-nets ring-net] ;;tuna ;; b-boat breed [storms storm] ; bad weather breed [black-flags black-flag] undirected-link-breed [boat-links boat-link] directed-link-breed [crew-links crew-link] canoes-own [c-status c-destination c-fish-catch] m-canoes-own [m-status m-destination m-fish-catch] b-boats-own [b-status b-destination b-fish-catch] patches-own [reef-health] ;general variable which affects whether the fish population can grow rabbitfishes-own [r-fish-stock] ; fish stock in each school kingfishes-own [k-fish-stock] tunas-own [t-fish-stock] BMUs-own [BMU-balance BMU-income] fishers-own [f-status f-balance f-income f-boat-type f-decision] captains-own [boat-type status cpt-income cpt-balance cpt-decision] to setup ct ;landscape setup ask patches [ if pcolor = black [set pcolor blue] if pcolor > 10 and pcolor < 16 [set pcolor 104] if pcolor >= 60 and pcolor < 66 [set pcolor 106] if pcolor != blue and pcolor != 104 and pcolor != 106 [set pcolor green] if pcolor = green and pycor > 30 [set pcolor 54] if pcolor = green and pycor < -30 [set pcolor 56] ] ask patches with [pcolor = 54 and not any? neighbors4 with [pcolor = 54] ] [set pcolor blue] ask patches with [pcolor = green or pcolor = 54 or pcolor = 56 and any? neighbors with [ pcolor = 106 ]] [ set pcolor yellow] ask patches with [ pcolor = 104 and any? neighbors with [ pcolor = blue ] ] [ set pcolor white] set sea patches with [pcolor = blue] set shallow patches with [pcolor = 106] set deep patches with [pcolor = 104] set land patches with [pcolor = green] set coast patches with [pcolor = yellow] set reef patches with [pcolor = white] set farmland patches with [pcolor = 54] set abroad patches with [pcolor = 56] ;clock create-spinners 1 [ set shape "clock" setxy (max-pxcor - 5) (max-pycor - 5) set color gray - 1.5 set size 10 set heading 0 ] set-default-shape farmers "person" ; create people create-farmers 10 [ move-to one-of farmland set size 2 set color black ] set-default-shape fishers "person" create-fishers 30 [ move-to one-of land set size 2 set color blue set f-balance 100 + random 500 ;; initial balance so they don't migrate immediately ] set-default-shape captains "person" create-captains 18 [ move-to one-of land set size 2 set color red set cpt-balance 500 + random 1000 ;;initial balance so that they don't migrate immediately ] ask n-of 14 captains with [boat-type = 0] [ ; ideally this will depend on income, but not sure how to keep the number of people and number of boats consistent set boat-type "canoe"] ask n-of 3 captains with [boat-type = 0] [ set boat-type "m-canoe"] ask n-of 1 captains with [boat-type = 0] [ set boat-type "b-boat"] create-canoes 14 [ ; create vessels move-to one-of coast set size 5 set shape "boat" ] create-m-canoes 3 [ move-to one-of coast set size 5 set shape "boat top" ] create-b-boats 1 [ move-to one-of coast set size 10 set color red set shape "boat" ] ask patch -7 14 [ sprout-BMUs 1 [ set size 5 set shape "house" set color red set BMU-balance 1000 ; initial balance ] ] let r count sea / 1000 ; create fish ask n-of r sea [ sprout-rabbitfishes 1 [ set size 2 + random 5 ; initial random size of fish stock *ought to be verified* set color [102 0 0 125] set shape "circle" set r-fish-stock size * 100 ] ] let k count sea / 1000 ask n-of k sea [ sprout-kingfishes 1 [ set size 2 + random 5 set color [94 0 0 90] set shape "circle" set k-fish-stock size * 100 ] ] let t count sea / 1000 ask n-of t sea [ sprout-tunas 1 [ set size 2 + random 5 set color [84 0 0 60] set shape "circle" set t-fish-stock size * 100 ] ] ask reef [set reef-health 100] ; arbitrary "reef health" as this affects whether fish population can grow reset-ticks end to go clock ;; to keep things moving with "real time" timings go-fishing decide-to-fish ; fisher's actions migrate spend damage-reef ; environmental actions move-fishes bad-weather ask rabbitfishes [ set label round r-fish-stock] ask kingfishes [ set label round k-fish-stock] ask tunas [ set label round t-fish-stock] tick end to decide-to-fish ;only go fishing in good weather unless income is below certain amount if hours = 1 [ ask captains [ if not any? storms [ set cpt-decision "yes"] if any? storms and cpt-balance < 500 [ ; *min balance required to choose to prioritise safety* set cpt-decision "yes"] ] ask fishers [ if not any? storms [ set f-decision "yes"] if any? storms and f-balance < 500 [ set f-decision "yes"] ] ] end to go-fishing ;; all the functions which control fishing - crew choice, going out to sea, paying BMU fees etc choose-crew ; captains and fishers board ; only captains leave-vessels ; only boats fish-vessels ; boats return-vessels ; boats pay-BMU-fees ; captains, fishers, BMU income ; captains fishers go-home ; captains, fishers, boats end to migrate ; if balance falls under minimum, they choose to migrate to farming if hours = 8[ ask captains [ if cpt-balance < 50 [ ; *min balance required to stay fishing* go-home move-to one-of farmland set breed farmers set color black ] ] ask fishers [ if f-balance < 50 [ go-home move-to one-of farmland set breed farmers set color black ] ] ] end to pay-BMU-fees ;paying BMU fees let cbmuf 0 ; the fees from the captain let fbmuf 0 ; fees from fisher if hours = 6 and minutes = 0 [ ; payment after a day of fishing ask captains [ set cbmuf cbmuf + (BMU-fees * (cpt-income / 200) ) ; fees are *input fees* times the number of fish caught or kg of fish caught (/200 as income is fish-catch *200) set cpt-income cpt-income - (BMU-fees * (cpt-income / 200) ) ; now taken away from income set cpt-balance cpt-balance + cpt-income ; balance set with new income set cpt-income 0 ; income is reset daily ] ask fishers [ set f-income f-income - (BMU-fees * (f-income / 200 ) ) set fbmuf fbmuf + (BMU-fees * (f-income / 200 ) ) set f-balance f-balance + f-income set f-income 0 ] ask BMUs [ set BMU-income cbmuf + fbmuf ; BMU income received from fees from fishers and captains set BMU-balance BMU-balance + BMU-income set BMU-income 0 ] ] end to choose-crew ; captains link with nearest X number of fishers depending on the type of boat they have ask captains [ if status = "choosing-crew" [ let willing-fishers fishers with [ f-decision = "yes"] if boat-type = "canoe" [ ifelse any? willing-fishers with [not any? my-in-links] [ create-crew-link-to one-of willing-fishers with [not any? my-in-links] [tie] set status "crew-chosen"] [ set status "no-crew" ] ] if boat-type = "m-canoe" [ ifelse count willing-fishers with [not any? my-in-links] > 2 [ create-crew-links-to n-of 3 willing-fishers with [not any? my-in-links][tie] set status "crew-chosen"] [ set status "no-crew" ] ] if boat-type = "b-boat" [ ifelse count willing-fishers with [not any? my-in-links] > 6 [ create-crew-links-to n-of 7 willing-fishers with [not any? my-in-links][tie] set status "crew-chosen"] [set status "no-crew"] ] ] ] ask fishers [ if any? my-in-links [ move-to first [other-end] of my-in-links set f-boat-type [boat-type] of one-of captains-here ] ] end to spend ;;daily cost of living is taken away from balance. same for captains and fishers. if hours = 7 and minutes = 0 [ ask fishers [ set f-balance f-balance - cost-of-living ] ask captains [ set cpt-balance cpt-balance - cost-of-living ] ] end to income ask captains with [status = "fishing"][ ;; income is fishcatch* 200 - 200 KSH earned for each kg of fish caught. *same amount for each type of fish* if boat-type = "canoe" [ set cpt-income ((([c-fish-catch] of min-one-of canoes [distance myself] ) * 200) * 0.75) ;; 75% of the income goes to the captain ] if boat-type = "m-canoe" [ set cpt-income ((([m-fish-catch] of min-one-of m-canoes [distance myself] ) * 200) * 0.67) ;; 67% of the income goes to the captain ] if boat-type = "b-boat" [ set cpt-income ((([b-fish-catch] of min-one-of b-boats [distance myself] ) * 200) * 0.51) ;; 51% of the income goes to the captain ] ] ask fishers with [f-status = "fishing"] [ if f-boat-type = "canoe" [ set f-income ((([c-fish-catch] of min-one-of canoes [distance myself] ) * 200) * 0.25) ;; 25% goes to the fisher ] if f-boat-type = "m-canoe" [ set f-income ((([m-fish-catch] of min-one-of m-canoes [distance myself] ) * 200) * 0.11) ;; 11% goes to each fisher ] if f-boat-type = "b-boat" [ set f-income ((([b-fish-catch] of min-one-of b-boats [distance myself] ) * 200) * 0.7) ;; 7% goes to each fisher ] ] end to board ; captains and fishers move to their boats ask captains with [boat-type = "canoe"] [ if status = "crew-chosen" [ move-to one-of canoes with [not any? my-links] create-boat-link-with min-one-of canoes [distance myself] [tie] set status "boat-chosen" ] ] ask captains with [boat-type = "m-canoe"] [ if status = "crew-chosen" [ move-to one-of m-canoes with [not any? my-links] create-boat-link-with min-one-of m-canoes [distance myself] [tie] set status "boat-chosen" ] ] ask captains with [boat-type = "b-boat"] [ if status = "crew-chosen" [ move-to one-of b-boats with [not any? my-links] create-boat-link-with min-one-of b-boats [distance myself] [tie] set status "boat-chosen" ] ] end to go-home ; kill the links and return to land ask captains [ if status = "release-crew" [ ask my-links [die] move-to one-of land ask fishers [ move-to one-of land ] ask canoes [ move-to one-of coast set c-fish-catch 0 ] ask m-canoes [ move-to one-of coast set m-fish-catch 0 ] ask b-boats [ set b-fish-catch 0 move-to one-of coast ] set status "home" ] ] end to deplete-fish ;; fish stocks and size of schools affected by fishing ask canoes [ avoid-coast if any? rabbitfishes in-radius (size / 2) with [ size > 2] [ ; fish caught when boats are on the school of fish, only is the school is over *certain size* let cfc ([r-fish-stock] of min-one-of rabbitfishes [distance myself] * 0.001);; here fc is temp fish catch so that the cumulative catch throughout the day is c-fish-catch, *0.1% of fish caught* set c-fish-catch c-fish-catch + cfc ask rabbitfishes in-radius (size / 2) with [ size > 2] [ set r-fish-stock (r-fish-stock - (r-fish-stock * 0.001)) set size r-fish-stock / 100 ] ] ] ask m-canoes [ avoid-coast if any? kingfishes in-radius (size / 2) with [ size > 2] [ let mfc ([k-fish-stock] of min-one-of kingfishes [distance myself] * 0.001) set m-fish-catch m-fish-catch + mfc ask kingfishes in-radius (size / 2) with [ size > 2] [ set k-fish-stock (k-fish-stock - (k-fish-stock * 0.001)) set size k-fish-stock / 100 ] ] ] ask b-boats [ avoid-coast if any? tunas in-radius (size / 2) with [ size > 2] [ let bfc ([t-fish-stock] of min-one-of tunas [distance myself] * 0.001) set b-fish-catch b-fish-catch + bfc ask tunas in-radius (size / 2) with [ size > 2] [ set t-fish-stock (t-fish-stock - (t-fish-stock * 0.001)) set size t-fish-stock / 100 ] ] ] end to fish-vessels ;moving around in the sea and hovering over schools of fish ask canoes [ if c-status = "fishing" [ right random 360 fd 2 if any? rabbitfishes in-radius size [ move-to min-one-of rabbitfishes [distance myself] ] avoid-coast avoid-vessels deplete-fish ] ] ask m-canoes [ if m-status = "fishing" [ right random 360 fd 3 if any? kingfishes in-radius size [ move-to min-one-of kingfishes [distance myself] ] avoid-coast avoid-vessels deplete-fish ] ] ask b-boats [ if b-status = "fishing" [ right random 360 fd 4 if any? tunas in-radius size [ move-to min-one-of rabbitfishes [distance myself] ] avoid-coast avoid-vessels deplete-fish ] ] end to leave-vessels ; set off from the coast ask canoes [ if c-status = "leaving" [ avoid-coast face one-of sea forward random 5 ] ] ask m-canoes [ if m-status = "leaving" [ avoid-coast face one-of sea forward random 5 ] ] ask b-boats [ if b-status = "leaving" [ avoid-coast face one-of sea forward random 5 ] ] end to return-vessels ; return at the end of the session to BMU ask canoes [ if c-status = "returning"[ face one-of BMUs forward 5 ] ] ask m-canoes [ if m-status = "returning"[ face one-of BMUs forward 5 ] ] ask b-boats [ if b-status = "returning"[ face one-of BMUs forward 5 ] ] end to avoid-vessels ; avoid other vessels, the radius depending on each type of boat ask canoes [ if any? (turtle-set canoes m-canoes b-boats) in-radius 5 [ if-else any? neighbors with [not any? (turtle-set canoes m-canoes b-boats)] [ move-to one-of neighbors with [not any? (turtle-set canoes m-canoes b-boats)] ] [ ] ] ] ask m-canoes [ if any? (turtle-set canoes m-canoes b-boats) in-radius 10 [ if-else any? neighbors with [not any? (turtle-set canoes m-canoes b-boats)] [ move-to one-of neighbors with [not any? (turtle-set canoes m-canoes b-boats)] ] [ ] ] ] ask b-boats [ if any? (turtle-set canoes m-canoes b-boats) in-radius 15 [ if-else any? neighbors with [not any? (turtle-set canoes m-canoes b-boats)] [ move-to one-of neighbors with [not any? (turtle-set canoes m-canoes b-boats)] ] [ ] ] ] end to avoid-coast ;; keeps fish and boats away from the land if [ pcolor ] of patch-here = 106 [ face min-one-of sea [distance myself] fd 0.1 ] end to change-in-size [ n ] ;;changes population of fish ask rabbitfishes [ if any? reef in-radius 1 and reef-health > 10 [ ;grows when near reef and reef-health over *certain amount* if size < 10 [ let change 1 + random 5 ; *equation of population size change* set size size + change ] ] ] ask kingfishes [ if any? reef in-radius 1 and reef-health > 10 [ if size < 10 [ let change 1 + random 5 set size size + change ] ] ] ask tunas [ if any? reef in-radius 1 and reef-health > 10 [ if size < 10 [ let change 1 + random 5 set size size + change ] ] ] end to move-fishes ; all move randomly in the same way ask rabbitfishes [ set heading heading + (20 - random 40) fd 0.1 avoid-coast change-in-size size ] ask kingfishes [ set heading heading + (20 - random 40) fd 0.1 avoid-coast change-in-size size ] ask tunas [ set heading heading + (20 - random 40) fd 0.1 avoid-coast change-in-size size ] end to damage-reef ;; reef damaged by boats which affects if fish stock can replenish ask reef [ if any? canoes in-radius 5 or any? m-canoes in-radius 5 or any? b-boats in-radius 5[ set reef-health reef-health - 0.5 ] ] end to bad-weather if ticks = storm-freq * random 10[ ;;every *storm-freq* a storm happens, for 10 storms.... ask one-of deep [ sprout-storms 1 [ set size 20 set shape "circle" set color [black 0 0 100] ] ask patch -8 15 [ sprout-black-flags 1 [ ; black flag goes up for dangerous fishing set size 10 set shape "flag" set color black ] ] ] ] ask storms [ ; move towards coast and grow set size size + 1 face min-one-of coast [distance myself] fd 10 if size > 200 [ ask black-flags [die] die ] ] end to timings ; used to set statuses depending on the time of day. the statuses are used to call the other functions ask captains [ if cpt-decision = "yes" [ if hours = 1 and minutes = 30 [ set status "choosing-crew" ] if hours > 2 and minutes > 10 and hours < 5 [ set status "fishing" ] if hours = 6 and minutes = 0[ set status "release-crew" ] ] ] ask fishers [ if f-decision = "yes" [ if hours > 2 and minutes > 10 and hours < 5 [ set f-status "fishing" ] ] ] ask canoes [ if any? captains-here [ if hours = 2 and minutes = 0 [ set c-status "leaving"] if hours > 2 and minutes > 10 and hours < 5 [ set c-status "fishing"] if hours = 5 or any? black-flags [ set c-status "returning"] if hours >= 6 [ set c-status "home"] ] ] ask m-canoes [ if any? captains-here [ if hours = 2 and minutes = 0 [ set m-status "leaving"] if hours > 2 and minutes > 10 and hours < 5 [ set m-status "fishing"] if hours = 5 or any? black-flags [ set m-status "returning"] if hours >= 6 [ set m-status "home"] ] ] ask b-boats [ if any? captains-here [ if hours = 2 and minutes = 0 [ set b-status "leaving"] if hours > 2 and minutes > 10 and hours < 5 [ set b-status "fishing"] if hours = 5 or any? black-flags [ set b-status "returning"] if hours >= 6 [ set b-status "home"] ] ] end to clock set minutes minutes + 1 if minutes = 60 [ set hours hours + 1 ] if minutes = 60 [ set minutes 0 ] if hours = 24 [ set day day + 1 ] if hours = 24 [ set hours 0 ] ask spinners [ set heading hours * 30 set label hours ] end
There are 6 versions of this model.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Beach Management Unit Kenya.png | preview | screenshot | over 12 years ago, by Richard Taylor | Download |
mombasa-coast.jpg | jpeg | Map | over 12 years ago, by Ankita Anirban | Download |
This model does not have any ancestors.
This model does not have any descendants.