Design Document for agent-based model SimPaSI ...

0 downloads 0 Views 1MB Size Report
Leguminosae (12), Bignoneaceae (9), Proteaceae (6) Bombacaceae (5), Sonneratiaceae (5) and. Musaceae (4) also well represented. At least 448 products of ...
Design Document for agent-based model SimPaSI East Kalimantan Alex Smajgl, Geoff Carlin, Alan House, Fadjar Pambudhi, James Butler, Erin Bohensky, Malcolm Hodgen

Simulating Pathways to Sustainability in Indonesia

Enquiries should be addressed to: Dr Alex Smajgl CSIRO, University Drive, Townsville 4810 QLD, Australia p: +61 (0)7 47538615 m: +61 (0)419 793439

Copyright and Disclaimer © 2009 CSIRO To the extent permitted by law, all rights are reserved and no part of this publication covered by copyright may be reproduced or copied in any form or by any means except with the written permission of CSIRO.

Important Disclaimer CSIRO advises that the information contained in this publication comprises general statements based on scientific research. The reader is advised and needs to be aware that such information may be incomplete or unable to be used in any specific situation. No reliance or actions must therefore be made on that information without seeking prior expert professional, scientific and technical advice. To the extent permitted by law, CSIRO (including its employees and consultants) excludes all liability to any person for any consequences, including but not limited to all losses, damages, costs, expenses and any other compensation, arising directly or indirectly from using this publication (in part or in whole) and any information or material contained in it.

Contents 1.

Introduction ....................................................................................................... 4

2.

Modelling aim .................................................................................................... 4

3.

Geographical context........................................................................................ 5

4.

Model design ..................................................................................................... 7 4.1 4.2 4.3

Model conceptualisation ........................................................................................... 7 Model details for landscape variables ...................................................................... 8 Model details for Environment variables................................................................. 11 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.3.8 4.3.9

4.4 4.5

Trees................................................................................................................... 11 Fruit trees............................................................................................................ 13 Fish ..................................................................................................................... 15 Honey ................................................................................................................. 16 Rattan ................................................................................................................. 18 Rubber ................................................................................................................ 19 Deer .................................................................................................................... 19 Dolphin................................................................................................................ 21 Hornbill................................................................................................................ 22

Model details for households .................................................................................. 23 Model details for markets........................................................................................ 46

Acknowledgments.................................................................................................... 50 REFERENCES........................................................................................................... 51

i

List of Figures Figure 1: Case study region in the province East Kalimantan

6

Figure 2: Conceptual model for the SimPaSI

7

Figure 3: Schematic diagram of cascading bucket model.

10

Figure 4: Growth function for Dipterocarp species

11

Figure 5: Simulation of a primary forest at Deramakot. Total standing volume and volume of different tree species groups over time (for trees with diameter \10 cm). 12 Figure 6: Simulation of a heavily disturbed forest at Deramakot. Total standing volume and volume of the different species groups over time (for trees with diameter \10 cm).

12

Figure 7: Assumed response function for tree growth

13

Figure 8: Assumption on transition of forests from logged into unlogged state

17

ii

1. INTRODUCTION This document provides the technical details for assumptions made in the SimPaSI (Simulating Pathways to Sustainability in Indonesia) model for East Kalimantan. The model was developed in partnership with the Government of Indonesia and several experts from the local university. The goal of this document is to create the level of transparency necessary to allow third parties to understand model assumptions. Thus, this design document provides in the following the background of the modelling work, followed by some geographical background and the actual model design. The model design presents the scientific background for model assumptions and the actual pseudo code to allow for full transparency.

2. MODELLING AIM The goal is to develop an approach that can be used to understand the community level triple bottom line outcomes of proposed macro policy interventions. The development of the SimPaSI model aims to improve the capacity of central and local decision makers by providing quantitative simulation tools to assess energy related policies against their impact on indicators such as poverty. This approach assumes that policy changes such as fuel subsidy reductions are likely to lead to very different outcomes in different parts of Indonesia. Implementing for exemplary districts a grass root level approach for simulating policy impacts allows for understanding region specific impacts and how they differ across Indonesia. Such insights allow for fine-tuning policies and improve decision making for sustainable development. The specific purpose of this agent-based model is the simulation of impacts macro-policy changes and climate change might have on important household scale indicators such as poverty and land use indicators such as deforestation rate. The model is specifically designed to analyse the following first order policy interventions:  Reductions of fuel subsidies  Reductions of kerosene subsidies Additionally, questions regarding the impact of decisions on the energy mix for power generation are relevant. But such decisions play out through market dynamics more than directly through household variables. Therefore, this model design assumes as relevant second order variables that define the input side (user interface)  Changes in employment in the coal mining industry Additional to the macro perspective of national decision makers, province level and district level decision makers listed the following levers they want to test with this agent-based model: More coal mining concession granted (covered in previous point) and more or less logging concession granted, which translates into  Changes in employment in the forest industry  Direct changes in land use from production forest to, for instance, oil palm plantation  Direct changes from forest into mining Output requirements for the modelling work include indicators across the triple-bottom-line. Critical for all stakeholders, BAPPENAS, BAPPEDA Kalimantan Timur, and the World Bank is  poverty this indicator will be documented at a village (Desa) scale as no GIS data was available that depicts land use at a finer resolution. The poverty indicator will be composed out of monetary

4

household income and several wellbeing components that are not reflected by market processes, such as  coverage of nutrients requirements,  cultural and spiritual values of natural resources  household security regarding expected future  social aspects of wellbeing Additionally, the model will simulate at a village scale  deforestation  other critical land use changes, such as mining operations The consultation process of experts and local stakeholders revealed the significance of changes in the flooding regime. Currently, the changes in flood frequency and flood intensity are discussed as consequences of land use change (mining and deforestation) in the upper catchment. Climate change is an additional phenomenon that is made responsible for recent and unprecedented floods. Therefore, this study has a strong focus on climate change impacts and how adaptation dynamics might occur due to changes in climatic parameters such as rainfall and temperature.

3. GEOGRAPHICAL CONTEXT The geographical context of this modelling exercise covers the following regencies (Kabupaten) and municipalities (Kota) (see Figure 1)  Kota Samarinda  Kota Balikpapan  Kabupaten Kutai Kartanegara  Kabupaten Kutai Barat  Kabupaten Paser  Kabupaten Penajam Paser Utara (Pasir) The tropical region included in this case study is part of the province East Kalimantan (Kalimantan Timur) that covers 211,440 km2, and is the largest of the four provinces on Kalimantan. 81.71% of the area is covered by land, with a predominance of production and conservation forests, oil palm and timber plantations, and 18.29% by waters (East Kalimantan Province Government, 2004). The province has rich natural resources like natural gas, coal, gold, oil, petrol, exotic forest products and timber and has played a key role in Indonesia’s economic development. The length of the provincial its coast is 1,185 km. the dominating inland water body within the case study area is the Mahakam River. The Mahakam River, with approximately 920 km of length, is the largest river in Borneo and East Kalimantan. Its catchment is divided into 5 regions, where the central floodplain is known as the Middle Mahakam Area and covers about 5,000 km2 between 116° -117° E, and 0°00' - 0°30' S (Christensen, 1992, Sumaryono, 2005). This area contains the three largest lakes of the region: Danau Jempang, Danau Melintang and Danau Semayang. Situated in the wet tropics, temperatures in the case study region range between 21 and 34°C with a humidity average of 86% and between 1500 and 4500 mm of rain per year (East Kalimantan Province Government, 2004). The rainfall in the Middle Mahakam area varies between 1900 and 2500 mm, generally maximal in May and December and minimal in July-August and FebruaryMarch. The coastal area of East Kalimantan is known to be drier than the rest of the island of Borneo (Takeshi Toma et al. 2000).

5

Figure 1: Case study region in the province East Kalimantan

6

4. MODEL DESIGN 4.1

Model conceptualisation

The general model design covers in a whole of system approach bio-physical variables and socio-economic variables. In such a socio-ecological the system variables are chosen according to their relevance for the user aspects defined above. These variables are grouped six clusters.  Landscape o Villages o Surface water o Groundwater  Flora o Trees o Fruit trees o Rubber o Rattan  Fauna o Honey o Fish o Dolphin o Deer o Hornbill  Households o 19 different types according to field work results that elicited their behavioural responses to policy and climatic scenarios described above  Markets o Employment and wages o Products and their prices  Government o Subsidies

