MIMOSA separates the calculation of yearly welfare1 from the final optimisation goal. There are three ways to calculate welfare: welfare-loss-minimising, cost-minimising, and a general inequality-aversion setting that connects the first two methods. The objective can then either maximise discounted welfare or minimise discounted global costs.
The welfare module can be chosen using the parameter welfare module.
In welfare-loss-minimising setting, the utility is first calculated regionally
from the per capita consumption. These regional utilities are then summed up to
get the global welfare. This means that costs are weighted differently in different
regions, depending on the regional per capita consumption. As a consequence, this
setting leads to differentiated carbon prices across regions: poorer regions typically
will have lower carbon prices than richer regions.
Difference with cost-minimising setting
In the cost-minimising setting, the regional per capita consumption values
are first added up to a global per capita consumption. The utility function
is only then applied to this global per capita consumption to obtain global welfare.
Equations
First, calculate the regional utility using the regional consumption \(C_{t,r}\) and population \(L_{t,r}\):
$$ U_{t,r} = \text{utility}(C_{t,r}, L_{t,r}) $$
Second, the global welfare is calculated as the sum of the regional utility values weighted by population:
$$ W_t = \sum_r L_{t,r} \cdot U_{t,r} $$
Utility function
The utility function is a concave function of per-capita consumption, given by:
where \(C\) is the consumption and \(L\) the population of a region. \(\text{elasmu}\) is the elasticity of marginal utility. A value of \(\text{elasmu}\) close to 1 approaches a logarithmic utility function:
Source code in mimosa/components/welfare/utility_fct.py
defcalc_utility(consumption,population,elasmu):""" The utility function is a concave function of per-capita consumption, given by: $$ \\text{utility}(C, L) = \\left( \\left(\\frac{C}{L}\\right)^{1 - \\text{elasmu}} - 1 \\right) \\cdot \\frac{1}{1 - \\text{elasmu}}$$ where $C$ is the consumption and $L$ the population of a region. $\\text{elasmu}$ is the elasticity of marginal utility. A value of $\\text{elasmu}$ close to 1 approaches a logarithmic utility function: ``` plotly {"file_path": "./assets/plots/utility_fct.json"} ``` """# Note that the `soft_min` function is used to avoid division by zeroreturn(soft_min(consumption/population)**(1-elasmu)-1)/(1-elasmu)
defget_constraints(m:AbstractModel,context:ModelContext)->Sequence[GeneralConstraint]:""" <h3>Welfare-loss-minimising setting</h3> In welfare-loss-minimising setting, the utility is first calculated regionally from the per capita consumption. These regional utilities are then summed up to get the global welfare. This means that costs are weighted differently in different regions, depending on the regional per capita consumption. As a consequence, this setting leads to differentiated carbon prices across regions: poorer regions typically will have lower carbon prices than richer regions. ???+ info "Difference with cost-minimising setting" In the cost-minimising setting, the regional per capita consumption values are first added up to a global per capita consumption. The utility function is only then applied to this global per capita consumption to obtain global welfare. <h3>Equations</h3> First, calculate the regional utility using the regional consumption $C_{t,r}$ and population $L_{t,r}$: $$ U_{t,r} = \\text{utility}(C_{t,r}, L_{t,r}) $$ Second, the global welfare is calculated as the sum of the regional utility values weighted by population: $$ W_t = \\sum_r L_{t,r} \\cdot U_{t,r} $$ <h3>Utility function</h3> :::mimosa.components.welfare.utility_fct.calc_utility <h3>Parameters defined in this module</h3> - params["economics"]["elasmu"]: Elasticity of marginal utility. Type: float. Default: 1.001. Min: 0.1. Max: 10. """constraints=[]# Parametersm.elasmu=Param(doc="::economics.elasmu")m.utility=Var(m.t,m.regions,initialize=0.1)m.global_welfare=Var(m.t)constraints.extend([RegionalEquation(m.utility,lambdam,t,r:calc_utility(m.consumption[t,r],m.population[t,r],m.elasmu),),GlobalEquation(m.global_welfare,lambdam,t:sum(m.population[t,r]*m.utility[t,r]forrinm.regions),),])returnconstraints
In cost-minimising setting, the global per-capita consumption is first calculated before
applying the utility function. This means that costs are weighted equally across regions,
regardless of the regional per capita consumption. As a consequence, this setting leads to
uniform carbon prices across regions. This is quantitatively similar to using Negishi weights.
Difference with welfare-loss-minimising setting
In the welfare-loss-minimising setting, the utility function is applied to the regional
per capita consumption values, and the regional utilities are then summed up to get the
global welfare. This means that costs (from mitigation or damages) have a larger weight in
the final welfare in poorer regions than in richer regions.
Equations
First, calculate the global consumption \(C_{t,r}\) and population \(L_{t,r}\):
where \(C\) is the consumption and \(L\) the population of a region. \(\text{elasmu}\) is the elasticity of marginal utility. A value of \(\text{elasmu}\) close to 1 approaches a logarithmic utility function:
Source code in mimosa/components/welfare/utility_fct.py
defcalc_utility(consumption,population,elasmu):""" The utility function is a concave function of per-capita consumption, given by: $$ \\text{utility}(C, L) = \\left( \\left(\\frac{C}{L}\\right)^{1 - \\text{elasmu}} - 1 \\right) \\cdot \\frac{1}{1 - \\text{elasmu}}$$ where $C$ is the consumption and $L$ the population of a region. $\\text{elasmu}$ is the elasticity of marginal utility. A value of $\\text{elasmu}$ close to 1 approaches a logarithmic utility function: ``` plotly {"file_path": "./assets/plots/utility_fct.json"} ``` """# Note that the `soft_min` function is used to avoid division by zeroreturn(soft_min(consumption/population)**(1-elasmu)-1)/(1-elasmu)
defget_constraints(m:AbstractModel,context:ModelContext)->Sequence[GeneralConstraint]:""" <h3>Cost-minimising setting</h3> In cost-minimising setting, the global per-capita consumption is first calculated before applying the utility function. This means that costs are weighted equally across regions, regardless of the regional per capita consumption. As a consequence, this setting leads to uniform carbon prices across regions. This is quantitatively similar to using Negishi weights. ???+ info "Difference with welfare-loss-minimising setting" In the welfare-loss-minimising setting, the utility function is applied to the regional per capita consumption values, and the regional utilities are then summed up to get the global welfare. This means that costs (from mitigation or damages) have a larger weight in the final welfare in poorer regions than in richer regions. <h3>Equations</h3> First, calculate the global consumption $C_{t,r}$ and population $L_{t,r}$: $$ \\widehat{C}_{t} = \\sum_r C_{t,r}, $$ $$ \\widehat{L}_{t} = \\sum_r L_{t,r}. $$ These are used to calculate the global utility: $$ W_t = \\widehat{L}_t \\cdot \\text{utility}\\left( \\widehat{C}_{t}, \\widehat{L}_{t} \\right) $$ <h3>Utility function</h3> :::mimosa.components.welfare.utility_fct.calc_utility <h3>Parameters defined in this module</h3> - params["economics"]["elasmu"]: Elasticity of marginal utility. Type: float. Default: 1.001. Min: 0.1. Max: 10. """constraints=[]# Parametersm.elasmu=Param(doc="::economics.elasmu")m.utility=Var(m.t,m.regions,initialize=10)m.global_welfare=Var(m.t)constraints.extend([RegionalEquation(m.utility,lambdam,t,r:m.consumption[t,r]/m.population[t,r]),GlobalEquation(m.global_welfare,lambdam,t:m.global_population[t]*calc_utility(sum(m.consumption[t,r]forrinm.regions),sum(m.population[t,r]forrinm.regions),m.elasmu,),),])returnconstraints
This setting makes the weight given to inequality between regions explicit. Let \(C_{t,r}\)
be regional consumption, \(L_{t,r}\) population, \(\eta\) the inequality-aversion parameter
(inequal_aversion), and \(\mu\) the elasticity of marginal utility (elasmu). MIMOSA first
calculates:
A higher \(\eta\) gives relatively more weight to consumption changes in poorer regions.
Setting \(\eta=0\) gives the same policy weighting as the cost-minimising setting, while
setting \(\eta=\mu\) gives the same policy weighting as the welfare-loss-minimising
setting. The welfare levels can differ by terms that do not depend on the policy controls.
defget_constraints(m:AbstractModel,context:ModelContext)->Sequence[GeneralConstraint]:""" <h3>General inequality aversion</h3> This setting makes the weight given to inequality between regions explicit. Let $C_{t,r}$ be regional consumption, $L_{t,r}$ population, $\\eta$ the inequality-aversion parameter (`inequal_aversion`), and $\\mu$ the elasticity of marginal utility (`elasmu`). MIMOSA first calculates: $$ U_{t,r} = L_{t,r} \\left(\\frac{C_{t,r}}{L_{t,r}}\\right)^{1-\\eta}. $$ The regional values are then aggregated into yearly welfare: $$ W_t = \\frac{L_t}{1-\\mu} \\left(\\frac{\\sum_r U_{t,r}}{L_t}\\right)^{ \\frac{1-\\mu}{1-\\eta}}. $$ A higher $\\eta$ gives relatively more weight to consumption changes in poorer regions. Setting $\\eta=0$ gives the same policy weighting as the cost-minimising setting, while setting $\\eta=\\mu$ gives the same policy weighting as the welfare-loss-minimising setting. The welfare levels can differ by terms that do not depend on the policy controls. <h3>Parameters defined in this module</h3> - params["economics"]["elasmu"]: Elasticity of marginal utility. Type: float. Default: 1.001. Min: 0.1. Max: 10. - param::inequal_aversion """constraints=[]# Parametersm.elasmu=Param(doc="::economics.elasmu")m.inequal_aversion=Param(doc="::economics.inequal_aversion")m.utility=Var(m.t,m.regions,initialize=10)m.global_welfare=Var(m.t)constraints.extend([RegionalEquation(m.utility,lambdam,t,r:calc_regional_utility(m.consumption[t,r],m.population[t,r],m.inequal_aversion),),GlobalEquation(m.global_welfare,lambdam,t:sum(m.population[t,r]forrinm.regions)*calc_global_utility(sum(m.utility[t,r]forrinm.regions),m.global_population[t],m.elasmu,m.inequal_aversion,),),])returnconstraints
Optimisation goal and discounting
The welfare module determines how regional consumption is aggregated into global_welfare. The separate objective module determines what MIMOSA optimises:
and the final NPV is minimised. The welfare variables are still calculated in this case, but they do not determine the objective.
PRTP is the pure rate of time preference. A higher value gives less weight to outcomes further in the future. The factor \(\Delta t\) accounts for the number of years represented by each timestep.
The main result variables are:
Variable
Meaning
utility
Regional utility or consumption measure, depending on the selected welfare module
global_welfare
Welfare aggregated across regions for one timestep
NPV
Discounted welfare under the utility objective, or discounted costs under the global-cost objective
While the terms welfare and utility can be used interchangeably, we typically refer to utility as the regional utility, and welfare as the global population-weighted utility. ↩