COBAM-3
Model was written in NetLogo 5.0.4
•
Viewed 479 times
•
Downloaded 30 times
•
Run 0 times
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
;; 21st April ;; cobam model for Cameroon TNS ;; TODO ;; 1. health status attributes for forest (patch variable) land fertility, forest cover ;; 2. health status attributes for subsistence plots - fertility only ;; update rules for health status : ;; how does the NTFP depletion work? ;; 3. Actors sometimes turn black/get black cloud above them when entering forest and they start to cause damage ;; 4. annual farming strategy: expand (if labour, if low productivity etc- using KnETs rule) - ;; -- this (partial) clearing may involve a change in forest cover (depending on specific cashcrop) ;; -- with cocoa expansion in first years they grow other crop (what?) - can be illustrated as plain area ;; 5. annual subsistence farming strategy - (part of?) the strategy is to decide how much fallow/ level of intensification ;; -- Knets suggest reduced rotation (meaning intensification of production/less fallow time) ;; 6 . monthly decision-making step - (based on KnETs rule ?) ;; -- first priority is Men and women do farming ;; -- when they have time available they do NTFPs collection - based on preferences - high val and low val NTFPS ;; -- includes poor and rich, male and female farmers/collectors ;; add other transition rules : ;; 7. cocoa survives how long - possible transition to agricultural /subsistence field or abandonment if infertile? ;; -- recovery of fertility and tree cover. old fallows revert to secondary forest after an (estimated) number of seasons ;; -- or use tree recruitment and dispersal model ;; 8. agricultural land becomes infertile - depending on specific practices. use of fallows vs. intensification vs. training ;; 9. monitor the health of forest (land fertility, forest cover) and the health of farmland (land fertility), as well as collection of NTFPS ;; -- this will allow illustrate NTFPs getting further away and reducing CPU effort of NTFP collection ;; 10 add the other NTFPS - collection in recueilleNTFPs ;; -- Add NTFPs according to the latest calendar we got. ;; -- improve rules for collection of NTFPs - their animation ;; -- fix problem of traders getting stuck at edge of screen because prevented from stopping at fdest ;; ;; introduce health/forest cover status attribute for each forest patch (part of farm) based on productive use - ie different types of farms (coffee?/cocoa/cassava/palm) ;; CLIMATE AND POLICY SCENARIOS ;; create climate scenarios ;; create policy scenario - training - and the new behaviour this enables e.g. reduced rotation and sustainable land fertility ;; NTFPs are 'wild' ie. only the gathering that needs to be considered - but some say they would consider cultivation if gathering failed ;; AREAS OF UNCERTAINTY (for modelling) - many areas not informed by knets or other fieldwork ;; how crops and activities respond to weather (among other factors) from one period to the next and over several years ;; OTHER IDEAS ;; community forest CF (5000 ha) ;; Note: a household would not control a whole ha unless very rich ;; Further - include GIS file showing boundaries of the CF, location of villages, markets, roads, rivers, forests etc ;; add multiple villages along the road. We may want to allocate forest areas to villages rather than to clans if clans are not as relevant for forest land access rights. ;; create groups - farmer associations. done using traders and allocate hh to a group. ;; household structure and labour availability (for fixed hh sizes) ;; Notes ;; I have added two further NTFPs (others can easily be added but I will be keeping it simple for the moment) ;; I have given them a seasonal cycle. This controls how quickly the NTFPs appear at different times of year. ;; For the seasonal ones I am assuming that they disappear when they get out of season, but Koko and mempa don't disappear ;; I have restricted it so that only one type of resource can appear at each location. ;; For this resource I have also quantified the amount of resource at each location. ;; However tt may keep on growing infinitely until someone comes and harvests it... ;; NTFP harvesters will usually collect several NTFP types during one trip. Some (men) may concentrate on high-value NTFP types not collecting others - depending on preferences ;; Sometimes it is not the season of a certain NTFP but may be available anyway. ;; Monica: ;; 20.1 I think we should add more than 2 NTFPs. Koko and Mempa are usually available all year throughout ;; but the others such as mangue sauvage, Assa'a, Dogote, Talala, Mtondo, Djansang and Djembe differ in seasonality over a year. ;; 20.3 what are your thoughts behind the seggregation of groups? ;; I thought it might be important for access to resources. if we don't have information on it we can leave it out ;; 20.3 it is important to distinguish the Baka (in terms of interactions with the communities during times of crisis, for example), also the CAR people who come to buy products ;; 20.4 if the model could capture and seggregate men and women actions/roles, ;; - yes also seggergate rich and poor strategies ;; 20.5 village gardens, meaning the fields in the fallow land (jachere), but it can be quite far away from the village as well. ;; 20.6 include the subsistence farming plots in the jachere as well ;; 20.7 a way to kind of show in the model that when we have the cacao season, men are going to town (money is spent on leisure/lost) ;; m1 Expansion of fallow agriculture land for subsistence is usually considered under tougher conditions (combinations of unfavorable drivers) ;; sb1 the indicators of interest could be related to income and carbon saving ;; sb2 show detail such as gender aspects as well as more large scale dynamics with several villages ;; sb3 NTFPS getting farther away than previously, planting nearby if poss ;; sb4 create groups for collection and sale of NTFP (here there is value in modelling different NTFP collected by better-off versus poor women, who seemed to focus on ;; more high-value NTFPs such as Assa and Dogote - don’t know if there is enough empirical evidence for this but seemed to come out of the game results) ;; sb5 training on agricultural practises - reduced rotation (meaning intensification of production/less fallow time) composting, use of demo plots and set up of tree nurseries). ;; sb6 extensification and land expansion trend ;; sb7 adaptive strategies driven by lack of land (esp. poorer hh lack access) and quantity of harvest ;; sb8 crop choices that vary in the degree to which they provide co-benefits. eg. crops that require forest cover or little or no clearing of trees are good from a mitigation perspective. ;; This means that cocoa, which requires shade to grow well, will encourage forest cover to be preserved. However, cassava and palm oil require more sunlight and forest to be cleared . ;; sb9 drivers triggering serious cascade effects for forest conservation ;; sb10 mining (employment for better off HH) where agriculture is not possible or ag. constraints such as inappropriate weather conditions, lack of labor, lack of tools and lack of access to markets. ;; sb11 elites opportunistic interaction with villagers ;; sb12 Hunting is also more prominent among the poor households than the better-off, as the latter would buy their meat from the poorer households. ;; cultivation of crops near the water sources (e.g. rivers), ;; there is value in modelling different NTFP collected by better-off versus poor women, who seemed to focus on more high-value NTFPs such as Assa and Dogote ;;let x neighbors with [any? turtles-here with [ member? breed (list as bs ) ]] extensions [gis] breed [households household] breed [people person] breed [farms farm] breed [trees tree] breed [roads road] breed [GICs GIC] breed [mangues mangue] breed [kokos koko] breed [mempas mempa] breed [assas assa] ;;breed [NTFPs NTFP] breed [traders trader] breed [rivernodes rivernode] breed [roadnodes roadnode] breed [villages village] breed [spinners spinner] ;; clock face which shows the month breed [primarys primary] ;; forest areas are represented as agents somewhat artificially here breed [secondarys secondary] breed [boundarys boundary] breed [gardens garden] ;; garden is a collection of fallow and productive jachere patches - a plot used for subsistence farming ;; mixed/subsistence crop ; meaning the fields in the jachere, also along river breed [river-labels river-label] breed [village-labels village-label] undirected-link-breed [riverlinks riverlink] undirected-link-breed [roadlinks roadlink] undirected-link-breed [tradelinks tradelink] patches-own [ partof ;; part of forest or jachere - macro area partfarm ;; part of gardens or plantation - productive farm unit in the forest or jachere quantity ;; quantity of NTFP resource here - can only have one type ] farms-own [ size-xy area farmer ;; who controls access - management entity or hh head ;; health harvest landuse ;; landuse is current use total-cost ;; farm accounting variables farm-income farm-profit annual-profit ] primarys-own [ forestset ;; patchset size-xy clan state ;;adult-count juvenile-count ;; includes fishy variables here ;;shoal-size ;; there is only one shoal ] secondarys-own [ forestset ;; patch set size-xy clan state ] gardens-own [ size-xy gardener gardenset ] households-own [ hhtype head members clan ;; hhtype relates to the structure; clan is the ethnicity of origin association ;; which farming group hhgarden ;; garden is an agent and collection of patches (gardenset) wealth ;; true and false - better off and poor households labour ;; labour is a boolean - whether or not additional labour is available - important driver of expansion income profit ;; variables for the current tick. assume that profit (or loss) accrues to savings of the hh head hh-annual-profit nutrition ;; nutrition is a number between 0 and 4 signifying availability of different foods to household. food-cost annual-food-cost ] people-own [ clan hh status ;; status is the present activity; strategy ;; strategy eg. on of NTFPtypes pdest fdest ;; destination the village or patch of forestset mcol kcol mpcol acol ;; count of each NTFP collected this season gender-male ;; male (true) or female (false) ] villages-own [salinity health] ;; health depends only on salinity: see health-homestead reporter traders-own [ croptype ;; each trader is only interested in one croptype at any moment demand destination ;; forest that the agent is currently headed for ] globals [ ;; the following are fixed, user-defined global variables chosen or input by the user ;;number-people ;; overall number of people, set before they are assigned into networks, occupations, households etc number-households ;; hh vary in terms of structure and assets (may be landless) ClanHHCensus ;; a list of number of hh of each clan ClanList tries-paddys ;; a maximum number. number-paddys is also constrained by min-distance farmsize-min farmsize-max ;; minimum and maximum (acres) forestsize-min forestsize-max min-distance ;; min distance between any two agents max-distance ;; maximum for there to be a connection (not used?) riverbank-distance ;; min distance from a farm node to river nodes - to improve display min-distance-forest ;; min distance between two forest areas.(Also of forest to village - forest lies outside of jachere?) min-distance-gardens ticks-per-month ;; allow for time-level below the month walk-speed ;; non-fixed variables number-paddys ;; count of number the-month ;; string variable in bengali month-id ;; integer from 0 to 11 incl. the-period ;; integer - time level below month year-id ;; integer initial value of 0 ;;climate ;; string variable can take value monsoon or dry price-cacao ;; price for sale to exporter price-rice ;; market price price-fish ;; market price sprout-set ;; current set of patches generating NTFPS grow-set ;; patches where further NTFPS growing NTFPS ;; amount appearing each month of various forest products calendar ;; string definition for the calendar being used i.e. munshigonj croptypes NTFPtypes ;; agentsets ;;headset ;; turtleset of all household heads, set in set-livelihoods workforce ;; all individuals not allocated to jobs yet all-locations ;; farms, mangrove, village livelihoods ;; occupations that are done over the course of one or more months chance-labour ;; at start of year, there is a chance any hh accumulates additional labour (eg . 5% random) ;; other features of the terrain hyp ;; track length primary-forest ;; patch set secondary-forest jachere ;; all jachere has an owner/manager while it is part of a rotation or plantation ;; eg. at most 2km from road, 3km from village jachere-rd jachere-vill gardensize-min gardensize-max ;; minimum and maximum (acres) ;; GIS globals villages-dataset rivers-dataset ;; village law buffer-distance ;; buffer zone around village where shrimp ponds are not allowed to be established ] ;; need an expert to write/check these to write-climate-scenarios ;; open a connection to a further file end to setup clear-all ;; resets all global variables to zero, and calls reset-ticks, clear-turtles, clear-patches, clear-drawing, clear-all-plots, and clear-output. ;;set calendar "munshigonj" set ticks-per-month 8 ;; assume a number of ticks per month - this allows an animation of the activities, recueilleNTFPs etc ;; timelevel below the month set the-period 0 set month-id 0 ;; parameters needed before agent creation ;; world-width and world-height set in view (default is -16 to +16) set min-distance 5 ;; distances between two farms set max-distance 10 set tries-paddys 40 set riverbank-distance 1.2 set min-distance-forest 12 ;; distance between two forest units set min-distance-gardens 2 ;;??? set walk-speed 2 ;; these parameters would be set depending on the location and calendar ;; TODO put in setup munshigonj method set farmsize-min 1 set farmsize-max 5 set forestsize-min 12 set forestsize-max 20 set gardensize-min 2 set gardensize-max 3 set number-households 34 ;; this should equal the number used in the create-structured-households method set chance-labour 5 set NTFPS [] set NTFPtypes (list mangues kokos mempas assas) ;; list of breeds therefore use plural ;; mangues kokos mempas assas dogote, Talala, Mtondo, Djansang and Djembe ;; digits indicate the months when it can appear (and the percentage chance) ;; set NTFPS lput [0 0 0 0 0 3 3 3 0 0 0 0] NTFPS ;; mangues - data from table 9 set NTFPS lput [0 0 0 0 0 0 0 3 3 0 0 0] NTFPS ;; mangues - aug - sep Monica ;; Koko and Mempa are usually available all year throughout set NTFPS lput [3 3 3 3 3 3 3 3 3 3 3 3] NTFPS ;; kokos - data from table 9 set NTFPS lput [2 2 2 2 2 2 2 2 2 2 2 2] NTFPS ;; "mempas" ;; others such as mangue sauvage, Assa'a, Dogote, Talala, Mtondo, Djansang and Djembe differ in seasonality over a year set NTFPS lput [1 1 1 2 2 2 2 2 1 1 1 1] NTFPS ;; "assas" - assas all year - monica ;; include further NTFPS will make the model more complex ;set NTFPS lput [0 0 1 2 2 2 2 2 1 1 1 0] NTFPS ;; "dogotes" no information ;set NTFPS lput ["talalas" 1 1 1 2 0 0 0 1 1 1 1 1] NTFPS ;; jan-apr, aug -dec ;set NTFPS lput ["mtondos" 1 1 1 1 0 1 1 1 1 1 1 1] NTFPS ;; jan-apr jun-dec ;set NTFPS lput ["djansangs" 1 0 0 0 0 1 1 1 1 1 1 1] NTFPS ;; jan and june-dec ;set NTFPS lput ["djembes" 0 0 0 0 0 0 0 2 2 0 0 0] NTFPS ;; August – September Monica (Mang) print (word "NTFPtypes are: " NTFPtypes) set sprout-set no-patches set grow-set no-patches ;; define cash crops. TODO there could be subtypes/varieties with different names and characteristics set croptypes [] set croptypes lput ["coffee"] croptypes ;; only characteristic so far is the name set croptypes lput ["cocoa"] croptypes ;; create the village in the centre of the window create-villages 1 [ set xcor 0 set ycor 0 set shape "house" set color brown ] ask patches [set pcolor grey] ;; settlement and road ;; add river through village position-river ;; If using GIS information will need to change size of grid ;; setup-gis ;; households and social infrastructure ;; generate a set of points for locating households (10 by 10 grid around origin) with separation of 0.1 let points [] let vals n-values 10 [?] foreach vals [ let x ((? - 5) / 10) foreach vals [ let y ((? - 5) / 10) set points lput list x y points ] ] let HHID 0 let ClanID 0 ;; TODO these are broad ethnicities rather than clans - should be about 12 set ClanList ["Mpiemo" "Baka" "Muslim" "CAF"] ;; order of appearance ;; define what fraction of HH are from each clan ;; define approx. what fraction of owned land belongs to each clan set ClanHHCensus [12 10 8 4] ;; number of HH of each clan let ClanForestAreas [7 4 3 2] ;; number of areas for each clan print (word "Starting model with " length ClanList " Clans, " sum ClanHHCensus " households, ..") create-households sum ClanHHCensus [ ;; first hh are ones with 100% access set clan item ClanID ClanList let close [] ;; select a location with distance of nearest turtle < 0.15 ;; do not allow multiple hh occupying the same spot ie distance > 0 .05 foreach points [ let px item 0 ? let py item 1 ? let nn min-one-of other (turtle-set villages households) [distancexy item 0 ? item 1 ?] ask nn [if distancexy px py < 0.15 and distancexy px py > 0.05 [set close lput list px py close] ] ] let point one-of close setxy item 0 point item 1 point ;; increase the HHID index by one unit and set the ClanID for next HH set HHID HHID + 1 if HHID >= item 0 ClanHHCensus [set ClanID 1] if HHID >= item 0 ClanHHCensus + item 1 ClanHHCensus [set ClanID 2] if HHID >= item 0 ClanHHCensus + item 1 ClanHHCensus + item 2 ClanHHCensus [set ClanID 3] ;; other HH attributes set labour false set wealth HHID mod 2 = 0 ;; true and false signify the better off and poorer households ] ;; ask households [show (word "HH-" who " has labour:" labour ", has wealth:" wealth)] foreach sort households [ create-people 1 [ set clan [clan] of ? set hh ? setxy [xcor] of ? [ycor] of ? ;set pdest "village-0" set pdest one-of villages ;; no-patches ? set fdest no-turtles ;hide-turtle set gender-male member? ([who] of ? mod 6) [0 1 2] ] ] ;;ask people [ ;; show (word "Person-" who " is male :" gender-male) ;; ask [hh] of self [show (word "HH-" who " has labour:" labour ", has wealth:" wealth)] ;;] ;; create landscape ;; create jachere close to village, road, river etc. set jachere patches with [min [distance myself] of rivernodes < 7.5 and distance village 0 < 10 and partof = 0] ask jachere [ set pcolor 4 ;; set partof ;; jachere is not an agent ] show (word "Jachere area of " count jachere " ha.") ;;show count households ;; TODO create some coffee plantations in jachere also ? ;; TODO farm creation should be dynamic and agricultural groups construction set-default-shape trees "tree" set-default-shape farms "plant" ;; village land residence and garden set-default-shape boundarys "line" ;; forest product shapes set-default-shape mangues "x" set-default-shape kokos "triangle" set-default-shape mempas "star" set-default-shape assas "dot" ;; create forest areas - choose a location away from any other forest area create-primarys 8 [ set size-xy (list (forestsize-min + random-float (forestsize-max - forestsize-min)) (forestsize-min + random-float (forestsize-max - forestsize-min))) position-forest-area set forestset patches with [abs (pxcor - [xcor] of myself) < ( item 0 [size-xy] of myself / 2 ) and abs (pycor - [ycor] of myself) < ( item 0 [size-xy] of myself / 2 )] set forestset forestset with [partof = 0 and member? self jachere = false] ;; make sure patches in forest set lie outside of jachere ask forestset [set pcolor 2 set partof myself] hide-turtle ;;set label "PRIMARY" ] create-secondarys 8 [ set size-xy (list (forestsize-min + random-float (forestsize-max - forestsize-min)) (forestsize-min + random-float (forestsize-max - forestsize-min))) position-forest-area set forestset patches with [abs (pxcor - [xcor] of myself) < ( item 0 [size-xy] of myself / 2 ) and abs (pycor - [ycor] of myself) < ( item 0 [size-xy] of myself / 2 )] set forestset forestset with [partof = 0 and member? self jachere = false] ;; make sure patches in forest set lie outside of jachere ;; let fp patches with [abs (pxcor - [xcor] of myself) < (forest-size / 2 ) and abs (pycor - [ycor] of myself) < (forest-size / 2 )] ask forestset [set pcolor 12 set partof myself] hide-turtle ;;set label "SECONDARY" ] ;; set forestset after all forests have been created (each patch can only be in one set) ask (turtle-set primarys secondarys) [ set forestset patches with [partof = myself] let thisforest self let mycolorid 0 ifelse breed = primarys [set mycolorid one-of (list 33 34 35)] [set mycolorid one-of (list 53 54 55)] ask forestset [set pcolor mycolorid] ;; ask patches on edges of forest area to recolour ask forestset [if count neighbors with [partof = thisforest] < 8 [set pcolor 36] ] ;; TODO add lines to demark the patch sets ? ;;create-boundaries ] show (word "Creating " count (turtle-set primarys secondarys) " forest areas, controlled by 4 clans") ;; other logging concessionary areas are outside of model ;; distribution of patches into forest let sforests reverse sort-on [count patches with [partof = myself]] (turtle-set secondarys primarys) ;; foreach sforests [show count patches with [partof = ?]] set ClanID 0 let forestID 0 ;; allocate forests to clans ask (turtle-set primarys secondarys) [ set clan item ClanID ClanList set forestID forestID + 1 ;; TODO use case when more than 4 clans if forestID >= item 0 ClanForestAreas [set ClanID 1] if forestID >= item 0 ClanForestAreas + item 1 ClanForestAreas [set ClanID 2] if forestID >= item 0 ClanForestAreas + item 1 ClanForestAreas + item 2 ClanForestAreas [set ClanID 3] ] ;;ask (turtle-set primarys secondarys) [ show clan] create-spinner ;; set display properties set-default-shape households "house" ask households [set size 1] ask households [set color brown] ;; other setup set-default-shape traders "person" set-default-shape people "person" reset-ticks end ;; this should be used for reading the gis shapefiles to setup-gis ;; coordinate system let projection "rivers" gis:load-coordinate-system (word "data/" projection ".prj") ;;; load GIS datasets set villages-dataset gis:load-dataset "data/villagers_and_towns.shp" set rivers-dataset gis:load-dataset "data/rivers.shp" ;; set the world envelope to the union of all our dataset's envelopes gis:set-world-envelope (gis:envelope-union-of (gis:envelope-of villages-dataset) (gis:envelope-of rivers-dataset)) ;; TODO try a transformation between GIS and netlogo coordinates ;;show gis:envelope-of villages-dataset ;;observer: [1158854.3745999997 1219490.25 370405.9997000005 402526.56350000016] gis:set-transformation (list 1175000 1200000 376000 380000) (list min-pxcor max-pxcor min-pycor max-pycor) ;; gis:set-transformation (list 15.28 15.29 3.28 3.29) (list min-pxcor max-pxcor min-pycor max-pycor) end to initial-gardens ;; create gardens close to village, inside jachere ;; garden is a collection of fallow and productive jachere patches - if it stays fallow for too long it will become old fallows ;; householder prefers nearby gardens create-gardens number-households [ set size-xy (list (gardensize-min + random-float (gardensize-max - gardensize-min)) (gardensize-min + random-float (gardensize-max - gardensize-min))) position-garden-area set gardenset patches with [abs (pxcor - [xcor] of myself) < ( item 0 [size-xy] of myself / 2 ) and abs (pycor - [ycor] of myself) < ( item 0 [size-xy] of myself / 2 )] set gardenset gardenset with [partof = 0 and partfarm = 0 and member? self jachere = true] ;; patch must be in jachere but not in forest or already part of garden let mycolorid one-of (list 23 24 25) ask gardenset [set pcolor mycolorid set partfarm myself] hide-turtle ;; set label "GARDENS" ] ;; hhgarden is an attribute of household, it is equal to the garden agent let gs sort gardens let index 0 foreach sort households [ ask ? [set hhgarden item index gs] set index index + 1 ] end ;; reposition people who were already created in setup to initialize-people ;; send men to the gardens ask people with [gender-male] [move-to one-of [gardenset] of [hhgarden] of hh] ;;ask people with [not gender-male] [move-to one-of [gardenset] of [hhgarden] of hh] end ;; mangues kokos mempas assas dogote, Talala, Mtondo, Djansang and Djembe to recueilleNTFPs let nearset patches in-radius walk-speed let nearturtles turtles-on nearset let nearNTFPs nearturtles with [member? breed NTFPtypes ] ;; line below also seems to work now that NTFPtypes list is created correctly (i.e not using strings) ;; set nearNTFPs turtle-set filter [member? [breed] of ? NTFPtypes] sort nearturtles let collected no-turtles if any? nearNTFPs [ let nnt min (list 3 (count nearNTFPs)) set collected n-of nnt nearNTFPs ] foreach sort collected [ let quant [quantity] of patch-here if [breed] of ? = mangues [ set mcol mcol + quant] if [breed] of ? = kokos [ set kcol kcol + quant] if [breed] of ? = mempas [ set mpcol mpcol + quant] if [breed] of ? = assas [ set acol acol + quant] ;if is-dogote? ? ;if is-talala? ? ;if is-mtondo? ? ;if is-djanssang ? ;if is-djembe? ? ;; clear patch quantities at locations of collected ask patch-here [set quantity 0] ] ask collected [die] end ;; high val and low val NTFPS ;; mangues kokos mempas assas dogote, Talala, Mtondo, Djansang and Djembe to-report NTFP-high-value [name] show name if is-mangue? name [report false] ;; all year round but fluctuates from year to year, aug and sept - LV see monica's NTFPs table if is-koko? name [report false] ;; all year round - LV see monica's NTFPs table if is-mempa? name [report false] ;; LV? if is-assa? name [report false] ;; LV? all year round ;if is-dogote? name [report true] ;; HV sylvie ;if is-talala? name [report false] ;; LV no market ;if is-mtondo? name [report false] ;; LV sylvie ;if is-djanssang name [report true] ;; all year round - now just aug and sept - HV see monica's NTFPs table ;if is-djembe? name [report true] ;; aug and sept - HV see monica's NTFPs table end ;; drawing polyline data from shapefile to display-rivers gis:draw rivers-dataset 1 ;; loading data into turtles foreach gis:feature-list-of rivers-dataset [ let centroid gis:location-of gis:centroid-of ? if not empty? centroid [ create-river-labels 1 [ set xcor item 0 centroid set ycor item 1 centroid set size 0 ;;set label gis:property-value ? "OBJECTID" ] ] ] end ;; drawing polyline data from shapefile to display-villages gis:draw villages-dataset 1 ;; loading data into turtles foreach gis:feature-list-of villages-dataset [ let centroid gis:location-of gis:centroid-of ? if not empty? centroid [ create-village-labels 1 [ set xcor item 0 centroid set ycor item 1 centroid set size 0 set label gis:property-value ? "ANNOTXT" ] ] ] end ;; nice animation of village activities to ramble ;; short random walk set heading random 360 fd 0.5 ;; sleeping etc end to go reset-tick ifelse (the-period = ticks-per-month) [set the-period 1 ] ;; new month has started [set the-period the-period + 1] if the-period = 1 [ reset-month set-month ;; set the month (string and id) ] if the-period = 1 [NTFP-growth] ;; simulation events at start of annual step if month-id = 0 and the-period = 1 [ ask traders [update-demands] ;; traders update their demands ask households [update-labour] ;; some likelihood that labour boolean may be flipped from false to true ask households [set-gardening-strategy] ;; female agents ? subsistence and small local sales ask households [set-farming-strategy] ;; male agents ? cocoa and coffee, GIC opportunities, expansion opportunities ask households [set-collecting-strategy] ;; after gardening, collecting, farming land productivity may go down ] let availabletypes filter [any? turtles with [breed = ?]] NTFPtypes ;; print (word "available NTFPs are: " availabletypes) ;; update agent strategy (from knets rules) ;; differently for poor/rich and men/women ;; "best" strategy given expected return foreach sort people [ ;; TODO selection of NTFP would be based on distance to travel to collect and therefore amount harvested per unit effort ;; question. do they concentrate on one NTFP type or will collect several during one trip? ;; other strategies / activities farming cocoa/coffee ;;set strategy one-of availabletypes ;;ifelse any? (turtle-set mangues kokos) [ let thisp ? let pclan [clan] of ? ;; if person is at village when NTFPS present - setting off for forest ifelse [pdest] of ? = village 0 [ ;;print "set off" let fordest one-of (turtle-set primarys secondarys) with [clan = pclan] ask thisp [ set fdest fordest set status "collecting" set pdest one-of [forestset] of fdest set heading towards pdest ] ;; or choose other activity (farming etc.) ] ;; otherwise continue forward (at walkspeed) [ ;; if I am at my destination, collect any NTFPs within walking distance, and change destination to another within forest set ;; TODO if I am at my forest destination collect any. only change patch destination when I reach near there ask ? [ ifelse member? pdest patches in-radius walk-speed [ ;; collect and account for NTFPs recueilleNTFPs set pdest one-of [forestset] of fdest set heading towards pdest ] ;; otherwise, continue walking towards destination [ fd walk-speed ] ] ] ] ;;] ; [ ; foreach sort people [ ; ask ? [ ; set status "waiting" ; set pdest village 0 ; set heading towards pdest ; ;; either ramble around at destination or stay at destination ; ifelse member? pdest turtles-on patches in-radius walk-speed ; ;;if not member? pdest turtles-on [neighbors] of patch-here ; [ ; ramble ; ] ; [ ; fd walk-speed ; ] ; ] ; ] ; ] ;; after a certain number of months/years a trader appears if month-id = 2 and the-period = 1 [ create-traders 1 [ setxy random-pxcor random-pycor set croptype item 0 one-of croptypes ;; turtle moves to the center of a random patch print (word "New " croptype " trader has appeared at " xcor ", " ycor) set demand random 100 set color black set destination one-of (turtle-set primarys secondarys) set heading towards destination ] ] ask traders [ fd walk-speed ;; if arrived at destination and if no people nearby change destination if [partof] of patch-here = destination and not any? people in-radius walk-speed [ ;;print "changing direction" set destination one-of (turtle-set primarys secondarys) set heading towards destination ] if any? people in-radius walk-speed [ create-tradelinks-with people in-radius walk-speed ] ] ;;**** 1. climate and farm activity ******** update-spinner ;; report the climate regime, track the climate and the current month tick end ;; women agents of the household decide production rules - eg. how much land to leave empty(15% jachere) to set-gardening-strategy end ;; male agents of the household decide production rules - eg. whether to expand, whether to abandon unproductive land, which crop to set-farming-strategy end to set-collecting-strategy ;; TODO something about obtaining NTFPs, targetting high or low val ;; let ntnt (turtle-set assas mangues mempas) ;;if any? ntnt [show NTFP-high-value one-of ntnt] end ;; shifting demand patterns for crop and amount to be supplied to update-demands set croptype item 0 one-of croptypes set demand random 100 end ;; chance of change of state of hh labour eg. 5 percent chance to update-labour if not labour [set labour random 100 < chance-labour] end ;; it generates a new type of crop to-report cropchooser end ;; this is controlled by a button to initial-plantations let FarmID 0 create-farms number-households [ set harvest 0 set annual-profit 0 set size-xy (list (farmsize-min + random-float (farmsize-max - farmsize-min)) (farmsize-min + random-float (farmsize-max - farmsize-min))) position-paddy let xc xcor let yc ycor set area (item 0 size-xy) * (item 1 size-xy) let fp patches with [abs (pxcor - xc) < ( item 0 [size-xy] of myself / 2 ) and abs (pycor - yc) < ( item 1 [size-xy] of myself / 2)] ;; ask patches to set partfarm to the current farm let farm self ask fp [set partfarm farm] set landuse "paddy" set color green ;; make them look like planations using transparency ask fp [sprout-trees 1 [set color 32 set-transparency 150]] ;; create lines around them? if FarmID < item 0 ClanHHCensus [set farmer item 0 ClanList] set FarmID FarmID + 1 ] show (word "Creating " count farms " farms") end ;; done at beginning of month to NTFP-growth let NTFPSID 0 foreach NTFPS [ let currentcal item NTFPSID NTFPS ;; calendar for current NTFP let currentbreed item NTFPSID NTFPtypes ;; print (word "checking item " NTFPSID " which is " currentbreed) let percent item month-id currentcal ;; percent chance the product will appear if percent > 0 [ ;;print (word item 0 current " is ready to harvest") ;;let sprout-set no-patches foreach sort (turtle-set primarys secondarys) [ ;;ask [forestset] of ? [ let current ? ;; forest patches not part of plantation / cash crop farm ask patch-set filter [[partfarm] of ? = 0] sort [forestset] of current [ ifelse not any? turtles-here with [member? breed NTFPtypes ] [ if random 100 < percent [set sprout-set (patch-set sprout-set self)] ] [ ;; adjust quantity of resource (no more than one NTFP agent per patch otherwise simlation will get too slow) if random 100 < percent [set grow-set (patch-set grow-set self)] ] ] ;;show sprout-set ] ;; do the actual sprouting for this type of NTFP for all forest areas select-case NTFPSID [ [ 0 "ask sprout-set [sprout-mangues 1 [set color 15 set-transparency 100 set heading 0 show-turtle]]"] [ 1 "ask sprout-set [sprout-kokos 1 [set color 45 set-transparency 100 set heading 0 show-turtle]]"] [ 2 "ask sprout-set [sprout-mempas 1 [set color 125 set-transparency 100 set heading 0 show-turtle]]"] [ 3 "ask sprout-set [sprout-assas 1 [set color 105 set size 2 set-transparency 100 set heading 0 show-turtle]]"] ] ask sprout-set [set quantity 1] ;; patch variable ask grow-set [set quantity quantity + 1] ;; clear sprout set and grow-sets for this type of NTFP set sprout-set no-patches set grow-set no-patches ] ;; ungathered NTFPs disappear ;; this will not effect those year round NTFPS if percent = 0 [ ;; clear patch quantities at locations where NTFPs disappear ;;ask patch-here [set quantity 0] ask currentbreed [ ask patch-here [set quantity 0] die] ] set NTFPSID NTFPSID + 1 ;; add one to the index ] end ;; resetting of different variables at start of tick to reset-tick set sprout-set no-patches ask people [set mcol 0 set kcol 0] end ;; things that need to be done at end of a month to reset-month ask traders [ask tradelinks[die]] end ;; timelevels are the-month (numeric month-id) and the timelevel below the-month, the-period to set-month ;; month is calculated from the value of tick let period-of-year ticks mod (ticks-per-month * 12) ;; "period" is timelevel below "month" timelevel set month-id floor (period-of-year / ticks-per-month) ;; these variables could be useful set year-id floor (ticks / (ticks-per-month * 12)) ;; select the correct string for current month (* - not permitted to resalinise) select-case month-id [ [ 0 "set the-month \"Janvier\""] ;; sf harvest pre monsoon [ 1 "set the-month \"Fevrier\""] ;; * MAY-JUNE add sf harvest here? pre-monsoon [ 2 "set the-month \"Mars\""] ;; * monsoon-saltrinse add sf harvest here? monsoon [ 3 "set the-month \"Avril\""] ;; * JULY-AUG aman start? add desalinisation law? monsoon [ 4 "set the-month \"Mai\""] ;; * CHANGE sf harvest -> rice culivation add desalinisation law? monsoon [ 5 "set the-month \"Juin\""] ;; paddy harvest add desalinisation law? post monsoon [ 6 "set the-month \"Juillet\""] ;; add sfhere? OCT - NOV aman harvest? post monsoon [ 7 "set the-month \"Aout\""] [ 8 "set the-month \"Septembre\""] ;; one-cycle shrimp (dec-june ) [ 9 "set the-month \"Octobre\""] ;; CHANGE sf harvest -> sf cultivation JAN-FEB [ 10 "set the-month \"Novembre\""] [ 11 "set the-month \"Decembre\""] ;; add sf harvest here? ] ;; calculate climate - now using climate-regime reporter end to-report month report the-month end ;; useful switch/case procedure ;; Agent runs a command task or a string containing commands. to select-case [ value cases ] foreach cases [ if first ? = value [ run last ? stop ] ] end ;; place a river node at each point along x=0 axis ;; river links are directed from top most point of grid (where y= max value) ;; todo set as directed to position-river let river-x 1 ;; start at top where y takes maximum value (+16) let intlist n-values (max-pycor + 1 ) [?] foreach intlist [ create-rivernodes 1 [ set xcor river-x set ycor ? ] ] set intlist n-values max-pycor [?] foreach intlist [ create-rivernodes 1 [ set xcor river-x set ycor 0 - (1 + ?) ] ] ask rivernodes [ let mywho who ;;create-riverlinks-to rivernodes with [who = mywho + 1] create-riverlinks-with rivernodes with [who = mywho + 1] hide-turtle ] ask riverlinks [ set color blue set thickness 0.1 ] end ;; paddy context to position-paddy let exit false let tries 0 while [exit = false] [ ;;print "stuck in while" ;; report a random floating point number from the allowable range of turtle coordinates along the given axis, x or y. let rfx random-xcor let rfy random-ycor set xcor rfx set ycor rfy ;; distancexy reports distance from this agent to the point (xcor, ycor) and distance reports distance from this agent to another ;; paddys not allowed too close to other paddy or the village or mangrove ;; myself here refers to the current paddy that we are positioning ;;show distance min-one-of rivernodes [distance myself] ;;< riverbank-distance ifelse any? other farms with [distance myself < min-distance] or distance one-of villages < min-distance or (distance min-one-of rivernodes [distance myself]) < riverbank-distance [ set tries tries + 1 if tries > 20 [ die set exit true ] ;; limit the number of paddy agents ] [ let river-distance distance min-one-of rivernodes [distance myself] set exit true ] ] end ;; position the garden somewhere in the jachere to position-garden-area let exit false let tries 0 while [exit = false] [ let spot one-of jachere with [partof = 0 and partfarm = 0] let rfx [pxcor] of spot let rfy [pycor] of spot set xcor rfx set ycor rfy ifelse any? other (turtle-set gardens farms) with [distance myself < min-distance-gardens] or distance one-of villages < min-distance-gardens or (distance min-one-of rivernodes [distance myself]) < riverbank-distance [ set tries tries + 1 if tries > 20 [ ;; show tries die set exit true ] ;; limit the number of paddy agents ] [ let river-distance distance min-one-of rivernodes [distance myself] set exit true ] ] end ;; position primarys or secondarys ;; note that a farm can be located in a forest area to position-forest-area let exit false let tries 0 while [exit = false] [ ;;print "stuck in while" let spot one-of patches with [not member? self jachere] let rfx [pxcor] of spot let rfy [pycor] of spot set xcor rfx set ycor rfy ;; distancexy reports distance from this agent to the point (xcor, ycor) and distance reports distance from this agent to another ;; paddys not allowed too close to other paddy or the village or mangrove ;; myself here refers to the current paddy that we are positioning ;;show distance min-one-of rivernodes [distance myself] ;;< riverbank-distance ifelse any? other (turtle-set primarys secondarys) with [distance myself < min-distance-forest] or distance one-of villages < min-distance-forest or (distance min-one-of rivernodes [distance myself]) < riverbank-distance [ set tries tries + 1 if tries > 20 [ die set exit true ] ;; limit the number of paddy agents ] [ let river-distance distance min-one-of rivernodes [distance myself] set exit true ] ] end to create-boundaries ;; draw 4 lines around edge of this forestset print "entered create-boundaries" let halfwidth item 0 size-xy / 2 let halfheight item 1 size-xy / 2 let myx xcor let myy ycor hatch-boundarys 1 [ set xcor myx - halfwidth ;; set xcor myx set ycor myy set heading 0 ] hatch-boundarys 1 [ set xcor myx set ycor myy - halfheight set heading 90 ] hatch-boundarys 1 [ set xcor myx + halfwidth set ycor myy set heading 0 ] hatch-boundarys 1 [ set xcor myx set ycor myy + halfheight set heading 90 ] ask boundarys [ set color white set size 3 show-turtle ] end ;; make the spinner for the upper right hand corner to create-spinner create-spinners 1 [ set shape "clock" setxy (min-pxcor + 1.5) (max-pycor - 1.5) ;; place it near top left corner, but not on top of a paddy if any? other turtles with [distancexy (min-pxcor + 1.5) (max-pycor - 1.5) < 1.8] [ let tow towards min-one-of other turtles [distance myself] ;;print (word "found turtle at " tow) ifelse tow < 90 or tow > 270 [ setxy (min-pxcor + 1.5)(max-pycor - 3) ;; move it down ] [ ifelse tow > 180 [ setxy (min-pxcor + 3) (max-pycor - 1.5) ;; move it right ] [ setxy (min-pxcor + 1) (max-pycor - 1) ;; move it slightly up and left ] ] ] set color gray - 1.5 set size 2.5 set heading 0] ;;set label 0 ] end ;; move the hand on one unit (one hour) to update-spinner ask spinners [ set heading month-id * 30 ;;ifelse climate-regime = "Monsoon" ;;[set color blue] ;;[set color grey]] ] end ;;Note the inversion of the transparency value so that the larger the number the MORE transparent (can remove or adjust that as you please). to set-transparency [new-transparency] ifelse is-list? color [ set color lput (255 - new-transparency) sublist color 0 3 ] [ set color lput (255 - new-transparency) extract-rgb color ] end ;In Mendoungué village, the right of access to the land is based on the clan. Each clan owns a space and the children inherit land from their parents. ; Baka have access to resources that are located around their camps. Rivers and fields and fallow land boundaries are. Access to land for a native of ; the village seeking land outside those left by his parents is authorized by the owner of the neighboring land that he seeks. Swamps belong to families ; whose plots are located all around. ;1. The alien does not have the right of access to land. Access to NTFPs can be done by purchasing this with the owner. ;2. The timber is the only resource available to the authorization of the native responsible for CF. If marketing, a sales contract is established between the head of HR and the client. This regulation has contributed to the resurgence of wild timber in the village.
There is only one version of this model, created about 11 years ago by Richard Taylor.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
COBAM-3.png | preview | Preview for 'COBAM-3' | about 11 years ago, by Richard Taylor | Download |
This model does not have any ancestors.
This model does not have any descendants.