Climate

Figure 2: Conceptual model for the SimPaSI

7

The following sections define what Entities exist and what Attributes exist to characterise these entities. These sections also define the Methods that change the state of the attributes. These entities are groups under the headings landscape variables, environmental variables, and household variables. Market aspects and governmental influences are covered within the household design. Within each section this document provides first the research background with the definition of a response function. Then, the pseudo code that was used for the Java programming is provided in a grey box.

4.2

Model details for landscape variables

The agent based catchment models for the two regions of Indonesia, East Kalimantan are created using a corrected Digital Elevation Model (DEM). The corrected DEM of the earth is produced by the Consortium for Spatial Information (CGIAR-CSI) who has further processed the original Shuttle Radar Topography Mission (SRTM) data (Reuter, Nelson et al. 2007). The GIS software package, Arc-GIS (ESRI 2009) is used to define subcatchments within the region East Kalimantan that capture the area of interest and any surrounding land area that may contribute water flow. Precipitation is estimated using historical point data from the NCDC (National Climate Data Centre) (NCDC 2009) within NOAA (National Oceania and Atmospheric Administration). Where NCDC precipitation data did not exist or was not distributed across the modelled catchment enough to allow a spatial estimation of precipitation then another method, the CMORPH (CPC MORPHing) technique (Joyce, Janowiak et al. 2004) was used. Using ArcGIS, NCDC data and CMORPH estimates a shape file grid and associated data file is created to spatially distribute precipitation across the modelled area. East Kalimantan also had varying amounts and types of other spatial data, like soil and landuse that had potential to improve the estimations of the hydrological model. This spatial data along with the precipitation and DEM data was overlaid onto the sub-catchment file, generating smaller areas (polygons) of land with unique spatial information representing those overlaid files. This overlaid file becomes the hydro-agent layer within the agent based catchment model. By using this integration technique the precision in estimating hydrological flows is driven by available spatial data and has potential to be improved as more data becomes available. SimPaSIEastKalimantan is the main java class. During initialisation the SimPaSIEastKalimantan class instantiate a number of classes like crop, soil and climate that load associated data into memory. Loading data into memory rather then alternatively using disk IO greatly speeds up model execution. The regional GIS layers for Districts, Subdistricts and Villages and those created for Subcatchments and HydroAgents are also instantiated during model initialisation with objects created for each polygon that exists within the GIS layers. Once the villages are all created Households and Persons are instantiated from within each village according to available census data. A Water Balance Model (Cook, Carlin et al. 2007), see below, is then instantiated for each HydroAgent object to complete the initialisation process.

8

The Recursive Porous Agent Simulation Toolkit (Repast) an agent based modelling environment (North, Collier et al. 2006) with integrated GIS support through several classes allows the reading in of GIS Shapefiles and their associated attribute files (dBase .dbf file). There are two commonly used classes for GIS integration; the first is a data class for reading and writing from within Repast to a GIS file data file or attribute file, the other is a display class which coordinates the display of the GIS with updates from the modeled agents. There are two main GIS systems for use with Repast, ESRI ArcMap and OpenMap. OpenMap like Repast is free and open source and to date has been the preferred GIS toolkit and has been used here. As each GIS Shapefile is read in, each polygon within the Shapefile has an associated object created for it, based on an existing class that the developer must first create. After the GIS Shapefile is read in, variables in the associated attribute file become variables in the newly created object. When the Hydro Agent shape file is read in all the attributes associated with the previously overlaid shape files become variables within objects associated with each polygon in that shape file. The information in these variables is then available to the Water Balance Model (Cook, Carlin et al. 2007). Each polygon in the Hydro Agent shape file instantiates the WaterBalanceModel class to create an object that models the biophysical landscape. During initilisation the SimPasiEastKalimantanclass initilises the HydroAgent and WaterBalanceModel model in the buildModel method in the following order: 1. Initilise the cropGrowth variable in WaterBalanceModel 2. Initilise the landuse variable in WaterBalanceModel 3. Call method plantNewCropBiophysicalModel in Hydrogent 4. Set the number and soil layers types in WaterBalanceModel 5. Set the number of isohytes in WaterBalanceModel Each step in the model is equal to one day or a 24Hr period and at each step the “step” method in the SimPasiEastKalimantan class is called. Methods are then executed within the step method in the following order: 1. Read climate data 2. Set the rainfall amounts in each grid or isohyet 3. For each HydroAgent call executeDailyBiophysicalModel method 4. Call SetDailyWeatherData in WaterBalanceModel 5. Call WaterBalanceModel in WaterBalanceModel 6. Call GroundWater in WaterBalanceModel 7. Update dailyRunoff, dailyInfiltration 8. Update weeklyRunoff, weeklyInfiltration The biophysical landscape within the East Kalimantan and Central Java models is based on the water balance model developed by Cook (Cook, Carlin et al. 2007). The model uses a cascading bucket model with modifications to allow for improved soil evaporation. This modification follows Deardorff (1977) and uses a force/restore method to better determine soil evaporative losses. This requires that the first layer (Fig 4.) is a surface layer nested within layer 2. Layer 1 the surface layer is required because soil evaporation is often underestimated (Deardoff, 1977). Deardoff (1977) devised a force-restore model often used in heat transport modelling for soil evaporation which has been used here with some adaptation. There is a transfer of water to or from the surface layer, from or to layer 2 by an exchange coefficient. In Deardorff’s model this exchange coefficient (C1) is an empirical parameter. The minimum number of layers for this model is 2 and the model assumes the soil properties for layer 1 and 2 are the same.

9

P

Layer

AET2

f1 f2

AET3

Layer

f3

Zx AET4

AET1

Layer

f4 AET5

R

Layer 1 Surface

Z1 Z2 Z3 Z4 Z5

Layer

f5 AET..n

Layer

f..n

Z..n

Figure 3: Schematic diagram of cascading bucket model.

In Figure 3 block arrows represent material fluxes of water. First layer is a surface layer nested within layer 2. AET1 is the actual evapotranspiration from the surface layer and AET2..n is evapotranspiration from all other layers where plant roots extend into. P is the precipitation and R is the surface runoff, f1..n is the flux between the layers, z1..n is the depth of the layers and zx is the depth of all layers (bulk layer). F1..n is the flux between layers or deep drainage depending on the number of layers. Pseudo code WaterBalanceModel method If rains occurs then Calculate Infiltration. For each soil layer Sum the storage capacity End If gravitational time > 1 Calculate Infiltration using Philip’s eqn. Else Calculate Infiltration using a modified Philip’s eqn. End Set variable InfiltrationLimit = MaxInfiltration Calculate Runoff Set Infiltration to DailyRainfall If DailyRainfall > InfiltrationLimit Infiltration = InfiltrationLimit DailyRunOff = DailyRainfall - Infiltration End If a crop has been planted set the RootingDepth and crop factors

10

Set Evapotranspiration For each soil layer Cascade water through the layer Ensure we take out no more water then already exists within the layer. Extract water from the layers where the plant roots extend into. If water content is greater then field capacity water is transferred downward due to gravity. Update water storage Update water contents End If a crop is planted grow the crop Set the global model variable DailyRunoff Set the global model variable DailyInfiltration. End WaterBalanceMethod

4.3

Model details for Environment variables

