Tests of GMSE 0.4.0.13 vs 0.5.0.0

I here aim to run a number of simulations, using gmse_apply(), varying both user budget and user landownership. I specifically compare the output of simulations run using the current CRAN version of GMSE (0.4.0.13) and the upcoming GMSE 0.5.0.0.

Scenario summaries

I compare five scenarios, summarised in the Table below.

Scenario Land distribution User budget Manager budget
Scenario 1 Equal Constant = User budget
Scenario 2 Equal ~ yield ~ User budget
Scenario 3 \(\sigma_{land}\) = 0.1 ~ yield ~ User budget
Scenario 4 \(\sigma_{land}\) = 0.3 ~ yield ~ User budget
Scenario 5 \(\sigma_{land}\) = 0.9 ~ yield ~ User budget

The first scenario replicates the “default” GMSE parameterisation, where land is distributed evenly among stakeholders, and both user and manager budget are constant and equal. In the second scenario, land distribution remains equal, but the user budget in each time step is a function of yield (set through custom functions set_budget() and yield_to_return() called in each time step, and controlled by extra parameters yield_type and yield_value), and manager budget in turn is a function of users’ budgets (equal to a the sum of a fixed proportion of user budgets, set by custom function set_man_budget() and controlled by parameter man_bud_prop). In scenarios 3-5, user and manager budgets are calculated in the same way as scenario 2, but in addition land ownership varies between users, with variability increased from scenario 3-5. Variable land distribution is achieved by custom function distribute_land_simplified() which is called once per simulation set (i.e. land distribution is constant throughout n_years); variability in land ownership is controlled by parameter land_var.

In the output below, I have repeated the five scenarios three times. The first and second set are run using the current GMSE version (0.4.0.13). The first set uses the default GMSE resource movement, i.e. randomly across the landscape. In the second set, I have implemented an extra function which controls resource movement in between gmse_apply() calls (details below, but in summary, in each time step, each resource moves to a cell with maximum yield within its movement range). The third and final set of simulations uses the updated GMSE 0.5.0.0, using the newly available parameters consume_surv, consume_repr and times_feeding to link resource reproduction and survival to consumption (setting res_birth_type = 0 and res_death_type = 0).

As plotted below, each scenario consists of 20 replicates of 100 time steps, with 12 stakeholders, a starting resource population of 1000 individuals and a manager target population size of 1000 resource individuals. The simulated landscape consists of 100100 cells, and users can kill resources, scare resources, or tend their crops.

Other parameters used across all scenarios are listed in Table 2.

(1) GMSE 0.4.0.13 & default resource movement

The plots below summarise scenario results in terms of resource population trajectories (left hand column, in red), mean user yield across simulations (middle column, in green), and mean user budget (right hand column, in blue).

Figure 1

Figure 1

(2) GMSE 0.4.0.13 & resource movement according to yield

This set of scenarios replicates the ones above but “turns off” default resource movement, instead using a custom function which moves each resource unit to a cell with maximum yield within its movement range, in each time step. As such, resource individuals will move to where yield (and thus budget in Scenarios 2-5) is highest. This is achieved using custom function res_move_adjusted() which is called in between gmse_apply() calls, which in turn calls land_point_buffer(). Note that all other resource movement (as used in GMSE by default) is turned off when this function is used, i.e. res_move_type = 1. All other parameters are for the set of scenarios above.

Figure 2

Figure 2

(3) GMSE 0.5.0.0: with resource consumption/feeding parameters set

The next set of scenarios replicates the same set up but using GMSE release candidate 0.5.0.0. This release has new movement parameters built in, linking resource reproduction and survival to consumption. Resource movement itself remains random, so in that sense, if the end result on population dynamics is the same, we expect comparable results to Section 1 above. New parameters are set as follows: consume_surv = 2 , consume_repr = 3 and times_feeding = 6, with res_birth_type = 0 and res_death_type = 0.

Figure 3

Figure 3

From the perspective of custom gmse_apply() scenario runs in themselves completing as expected, with the new parameters set, the above suggests there are no apparent issues with 0.5.0.0. What is notable, is that even the “default” scenario produces quite different results with resource survival/reproduction tied to consumption: population trajectories appear to be less volatile, producing an overall more stable population level close to the manager target. In contrast, with added stakeholder variability in terms of budget (Scenario 2) and land ownership (Scenarios 3-5), with the currently chosen values for consume_surv, consume_repr, and times_feeding, it appears that populations are extremely fast-growing, quickly levelling to a maximum, with user yield and budget approaching zero. This may simply be a consequences of the consumption/feeding parameters chosen, and a key comparsion here would be with a further set of scenarios setting these to the defaults and implementing res_birth_type and res_death_type; this should produce the same patterns as those shown in Section 1.

(4) GMSE 0.5.0.0: resource/consumption parameters at defaults

The last set of scenarios again uses the new candidate version of GMSE, but this time with the consumption parameters kept a at the defaults and with res_birth_type = 2 and res_death_type = 3. As expected, the resulting patterns are comparable to those in Section 1, indicating that when ignoring the new resource consumption parameters, GMSE 0.4.0.13 and GMSE 0.5.0.0 appear to produce the same results.

Figure 4

Figure 4

Common parameters across simulations

Parameter Value
get_res Full
land_dim_1 100
land_dim_2 100
land_ownership TRUE
res_movement 20
res_move_type 1
tend_crops TRUE
tend_crop_yld 0.4
scaring TRUE
minimum_cost 10
remove_pr 0.16
res_death_typea 3
lambdaa 0.25
res_death_Ka 2000
RESOURCE_ini 1000
manage_target 1000
manager_budgetb 1000
user_budgetb 1000
public_land 0
stakeholders 12
res_consume 0.4
observe_type 0
res_move_obs TRUE
agent_view 20
times_observe 5
agent_move 100
converge_crit 0.1
ga_mingen 40
n_years 100
res_move_to_yieldc FALSE
man_bud_propd 0.1
yield_typee linear
yield_valuef 0.875
a Population parameters overridden when resource consumption parameters are set (Section 3);
b User and manager budgets overridden in Scenarios 2-5, where user budget is a function of yield, and manager budget is a function of user budgets;
c Parameter controlling whether resource movement takes places according to yield, only used in Scenarios presented in Section 2
d Parameter controlling the size of the managers’ budget relative to user budgets; only used in Scenarios 2-5. Manager budget in each time step equals the sum of man_bud_prop * each user’s budget.
e Parameter controlling the type of relationship between a user’s yield and their budget in each time step; only applies in Scenarios 2-5. For the simualtions presented here, always a simple linear relationship.
f Parameter controlling the strength of the relationship between a user’s budget and their yield. A value of 0.8 would indicate that budget = 0.8*yield.