4.3.1 Trees Key timber species are dipterocarps (mainly Shorea spp. = various meranti) and Bornean ironwood (Eusideroxylon zwageri). E. zwageri has all been all but logged out of most East Kalimantan forests but remains a valuable resource for the future as it does persist in logged over forests. Of the local Shorea spp., S. laevis appears the most significant. S. laevis is classed as a shade tolerant, slow-growing species (Phillips et al. 2002), but can grow to 210 cm gbh in 85 yrs (= 67 cm dbh). In contrast E. zwageri is assumed to reach 30 cm dbh in 120 years, 120 cm dbh in 403 years (Kiyono and Hastaniah 2000). S. laevis increases in importance value (based on no. stems and basal area) after logging (12% before, 18% after); E. zwageri decreases (8.5% before, 6% after) (Bratawinata: http://www.nacsj.or.jp/pn/houkoku/h01-no12.html). More generally, measured diameter increments of dipterocarps are between 0.4-1.2 cm/yr, with a mean for all species in mixed forests (including dipterocarps) of 0.7 cm/yr (refs cited in Huth & Ditzer 2000).

Figure 4: Growth function for Dipterocarp species

11

Dipterocarp species (and some others) have been classified into functional groups based on their regeneration strategies and early seedling growth patterns (Phillips et al. 2002). Based on these groupings, proportional allocations can be made across a stand based on its composition, if species lists and stand tables are available. Because of the complexity of these forests, the highly variable nature of logging and postlogging operations, and the lack of adequate data to base sensible models of response on, it is impossible to generate accurate response functions. Simulated standing timber volumes over time indicate that unlogged forests are quite stable, but that logged forests may take over 150 years to achieve equivalent volumes of species of primary interest (e.g. canopy + emergent dipterocarps (Huth & Ditzer 2000). Most volume is in the very largest trees (emergents); volumes of main canopy dipterocarps are predicted to recover to prelogging levels (~50 cu m/ha) within 20 years (although this has to be confirmed with on-ground measures).

Figure 5: Simulation of a primary forest at Deramakot. Total standing volume and volume of different tree species groups over time (for trees with diameter \10 cm).

Figure 6: Simulation of a heavily disturbed forest at Deramakot. Total standing volume and volume of the different species groups over time (for trees with diameter \10 cm).

12

For modelling tree growth in the SimPaSI model changes of standing volume depicted in Figure 5 and Figure 6 are matched by a logarithmic function shown in Figure 7. The coefficient (alpha) that was chosen is 1.1 as it matches best emergent groups (mainly dipterocarps) in Figure 6.

Figure 7: Assumed response function for tree growth

Pseudo code o Stock in cubic metres timberStockm3Ha=500-500/(((daysSinceLogging/700)^alphaTreeGrowth)+1)

4.3.2 Fruit trees Factors likely to affect fruit yields in family garden orchards are the rates and types of chemical inputs (fertilisers, herbicides, insecticides, fungicides) and, depending on the species, the access of the trees to pollinators. For East Kalimantan there is little direct data on the use of plant protection chemicals and the benefits to production in relation to costs. Regarding fertiliser there is some information on recommended fertiliser applications in commercial orchards (see Table 1), but little data on responses of fruit trees to fertiliser additions, and nothing specific to family gardens. Table 1: Recommended fertiliser rates for commercial crops in Malaysia, indicative only for E Kalimantan. (Source: ftp://ftp.fao.org/agl/agll/docs/fertusemalaysia.pdf).

Cempedak Durian Banana Rambutan

N kg/ha/yr 118 98 554 73

P kg/ha/yr 116 98 554 73

K kg/ha/yr 127 150 680 104

The following example for durian indicates observed relationships between fertiliser application and durian production (http://webdb.stii.dost.gov.ph/rnddetails.jsp?rnd_id=000845): Fertilizer application with appropriate formulation at proper time improves yield and quality. Findings showed that durian trees applied with 5 kg complete fertilizer (14N-14P-14K) per tree

13

supplemented with foliar fertilizer (2N0-50P-30K) significantly produced more fruits (158 fruits/ tree) compared with those applied with complete fertilizer alone (41 fruits/tree). However, no significant difference was observed among treatments in average weight of fruit per tree. The completed fertilizer was applied in the soil before flowering starts, while the foliar fertilizer is applied on the leaves and trunks from flower emergence to fruit development, 10-50 days after fruit setting. On fruit quality, durian trees applied with 5 kg complete fertilizer (1414-14) and foliar fertilizer (4-0-48) had the highest total soluble solids (TSS) and edible portion at 20.36 degree Brix and 20.22%, respectively. The result is comparable with those treated with 20-5-30 foliar fertilizer with TSS value of 17.02 degree Brix and edible portion of 18.16%. Durian trees applied with complete fertilizer (14-14-14) alone had more abscised fruits (82.32) 10 to 15 days after fruit setting compared with those treated with 20-50-30 foliar fertilizer (41.31). It can be assumed that relationships for lai are similar to durian production. Pollination can be another important factor (Meijaard 2005). Species relying on bats for pollination in Southeast Asia are most common in the family Myrtaceae (59), with Leguminosae (12), Bignoneaceae (9), Proteaceae (6) Bombacaceae (5), Sonneratiaceae (5) and Musaceae (4) also well represented. At least 448 products of value to humans were found to be derived from 186 species (Fujita & Tuttle 1991). These products include fruit, drinks, foods, ornamentals, timber, fibres, tannins, dyes, medicinals, animal fodder and fuel. The durian (Durio spp.) trade in Southeast Asia was valued at US $120 million in the mid-1980s (Myers 1985), and annual sales of petai (Parkia speciosa) in Peninsular Malaysia were worth $15 million (Ng 1980); in the late 1990s petai sales in the area surrounding Kuala Lumpur, Malaysia, generated approximately US $2.8 million annually (Chuen et al. 1998) further indicating the economic importance of these crops. Durians depend on nectar-feeding bats (especially the cave-dwelling Eonycteris spelea and the forest bat Macroglossus minimus). When durians are not in flower, these bats depend on other tree species for nectar (presumably requiring a relatively diverse community to provide food over the year). Loss of forest can lead to local loss of bats and failure of valuable durian crops (Start & Marshall 1976). Start & Marshall (1976) identified lower fruit set where pollinators have been reduced by changes in forest cover, but no data to support this assertion. -ann et al. (2003) found for PNG that Macroglossus minimus probably ranges no more than a few kilometres from roost sites, as home ranges are small (5.8 ha) and the mean maximum home range dimension is about 500 m. Roost sites are preferentially in primary forest. While similar assumptions can be made for Lai (Durio sp.), pollination of other species differ. It can be assumed that banana (Musa spp.) production is from commercial (parthenocarpic) varieties, which do not require cross-pollination. Rambutan (Nephelium lappaceum) is an obligate out-crosser and is pollinated by a wide range of bees, butterflies and flies. The same assumptions can be made for Langsat (Lansium domesticum). The cempedak (Artocarpus integer) pollination system is uncertain, but might involve gall midges that feed on fungi growing in male inflorescences (Sakai et al. 2000).

Pseudo code VARIABLE fruitProduction = double o Productivity fruitProduction = NORMAL(0.7;2)*NORMAL(60;1000) This assumes a field size of 0.7-2 ha. Fruit production is activated for a harvest period of 8 weeks with 45 working days. The range value of 60 to 1000 allows for aggregation of Durian, Rambutan., Cempedak and Langsat.

14

4.3.3 Fish The Middle Mahakam area supports the core inland fishery in the catchment, and is focussed around the three major lakes of Jempang (15,000 ha), Melintang (11,000 ha) and Semayang (13,000 ha). Fisheries are based on 15 commercial fish species and one crustacean, and numerous other species taken for subsistence. Annual fisheries production is positively correlated with the area flooded by seasonal rains. The greater the area flooded, the greater the area of spawning and nursery habitat for recruits. Catches are highest in February and June/July when receding floodwaters concentrate fish stocks into smaller areas, making them easier to catch. Fish stocks are apparently threatened by a number of factors: o Sedimentation caused by logging, land clearance for agriculture and coal mining is infilling the lakes, reducing the potential wetted area. The rate of in-filling of the lakes is 1-2 cm p.a. Forest clearance in the catchments of the tributaries flowing into the three lakes is of greatest concern. The Enggelan River (flowing into Melintang) and the Kahala River (flowing into Semayang) are impacted, but most coal mining and oil palm occurs in the (un-named) tributary to Jempang. o Shallowing of lakes leading to increased weed growth and die back, and then low dissolved oxygen levels; o Pollutants including phosphorous and ammonia, which further encourage weed growth; o Over-fishing using traditional poisoning, electro-fishing and gill-netting with fine mesh nets, all of which are indiscriminate and kill juvenile fish. Due to the natural fluctuations in annual flooding, fishery production and catches can also vary widely. In 1950-1990 catches ranged between 13,000 tonnes and 35,000 tonnes. However, there is some evidence of marked declines in abundance in recent years. In 2000-2005 catches of four of the five major commercial species declined steadily. We have focussed on sedimentation as the major ‘slow’ variable driving fishery production because other than floodwater extent it appears most likely to be influencing habitat area, and hence juvenile production. Over-fishing and other pollution may be also having an effect, but we have assumed that these are less influential. For a response function of fishery production to deforestation and sedimentation, we estimated trends in fishery production using data from Christensen (1993) on catches for 1950-1990, standardised by numbers of fishing households for this period. We compared this with contemporary figures from Castel (2007). Then we obtained Kalimantan forest clearance rates for 1985-1997 from Holmes (2000), and assumed that these were applicable to the Mahakam River catchment. Table 2: Values for fish catch, number of fishing households and forest area in the Mahakam catchment

Maximum fish catch Fishing households Maximum annual fish catch per household Forest area (assumed deforestation rate: 1.6% pa)

1980s 35,000 t 12,000 2.92 t/household 77,700 km2

2005 30,593 t 17,400 1.75 t/household 51,343 km2

Table 2 summarises that between the 1980s and the early 2005 forest cover in the Mahakam catchment declined by 26,357 km2, which coincided with a reduction of maximum fishery production by 1.17 tonnes/household. Thus, we assume that for every km2 reduction in forest cover fish catch per household declines by 0.04 kg. Temporally, this income loss is most likely

15

to occur in the peak fishing months of February and June/July. Spatially, the clearance of forest in the tributaries of lakes Jempang, Melintang and Semayang is likely to have a proportionately greater impact on fishery production than forest in other parts of the catchment. Pseudo code Variable fishStock=double Variable Initialisation fishStock = 1700*1170 o Fish stock in tonnes fishStock=fishStock*(1-0,04*deforestationArea) // per year

4.3.4 Honey

Kempas (Koompassia spp.) are prime habitat trees for the giant Asian honey bee (Apis dorsata). Bees are not cultivated in East Kalimantan as they are in other parts of the island, but honey trees are similarly protected by customary law. Kempas trees are usually left behind during logging activities. One of the reasons that kempas are favoured by bees is the exposure offered by the emergent stature of the trees that allows aeration (assisting in disease control), access to clear air for flight, and remoteness from predators. In a logged-over forest there would be other trees affording similar conditions that bees might nest in (e.g. meranti/keruing). Yields of honey from a single A. dorsata comb can be up to 25 kg, but are usually less then 10 kg due to the difficulties in harvesting and spillages etc. (Mulder et al.). Favoured honey trees can support 150 (and up to 200) individual combs (Mulder et al.). A. dorsata forages from a surprisingly small number of species given the richness of the forests it inhabits (10%; Roubik 2005). A dorsata may cope with fragmented forests as they are strong fliers, although there are concerns about declines in bee numbers across SE Asia die to fragmentation, use of pesticides, hunting (Akratanakul, 1990). Combs appear to be built on an annual cycle. Wax is also collected from combs – a comb yielding 6 kg of honey might also give 0.5 kg of wax. In synthesis the following assumptions are made: we assume about 4 trees per ha and about up to 100 combs per tree, which means 4-400 combs per ha. Additionally we can assume about 6 kg of honey per comb per year, which leads to an annual production of honey of 24-2400 kg per ha (plus 2-200 kg wax/ha/year). In case of logging we assume at least 100 years to replace honey tree. This assumes kempas as the primary habitat species and that honey is only harvested wild (A. dorsata), which was confirmed be several local experts (see also Annex 1). Thus, logging reduces availability of nectar sources. Table 3: Relationship between forest state and honey production

Response Logged Primary

16

with kempas 0.6 1.0

no kempas 0.4 0.7

A primary forest with the production of 24-2,400 kg per year per ha is defined as a benchmark. If no kempas trees exist in that area the benchmark is reduced by 30 per cent. If the area is logged but kempas are still available the benchmark is reduced by 40% and the logged state without kempas species produces 60% less honey than the benchmark state. Table 3 summarises this relationship. In order to allow the model to simulate the dynamics of regrowth we assume a logarithmic function shown in Figure 8 to quantify the honey production during periods of regrowth. 1 0.99 0.98 0.97 0.96 0.95 0.94 0.93 0.92 0.91 0.9 1

366

731

1096

1461

1826

2191

2556

2921

3286

3651

Figure 8: Assumption on transition of forests from logged into unlogged state

Pseudo code Parameter honey1Benchmark = double Parameter initialisation INIT honeyBenchmark = 6*4*Random(1-100) Variable honeyProduction = double o Yield accessible CASE honeyProduction OF (primaryForest) AND (honeyKempas=TRUE): honeyProduction = honeyBenchmark; (primaryForest) AND (honeyKempas=FALSE): honeyProduction = 0.7*honeyBenchmark; (loggedForest) AND (honeyKempas=TRUE): honeyProduction = (1-0.4/(((daysSinceLogging/1000)^3.8)+1)) *honeyBenchmark;

17

(loggedForest) AND (honeyKempas=FALSE): honeyProduction = (0.7-0.3/(((daysSinceLogging/1000)^3.8)+1)) *honeyBenchmark; ENDCASE

4.3.5 Rattan Belcher et al. (2004) identified that rattan is cultivated in average plots of 1.4 ha with a mean planting density of 170 plants per ha. Large harvests are organised after 10 yrs, while earlier small scale cuts can be made after 5 years (clumps can be cut repeatedly). Rattan production peaks at 24-30 years and declines after 37-40 years. Seeds are normally taken from home gardens, which means that no other input costs exist except labour for establishment and harvesting. The net present value of rattan does not seem drastically affected by labour costs, output prices or discount rates (Belcher et al. 2004). Hence, rattan is seen as a resilient system because of flexible harvest times and low or zero management inputs (after planting). However, fire can have severe impacts on rattan gardens (e.g. 1997) (Fadjar et al. 2004). In East Kalimantan a range of species is grown, driven by changing market demands for products. Large species (e.g. Calamus manan, C. scipionum) are still collected from primary forests. Unfortunately, no data is available for yields (either by length or weight) from rattan gardens nor does data exist for growth rates or replacement times for wild harvested rattan. Table 4: Relationship between rattan production, forest state and cultivation type (wild or garden).

Logged forest Primary forest

burned unburned burned unburned

wild harvest 0.2 0.5 0.3 1.0

gardened 0.2 1.0 -

Based on a benchmark approach, this study assumes the main relationships shown in Table 4. Assuming that the type of forest (primary or logged), fire (burned or unburned) and the type of harvest (wild harvest or garden cultivation) define the main conditions for differences in rattan yield we define that unburned primary forest delivers highest yields if harvested wild. This defines the benchmark. The same benchmark yield can be achieved in unburned rattan gardens. If primary forest is logged we assume that the benchmark yield drops by 50%. If the forest or a garden gets additionally burned the yield drops by 80%. Unlogged primary forest delivers 30% if it burns. Pseudo code VARIABLE rattanProduction = double

// in kg

PARAMETER rattanBenchmark = DOUBLE INIT rattanBenchmark = Normal(3000;4000) * Random(0.7;3) CASE rattanProduction OF

18

((primaryForest) OR (garden)) AND (fire=FALSE): rattanProduction = rattanBenchmark; ((logged Forest) OR (garden)) AND (fire=TRUE): rattanProduction = 0.2 * rattanBenchmark; (primaryForest) AND (fire=TRUE): rattanProduction = 0.3*rattanBenchmark; (loggedForest) AND (fire=FALSE): rattanProduction = 0.5*rattanBenchmark; ENDCASE

4.3.6 Rubber There are 2 major types of rubber enterprises in E Kalimantan: project rubber, with selected planting stock, fertiliser and herbicide inputs, generally monoculture; and jungle rubber, with wild (i.e. locally harvested) seed. Additional expert knowledge emphasised the lack of wild harvests in the districts this model aims to simulate. Chomitz & Griffiths (1996) report that it requires 10 years before rubber can be harvested and that the harvest span is between 20 and 30 years. We assume a mean production of 600 kg per ha per year (Chomitz & Griffiths 1996) but keep a range value of 500 to 700 kg per ha per year as production depends on the hours put into tapping rubber. Interview responses confirmed expert beliefs on such variations. Pseudo code PARAMETER rubberBenchmark = DOUBLE VARIABLE rubberProduction = DOUBLE INIT rubberBenchmark = NORMAL(500;700) INIT rubberProduction = rubberBenchmark o Kg accessible rubberProduction = rubberBenchmark;

4.3.7 Deer We assume that the main species hunted in East Kalimantan is local muntjac (Muntiacus spp.). Habitat modification and hunting are considered the main threats to the species (Meijaard et al. 2005), and a total ban on hunting has been proposed (Meijaard et al. 2006). However, the population of M. muntjac (red) seem to increase in logged forests while being more susceptible to hunting. In contrast, M. atherodes (yellow, Bornean endemic) populations are in decline due to logging and clearing. Hunting is likely to add to this pressure. Model assumptions on biomass of deer assume an average weight of 20 kg for red muntjac and 15 kg for yellow muntjac. We assume for primary forests an average density of 3 animals per ha

19

with 80% yellow and 20% red. This results in 48 kg per ha available biomass in primary forests, which is slightly lower than other sources (Maffei et al. 2004). Additionally, it is assumed that hunters can make 70% of biomass available for consumption or trade. Based on the benchmark value of unhunted primary forests Table 5 summarises the factors for logged forests and hunted forests. Table 5: Relationship between deer biomass, forest state and hunting conditions

Response

Hunting red 0.8 yellow 0.2

no hunting red 1.6 yellow 0.6

Primary

red 0.6 yellow 0.5

red 1.0 yellow 1.0

Pseudo code Parameter deerBenchmarkHa = Integer deerYellowBenchHa = double deerRedBenchHa = double huntingDeer = Boolean Paramter initialisation INIT deerBenchmarkHa = 3 INIT deerRedBenchHa = 0.8*3 INIT deerYellowBenchHa = 0.2*3 Variable deerBiomassHa = double huntingDeer = Boolean Variable initialisation INIT deerBiomassHa = deerYellowBenchHa * 15 * 0.7 + deerRedBenchHa * 20 * 0.7; o Deer meat available CASE deerBiomassHa OF (primaryForest) AND (huntingDeer=FALSE): deerBiomassHa = 0.7*15*deerYellowBenchHa +0.7*20*deerRedBenchHa; (primaryForest) AND (huntingDeer=True): deerBiomassHa = 0.7*15*0.5* deerYellowBenchHa +0.7*20*0.6*deerRedBenchHa; (loggedForest) AND (huntingDeer=FALSE): deerBiomassHa = 0.7*15*0.6* deerYellowBenchHa +0.7*20*1.6*deerRedBenchHa; (loggedForest) AND (huntingDeer=TRUE): deerBiomassHa = 0.7*15*0.2* deerYellowBenchHa +0.7*20*0.8*deerRedBenchHa; ENDCASE

20

4.3.8 Dolphin Survey and conservation status data for Irrawaddy dolphins are taken from Kreb (2002, 2005), Kreb & Budiono (2005) and Yayasan Konservasi Rasi’s report (2005). The dolphin population’s range in the Mahakram River is approximately 400 km by river length, from Muara Kaman (180 km from the sea) to Datah Bilang (480 km from the sea). Historically this range has included Semayang, Jempang and Melintang Lakes and the tributaries flowing into them. In high water periods dolphins congregate in two areas where tributaries join the main stem: Muara Pahu (300 km from the sea) and Pela/Semayang – Muara Kaman (180 km from the sea). These core areas may be related to the natural corralling effect river junctions have on fish, assisting the dolphin’s foraging success in otherwise large areas of water. As waters recede dolphins spread their range along the main river and into lakes. The dolphin population has been estimated in 2001 and 2005, and 95% CIs were 44-76 and 5979, respectively. There is insufficient data accuracy and time series to demonstrate any trend. In 1995-2005 a minimum annual average of 4 dolphins died from direct anthropogenic effects. The vast majority of these are caused by by-catch in gill nets. Population viability analysis suggests that the mortality of 2-3 dolphins is sufficient to cause severe population decline and quasi-extinction. Indirect effects include over-fishing, sedimentation of lakes with consequent shallowing and loss of fish habitat, and potential impacts of pollution. In spite of the impact of gill nets and dolphin mortality rates exceeding the maximum indicated by the PVA, there is so far no obvious sign of a decline, However, there is evidence of range contraction caused by gill net pressures and sedimentation in the Semayang, Jempang and Melintang Lakes and also the tributaries which flow into the lakes and link them to the main stem. This is particularly evident in Lake Jempang, where dolphins have not been sighted for several years. For modelling purposes we assume gill net use and range of dolphins as main determinants for dolphin population. Christensen (1993) and Castel (2007) report gill net by-catch threats of 12,000 in 1988 and 17,400 in 2005. Both sources report also on dolphin range restriction and allow for the assumption that in the same period dolphin range declined by 30%. Thus, we assume that for every additional 100 fishing households there will be a further 6% decline in dolphin range. Temporally this range restriction is likely to be observed most in months of medium flows after flooding (i.e. February and June/July) when dolphins are usually most dispersed. Spatially, this range contraction is most likely to effect areas at the upstream and downstream extremities (i.e. Muara Kaman and Datah Bilang). Communities around the lakes and their tributaries are already likely to be experiencing marked reductions in dolphin encounters. The flood season main stem core areas of Muara Pahu (300 km from the sea) and Pela/Semayang – Muara Kaman are the least likely to be influenced by range restrictions. Pseudo code Variable dolphinPopulation = integer Variable initialisation dolphinPopulation = NORMAL(44-79) o 

Population dolphinPopulation = dolphinPopulation*(10,06*numberFishingHouseholds/100)

21

4.3.9 Hornbill Hornbills have been considered potentially useful indicators of the success of forest regeneration and retention of tree diversity (Meijaard et al. 2005). Among the Asian hornbills, three principal types of fruit are eaten (Leighton and Leighton 1983): • lipid-rich capsular fruits such as Aglaia spp. and Myristica spp., • lipid-rich drupaceous fruits of Lauraceae and Annonaceae, and • sugar-rich Ficus spp. Leighton and Leighton (1983) considered figs to be especially important for territorial hornbills in East Kalimantan, although O’Brien et al. (unpubl.) found that, in Sumatra, figs are more important for non-territorial species. Fig trees are often destroyed during logging or silvicultural procedures as the host trees of strangling varieties are frequently canopy timber trees. A 74% loss rate of fig trees was recorded following logging in Peninsular Malaysia, with an average loss of hornbill food trees of 56% (Johns 1987); i.e., damage to hornbill fruit trees was random, but figs were destroyed both during harvest and as a silvicultural treatment. Pioneer trees do not generally provide fruit eaten by hornbills, although the sugary fruits from some rapidly growing climbers are eaten by territorial Anthracoceros. The loss of high canopy trees also reduces foraging substrata, such as loose bark and epiphytes, which are probed by some larger hornbills for animal prey that provide important protein and minerals in their diet (Johns 1997). Hornbills are protected by law, and in East Kalimantan people do not (apparently) hunt them (although Meijaard et al. 2005 differ). For modelling purposes it is assumed that the main threats are from forest fragmentation and habitat loss. Breeding can occur at any time of year, but appears to be concentrated between January and April (Meijaard et al. 2005), with nesting cycles of 130 days. We define primary forest as the benchmark habitat for hornbill As hornbills do not aggregate into larger groups we assume an average area of 7 to 8 km2 per pair. For logged areas we assume responses of at least 60% decline after logging, which Rijksen (1978) recorded for the indicator species Rhinoplax vigil. Forest fragmentation is assumed as a second important driver. Hunting creates an additional impact on the population. The factors applied for the different cases are summarised in Table 6. Table 6: Relationships between hornbill population, forest state and hunting

Response Logged

Fragmented 0.3 no hunting

intact 0.4 no hunting

Unlogged

0.2 hunting 0.7 no hunting

0.3 hunting 1.0 no hunting

0.6 hunting

0.9 hunting

Pseudo code Parameter hornbillBenchmarkKm2 = integer Parameter initialisation INIT hornbillBenchmarkKm2 = Random(7,8) Variable hornbillPopulation = integer

22

Variable initialisation INIT hornbillPopulation = o Population // time influence not clear and how to link location CASE hornbillPopulation OF (primaryForest) AND (huntingHornbill = FALSE) AND (forestFragmented = FALSE): hornbillPopulation = horbillBenchmark; (primaryForest) AND (huntingHornbill = TRUE) AND (forestFragmented = FALSE): hornbillPopulation = 0.9*horbillBenchmark; (primaryForest) AND (huntingHornbill = FALSE) AND (forestFragmented = TRUE): hornbillPopulation = 0.7*horbillBenchmark; (primaryForest) AND (huntingHornbill = TRUE) AND (forestFragmented = TRUE): hornbillPopulation = 0.6*horbillBenchmark; (secondaryForest) AND (huntingHornbill = FALSE) AND (forestFragmented = FALSE): hornbillPopulation = 0.4*horbillBenchmark; (secondaryForest) AND (huntingHornbill = TRUE) AND (forestFragmented = FALSE): hornbillPopulation = 0.3*horbillBenchmark; (secondaryForest) AND (huntingHornbill = FALSE) AND (forestFragmented = TRUE): hornbillPopulation = 0.3*horbillBenchmark; (secondaryForest) AND (huntingHornbill = TRUE) AND (forestFragmented = TRUE): hornbillPopulation = 0.2*horbillBenchmark; ENDCASE

4.4

Model details for households

The design of decision making processes of households and their members is based on expert opinion, survey data and interview data (Bohensky et al. 2007; Smajgl et al. 2007). Each individual is a member of a household and each household has a home village. Based on GIS data (see Section 4.2) defining administrative boundaries, the districts (Kabupaten) are created as entities as are the subdistricts (Kecamatan) and villages (Desa). Then population data is applied in order to map the realistic number of individuals into each village. Based on further demographic data these individuals are grouped into households. Data on poverty is utilised, and income is accordingly distributed to create the realistic poverty indicators for each village. Within this step the survey data used to assign livelihoods. Then, based on the survey data and the household characteristics, typologies are assigned, which assist in the behavioural response to scenarios. The survey involved 3,000 households and aimed at identifying household typologies. The survey allowed the identification of 19 household types based on their conditions, current livelihood strategy and their values (Bohensky et al. 2007; Smajgl et al. 2007). The assumption made was that all households do the same thing for the same reason and would behave in the

23

same way. 540 in-depth interviews identified households that are core representatives for each of the household clusters and behavioural response rules were identified for each of the policy scenarios: • • • • • • • •

fuel price increase kerosene price increase electricity price increase depletion of forest stock depletion of fish stocks job opportunities in the coal mining industry job opportunities in logging companies job opportunities on oil palm plantations

Households are initialised from disaggregated household level census data and survey data. Individuals are assigned a livelihood, income and belong to a household, which is mapped into a village. Following this step the income is calculated for each household. Then the income is compared with the minimum required to cover the nutritional needs (defined by the poverty line of IDR41,500 per person per week) of all household members. If income is insufficient, household members look for a new livelihood. Livelihoods are available depending on availability and access to natural resources and depending on availability of wage labour. Each livelihood can be conditional on education, gender and age of a person and the season, which is specified by expert opinion. If a livelihood is available and conditions are met the household member gets a new livelihood assigned and income is updated. At the end of each week individuals that cross age thresholds between 40 and 60 years retire, which is dependant on their livelihood. For instance, for the mining sectors a retiring age of between 45 and 50 is assumed and the range for logging companies is assumed to be 50 to 55 years. At the beginning of the next time step, age and education are updated. At this stage young persons can be activated to take on work. The harvest of natural resources is again calculated, and so on. In case a policy scenario is activated, agents read before executing their livelihood their behavioural response, which is defined by interview data (Bohensky et al. 2007; Smajgl et al. 2007). The interview data determines which households reduce or increase harvest of natural resources by how much percent. This defines the direct changes for natural resource stocks and future availability. Pseudo code Parameters householdNumberMembers = Integer ageHouseholdMember01 = Integer … ageHouseholdMember11 = Integer ageStartEarning = Integer householdNumberEarners = SUM(householdNumberMember IF ageHouseholdMember > 14 AND ageHouseholdMember < 65) thresholdNutrition = integer wageLogCompanyLow1 = double wageLogCompanyLow2 = double

24

wageLogCompanyMedium = double wageLogCompanyHigh = double wageMineCompanyLow1 = double wageMineCompanyLow2 = double wageMineCompanyMedium = double wageMineCompanyHigh = double fishCatch = double fishPrice = double fishCosts = double timberQuantity = double timberPrice = double timberCosts = double fruitQuantity = double fruitPrice = double fruitCosts = double rubberQuantity = double rubberPrice = double rubberCosts = double rattanQuantity = double rattanPrice = double rattanCosts = double honeyQuantity = double honeyPrice = double honeyCosts = double wageMDFMill = double wageTransportation = double wageGovernmentMedium = double wageGovernmentHigh = double wageTradeMedium = double wageTradeHigh = double riceQuantity = double ricePrice = double riceCosts = double householdIncomeDay = double incomeMember01 = double … incomeMember11 = double Parameter initialisation householdNumberMembers = [Link to survey data for each household type] ageHouseholdMember01 = Random(30,50) ageHouseholdMember02 = ageHouseholdMember01 + Random(-8,8) ageHouseholdMember03 = IF householdNumberMembers >2 THEN IF 60 > ageHouseholdMember02 >= 45 THEN ageHouseholdMember03 = ageHouseholdMember02-Random(30,44) IF 45 > ageHouseholdMember02 >= 35 THEN ageHouseholdMember03 = ageHouseholdMember02-Random(15,30) IF 35 > ageHouseholdMember02 > 17 THEN ageHouseholdMember03 = ageHouseholdMember02-Random(16,34) ELSE ageHouseholdMember03 = 1 ageHouseholdMember04 = IF householdNumberMembers > 3 THEN ageHouseholdMember04 = ageHouseholdMember03 - Random(1,4) IF ageHouseholdMember04 4 THEN ageHouseholdMember05 = ageHouseholdMember04 - Random(1,4) IF ageHouseholdMember05 5 THEN ageHouseholdMember06 = ageHouseholdMember05 - Random(1,4) IF ageHouseholdMember06 6 THEN ageHouseholdMember07 = ageHouseholdMember06 - Random(1,4) IF ageHouseholdMember07 7 THEN ageHouseholdMember08 = ageHouseholdMember07 - Random(1,4) IF ageHouseholdMember08 8 THEN ageHouseholdMember09 = ageHouseholdMember08 - Random(1,4) IF ageHouseholdMember09 9 THEN ageHouseholdMember10 = ageHouseholdMember09 - Random(1,4) IF ageHouseholdMember10 10 THEN ageHouseholdMember11 = ageHouseholdMember10 - Random(1,4) IF ageHouseholdMember11 14 AND ageHouseholdMember < 65) INIT educationHouseholdMember01 = 0 INIT livelihoodHouseholdMember01 = .. INIT livelihoodHouseholdMember11 = INIT villageRattanHarvest = FALSE Household o Typology Read from livelihood.csv file o Location Read form poverty[kabupaten].xls file IF nutrition = TRUE THEN houesholdLocation = householdLocation ELSE householdLocation = Random(DesaID) o Number of household members Read form poverty[kabupaten].xls file o Age of household members ageHouseholdMember01 = ageHouseholdMember01 + increment ageHouseholdMember02 = ageHouseholdMember02 + increment IF householdNumberMembers > 2 ageHouseholdMember03 = ageHouseholdMember03 + increment IF householdNumberMembers > 3 ageHouseholdMember04 = ageHouseholdMember04 + increment IF householdNumberMembers > 4 ageHouseholdMember05 = ageHouseholdMember05 + increment

28

IF householdNumberMembers > 5 ageHouseholdMember06 = ageHouseholdMember06 + increment IF householdNumberMembers > 6 ageHouseholdMember07 = ageHouseholdMember07 + increment IF householdNumberMembers > 7 ageHouseholdMember08 = ageHouseholdMember08 + increment IF householdNumberMembers > 8 ageHouseholdMember09 = ageHouseholdMember09 + increment IF householdNumberMembers > 9 ageHouseholdMember10 = ageHouseholdMember10 + increment IF householdNumberMembers > 10 ageHouseholdMember11 = ageHouseholdMember11 + increment CALCULATE householdNumberEarners = SUM(householdNumberMember IF ageHouseholdMember > 14 AND ageHouseholdMember < 65) o Education of household members LOOP over all household members IF ageHouseholdMember >= ageStartEarning AND valueEducation = TRUE THEN educationMember01 = 1 IF ageHouseholdMember >17 AND educationMember01 = 1 AND householdIncomeDay > 1.3 * thresholdNutrition THEN educationMember01 = 2 IF ageHouseholdMember >21 AND educationMember01 = 2 AND householdIncomeDay > 1.8 * thresholdNutrition THEN educationMember01 = 3 ELSE educationMember01 = educationMember01 End LOOP o Catch and harvest fishCatch = Random(0.8;1)*fishStock/numberFishingHouseholds IF landuse.desa = offshoreFishing THEN fishCatch = fishCatch * licenseRestriction ENDIF honeyQuantity = Random(0.8;1)* honeyProduction/numberHoneyHouseholds rattanQuantity = rattanProduction/(5*25) // kg per person with 5 cutters and 25 working days in the cutting month rubberQuantity = rubberProduction deerQuantity = Random(0.4;0.7)*deerPopulation o Wellbeing as alternative poverty measure to household income Variable Wellbeing.household = Double; // Read the household values for natural resources and the household income. // Values are defined over 8 dimensions [ Dimension = String]: income, nutrition, health, // cultural and spiritual, recreational, security, social relation, and determine future // and for 13 natural resources [NaturalResources = String]: rattan, rubber, timber, kijan, fish, // dolphin, orang-utan, monkey, hornbill, bird nest, wild pig, fruit trees, and honey

29

ValueNaturalResourceDimension.household = Step 1: Values Variable ValueNaturalResource.household = integer ValueNaturalResource.household = SUM(Dimension, ValueNaturalResourceDimension.household) Parameter

Alpha.NaturalResource = Double Beta.NaturalResource = Double ScaleNaturalResources = Double // assumed alpha values for rattan, rubber, timber, deer, fish, fruit trees: 100 // assumed alpha values for dolphin and hornbill: 1.1 // assumed beta values for rattan, rubber, timber, deer, fish, fruit trees: 5 // assumed beta values for dolphin and hornbill: 0.2 ScaleNaturalResources = 50/9 Variable AmountNaturalResource = Double // Read Values for AmountNaturalResource from model results. For timber it is the amount in // cubic meter of standing forest. For rattan the amount of existing rattan. Etc. IF (NaturalResource = Dolphin) THEN WellbeingNaturalResource = ScaleNaturalResources – (ScaleNaturalResources / (((AmountNaturalResource / Alpha.NaturalResource)^(1+Beta.NaturalResource – ScaleNaturalResources – (ScaleNaturalResources / (((AmountNaturalResource / Alpha.NaturalResource*ScaleNaturalResources))^(1+Beta.NaturalResource))) + 1)))) + 1)) ELSE WellbeingNaturalResource = ScaleNaturalResources – (ScaleNaturalResources / ((AmountNaturalResource / Alpha.NaturalResource)^(1+Beta.NaturalResource)) + 1) ENDIF // Step 2: Income // Translate Income into wellbeing assuming a logarithmic relationship Parameter Rho = 1.26 Variable WellbeingIncome.household = Double; WellbeingIncome.household =IF((householdIncome * 52)^(1-Rho)-1)/(1-Rho) //Step 3: Coping Capacity // To capture the resilience of households and its dynamic aspects we introduce a variable for coping capacity. Coping capacity consists of three elements: Assets, education, and awareness. Variable

Assets.household = Double Education.household = Double Awareness.household = Double

Read from livelihood.csv the following - Motorbike [= Integer]; column E - boat engine [= Integer] ; column O - refrigerator [= Integer] ; column M - large TV [= Integer] ; column H - small TV [= Integer] ; column G - other assets [= Boolean; Yes = 1; No = 0]

30

Assets.household = Motorbike.household + boatEngine.household + refrigerator.household + largeTV.household + smallTV.household + otherAssets.household // Read from livelihood.csv - Education for household [column AT] - Computer [column I] // Read from adata.csv - Frequency of use [column HB] WellbeingEducation.household = Integer Education.household = Integer Computer.household= Integer FrequencyUse.household = Integer EducationFrequency = Integer IF FrequencyUse.household = 1 THEN EducationFrequency.household = 4 IF FrequencyUse.household = 2 THEN EducationFrequency.household = 3 IF FrequencyUse.household = 3 THEN EducationFrequency.household = 2 ELSE EducationFrequency.household = 1 ENDIF WellbeingEducation.household = Education.household + Computer.household + EducationFrequency.household EducationMaxPopulation = MAX(households, WellbeingEducation.household) EducationMinPopulation = MIN(households, WellbeingEducation.household) CopingEducation.household = ((WellbeingEducation.household – EducationMinPopulation) * 100)/ (EducationMaxPopulation – EducationMinPopulation)

// Read from survey data [adata.csv] column - Observed-in.lifetime [=Boolean] IF Observed-in.lifetime = YES THEN 1 ELSE Observed-in.lifetime 0 ENDIF - Level.risk[=Integer] - Action.occurring[=Boolean] IF Action.occurring = YES THEN Action.occurring = 1 ELSE Action.occurring = 0 ENDIF - Action.future[=Boolean] IF Action.future = YES THEN Action.future = 1 ELSE Action.future = 0 ENDIF - Behaviour[=Boolean] IF Behaviour = YES THEN Behaviour = 1 ELSE Behaviour = 0 ENDIF Awareness.household = Integer

31

Awareness.household = Observed-in.lifetime + Level.risk + Action.occurring + Action.future + Behaviour Awareness MaxPopulation = MAX(household, Awareness.household) Awareness MinPopulation = MIN(household, Awareness.household) CopingAwareness.household = ((Awareness.household – AwarenessMinPopulation) * 100)/ (AwarenessMaxPopulation – AwarenessMinPopulation) CopingCapacity.household = (CopingAssets.household * CopingEducation.household * CopingAwareness.household) / 3 MaxCopingPopulation = MAX(household, CopingCapacity.household) MinCopingPopulation = MIN(household, CopingCapacity.household) // Now it gets normalised to achieve a value range between 0.5 and 1.5 CopingCapacity.household = 1.5 – 1 * (MaxCopingPopulation - CopingCapacity.household) / (MaxCopingPopulation – MinCopingPopulation) // Step 4: Total Wellbeing Wellbeing.household = CopingCapacity.household * (WellbeingNaturalResource.household + WellbeingIncome.household) o

Adjust policy scenarios

// Fuel subsidies int x //behavioural response 1..4 int y //household type 1..19 int z //livelihood 1..4 int implementPolicyCount stringarray livelihood[timber,rattan,rubber,fish] stringarray householdtype[Samarinda1, Samarinda2, KuKar1, KuKar2, KuKar3, KuKar4, PPU1, PPU2, PPU3, Paser1, Paser2, Paser3, Paser4, Balikpapan1, Balikpapan2, Balikpapan3, Balikpapan4, KuBar1, KuBar2] If (policyScenario.fuelPriceIncrease >0) then for (z=1 to 4) do for (x=1 to 4) do for (y=1 to 19) do if (fuelSub[x,y,z] > 0) then Random households implementPolicyCount = 0; for ((i=1 to households.total) OR (implementPolicyCount > (household.total * fuelSub[x,y,z] / 100))) do for (j=1 to households[i].members.total) do if (households[i].members[j].livelihood =livelihood[z]) then if (households[i].members[j].householdType = householdType[y]) then implementPolicyCount = implementPolicyCount + 1; if (x=1) then households[i].members[j].livelihood = 0 // stop endif if (x=2) then households[i].members[j].livelihood = households[i].members[j].livelihood *

32

NORMAL(0.25,0.75) // half endif if (x=3) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.25,1.75) // one and a half endif if (x=4) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.75,2.25) // double endif endif endif endfor endfor endif endfor endfor endfor endif // Kerosene subsidies If (policyScenario.keroseneSubsidy == True) then for (z=1 to 4) do for (x=1 to 4) do for (y=1 to 19) do if (keroseneSub[x,y,z] > 0) then Random households implementPolicyCount = 0; for ((i=1 to households.total) OR (implementPolicyCount > (household.total * keroseneSub[x,y,z] / 100))) do for (j=1 to households[i].members.total) do if (households[i].members[j].livelihood =livelihood[z]) then if (households[i].members[j].householdType = householdType[y]) then implementPolicyCount =implementPolicyCount + 1; if (x=1) then households[i].members[j].livelihood = 0 // stop endif if (x=2) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(0.25,0.75) // half endif if (x=3) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.25,1.75) // one and a half endif if (x=4) then households[i].members[j].livelihood =

33

households[i].members[j].livelihood * NORMAL(1.75,2.25) // double endif endif endif endfor endfor endif endfor endfor endfor endif

// Electricity price increase If (policyScenario. electricityPriceIncrease == True) then for (z=1 to 4) do for (x=1 to 4) do for (y=1 to 19) do if (electricityPriceInc[x,y,z] > 0) then Random households implementPolicyCount = 0; for ((i=1 to households.total) OR (implementPolicyCount > (household.total * electricityPriceInc [x,y,z] / 100))) do for (j=1 to households[i].members.total) do if (households[i].members[j].livelihood =livelihood[z]) then if (households[i].members[j].householdType = householdType[y]) then implementPolicyCount = implementPolicyCount + 1; if (x=1) then households[i].members[j].livelihood = 0 // stop endif if (x=2) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(0.25,0.75) // half endif if (x=3) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.25,1.75) // one and a half endif if (x=4) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.75,2.25) // double endif endif endif endfor endfor endif

34

endfor endfor endfor endif

// New logging concessions If (policyScenario.numberNewHPHs == True) then for (z=1 to 4) do for (x=1 to 4) do for (y=1 to 19) do if (newLoggingConc [x,y,z] > 0) then Random households implementPolicyCount = 0; for ((i=1 to households.total) OR (implementPolicyCount > (household.total * newLoggingConc [x,y,z] / 100))) do for (j=1 to households[i].members.total) do if (households[i].members[j].livelihood =livelihood[z]) then if (households[i].members[j].householdType = householdType[y]) then implementPolicyCount = implementPolicyCount + 1; if (x=1) then households[i].members[j].livelihood = 0 // stop endif if (x=2) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(0.25,0.75) // half endif if (x=3) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.25,1.75) // one and a half endif if (x=4) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.75,2.25) // double endif endif endif endfor endfor endif endfor endfor endfor endif

// New mining concessions

35

//NOTE newMiningConc array is loaded with data most likely prior to this in a global init If (policyScenario.numberNewCoalMiness == True) then for (z=1 to 4) do for (x=1 to 4) do for (y=1 to 19) do if (newMiningConc [x,y,z] > 0) then Random households implementPolicyCount = 0; for ((i=1 to households.total) OR (implementPolicyCount > (household.total * newMiningConc [x,y,z] / 100))) do for (j=1 to households[i].members.total) do if (households[i].members[j].livelihood =livelihood[z]) then if (households[i].members[j].householdType = householdType[y]) then implementPolicyCount = implementPolicyCount + 1; if (x=1) then households[i].members[j].livelihood = 0 // stop endif if (x=2) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(0.25,0.75) // half endif if (x=3) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.25,1.75) // one and a half endif if (x=4) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.75,2.25) // double endif endif endif endfor endfor endif endfor endfor endfor endif

// Fish stock depletion //NOTE fishDepletion array is loaded with data most likely prior to this in a global init If (fishStock < fishTreshold) then for (z=1 to 4) do for (x=1 to 4) do for (y=1 to 19) do

36

// We do this for each of the policy scenarios...

if (fishDepletion [x,y,z] > 0) then Random households implementPolicyCount = 0; for ((i=1 to households.total) OR (implementPolicyCount > (household.total * fishDepletion[x,y,z] / 100))) do for (j=1 to households[i].members.total) do if (households[i].members[j].livelihood =livelihood[z]) then if (households[i].members[j].householdType = householdType[y]) then implementPolicyCount = implementPolicyCount + 1; if (x=1) then households[i].members[j].livelihood = 0 // stop endif if (x=2) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(0.25,0.75) // half endif if (x=3) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.25,1.75) // one and a half endif if (x=4) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.75,2.25) // double endif endif endif endfor endfor endif endfor endfor endfor endif // Forest depletion If (timberStockm3Ha < timberTreshold) then for (z=1 to 4) do for (x=1 to 4) do for (y=1 to 19) do if (timberDepletion[x,y,z] > 0) then/ Random households implementPolicyCount = 0; for ((i=1 to households.total) OR (implementPolicyCount > (household.total * timberDepletion[x,y,z] / 100))) do for (j=1 to households[i].members.total) do if (households[i].members[j].livelihood =livelihood[z]) then if (households[i].members[j].householdType = householdType[y]) then implementPolicyCount =

37

implementPolicyCount + 1; if (x=1) then households[i].members[j].livelihood = 0 // stop endif if (x=2) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(0.25,0.75) // half endif if (x=3) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.25,1.75) // one and a half endif if (x=4) then households[i].members[j].livelihood = households[i].members[j].livelihood * NORMAL(1.75,2.25) // double endif endif endif endfor endfor endif endfor endfor endfor endif

o

Livelihood

LOOP over all household members IF livelihoodMember01 = retired THEN EXIT LOOP IF livelihoodMember01 = none THEN EXIT LOOP IF livelihoodMember01 = logCompany THEN timeMember01LogCompany = timeLogCompany IF livelihoodMember01 = mineCompany THEN timeMember01MineCompany = timeMineCompany IF livelihoodMember01 = fruitTrees THEN timeMember01FruitTrees = timeFruitTrees IF livelihoodMember01 = fishing THEN timeMember01Fishing = timeFishing IF livelihoodMember01 = timber THEN timeMember01Timber= timeTimber IF livelihoodMember01 = rubber THEN timeMember01Rubber = timeRubber IF livelihoodMember01 = rattan THEN timeMember01Rattan = timeRattan IF livelihoodMember01 = honey THEN timeMember01Honey = timeHoney IF livelihoodMember01 = transportation THEN timeMember01Transportation= timeTransportation

38

IF livelihoodMember01 = MDFMill THEN timeMember01MDFMill = timeMDFMill IF livelihoodMember01 = Government THEN timeMember01Government = timeGovernment IF livelihoodMember01 = Trade THEN timeMember01Trade = timeTrade IF livelihoodMember01 = Rice THEN timeMember01Rice = timeRice IF (timeMember01LogCompany + timeMember01MineCompany + timeMember01FruitTrees + timeMember01Fishing + timeMember01Timber + timeMember01Rubber + timeMember01Rattan + timeMember01Honey + timeMember01Government + timeMember01Transport + timeMember01Trade + timeMember01Rice + timeMember01MDFMill) >= 12 THEN newLivelihoodMember01 = FALSE ELSE newLivelihoodMember01 = TRUE End LOOP // we assume two reasons for people to START a new livelihood // 1. poverty forced income generation // 2. age triggered entrance into work force // first the poverty check LOOP over all household members IF householdIncomeDay < thresholdNutrition AND IF newLivelihoodMember01 = TRUE THEN searchLivelihoodMember01 = TRUE End LOOP LOOP over all household members IF ageHouseholdMember03 = ageStartEarning AND valueEducation = FALSE THEN searchLivelihood03 = TRUE IF ageHouseholdMember03 > 17 AND educationMember03 = 1 THEN searchLivelihood03 = TRUE IF ageHouseholdMember03 > 21 AND educationMember03 = 2 THEN searchLivelihood03 = TRUE IF ageHouseholdMember03 > 25 AND educationMember03 = 3 THEN searchLivelihood03 = TRUE ELSE searchLivelihood03 = FALSE End Loop // Here now the allocation of new livelihoods // In this Loop the livelihood allocation is extremely simplistic, // we need further refinements regarding what parents do,

39

// what labour markets say etc. LOOP over all household members IF searchLivelihood01 = TRUE AND educationMember01 = 0 AND (20