example_vensim_energy.py

  1"""
  2Created on 27 Jan 2014
  3
  4@author: jhkwakkel
  5"""
  6
  7from ema_workbench import (
  8    RealParameter,
  9    TimeSeriesOutcome,
 10    ema_logging,
 11    MultiprocessingEvaluator,
 12    ScalarOutcome,
 13    perform_experiments,
 14    CategoricalParameter,
 15    save_results,
 16    Policy,
 17)
 18from ema_workbench.connectors.vensim import VensimModel
 19from ema_workbench.em_framework.evaluators import SequentialEvaluator
 20
 21
 22def get_energy_model():
 23    model = VensimModel(
 24        "energyTransition",
 25        wd="./models",
 26        model_file="RB_V25_ets_1_policy_modified_adaptive_extended_outcomes.vpm",
 27    )
 28
 29    model.outcomes = [
 30        TimeSeriesOutcome(
 31            "cumulative_carbon_emissions", variable_name="cumulative carbon emissions"
 32        ),
 33        TimeSeriesOutcome(
 34            "carbon_emissions_reduction_fraction",
 35            variable_name="carbon emissions reduction fraction",
 36        ),
 37        TimeSeriesOutcome("fraction_renewables", variable_name="fraction renewables"),
 38        TimeSeriesOutcome("average_total_costs", variable_name="average total costs"),
 39        TimeSeriesOutcome("total_costs_of_electricity", variable_name="total costs of electricity"),
 40    ]
 41
 42    model.uncertainties = [
 43        RealParameter(
 44            "demand_fuel_price_elasticity_factor",
 45            0,
 46            0.5,
 47            variable_name="demand fuel price elasticity factor",
 48        ),
 49        RealParameter(
 50            "economic_lifetime_biomass", 30, 50, variable_name="economic lifetime biomass"
 51        ),
 52        RealParameter("economic_lifetime_coal", 30, 50, variable_name="economic lifetime coal"),
 53        RealParameter("economic_lifetime_gas", 25, 40, variable_name="economic lifetime gas"),
 54        RealParameter("economic_lifetime_igcc", 30, 50, variable_name="economic lifetime igcc"),
 55        RealParameter("economic_lifetime_ngcc", 25, 40, variable_name="economic lifetime ngcc"),
 56        RealParameter(
 57            "economic_lifetime_nuclear", 50, 70, variable_name="economic lifetime nuclear"
 58        ),
 59        RealParameter("economic_lifetime_pv", 20, 30, variable_name="economic lifetime pv"),
 60        RealParameter("economic_lifetime_wind", 20, 30, variable_name="economic lifetime wind"),
 61        RealParameter("economic_lifetime_hydro", 50, 70, variable_name="economic lifetime hydro"),
 62        RealParameter(
 63            "uncertainty_initial_gross_fuel_costs",
 64            0.5,
 65            1.5,
 66            variable_name="uncertainty initial gross fuel costs",
 67        ),
 68        RealParameter(
 69            "investment_proportionality_constant",
 70            0.5,
 71            4,
 72            variable_name="investment proportionality constant",
 73        ),
 74        RealParameter(
 75            "investors_desired_excess_capacity_investment",
 76            0.2,
 77            2,
 78            variable_name="investors desired excess capacity investment",
 79        ),
 80        RealParameter(
 81            "price_demand_elasticity_factor",
 82            -0.07,
 83            -0.001,
 84            variable_name="price demand elasticity factor",
 85        ),
 86        RealParameter(
 87            "price_volatility_global_resource_markets",
 88            0.1,
 89            0.2,
 90            variable_name="price volatility global resource markets",
 91        ),
 92        RealParameter("progress_ratio_biomass", 0.85, 1, variable_name="progress ratio biomass"),
 93        RealParameter("progress_ratio_coal", 0.9, 1.05, variable_name="progress ratio coal"),
 94        RealParameter("progress_ratio_gas", 0.85, 1, variable_name="progress ratio gas"),
 95        RealParameter("progress_ratio_igcc", 0.9, 1.05, variable_name="progress ratio igcc"),
 96        RealParameter("progress_ratio_ngcc", 0.85, 1, variable_name="progress ratio ngcc"),
 97        RealParameter("progress_ratio_nuclear", 0.9, 1.05, variable_name="progress ratio nuclear"),
 98        RealParameter("progress_ratio_pv", 0.75, 0.9, variable_name="progress ratio pv"),
 99        RealParameter("progress_ratio_wind", 0.85, 1, variable_name="progress ratio wind"),
100        RealParameter("progress_ratio_hydro", 0.9, 1.05, variable_name="progress ratio hydro"),
101        RealParameter(
102            "starting_construction_time", 0.1, 3, variable_name="starting construction time"
103        ),
104        RealParameter(
105            "time_of_nuclear_power_plant_ban",
106            2013,
107            2100,
108            variable_name="time of nuclear power plant ban",
109        ),
110        RealParameter(
111            "weight_factor_carbon_abatement", 1, 10, variable_name="weight factor carbon abatement"
112        ),
113        RealParameter(
114            "weight_factor_marginal_investment_costs",
115            1,
116            10,
117            variable_name="weight factor marginal investment costs",
118        ),
119        RealParameter(
120            "weight_factor_technological_familiarity",
121            1,
122            10,
123            variable_name="weight factor technological familiarity",
124        ),
125        RealParameter(
126            "weight_factor_technological_growth_potential",
127            1,
128            10,
129            variable_name="weight factor technological growth potential",
130        ),
131        RealParameter(
132            "maximum_battery_storage_uncertainty_constant",
133            0.2,
134            3,
135            variable_name="maximum battery storage uncertainty constant",
136        ),
137        RealParameter(
138            "maximum_no_storage_penetration_rate_wind",
139            0.2,
140            0.6,
141            variable_name="maximum no storage penetration rate wind",
142        ),
143        RealParameter(
144            "maximum_no_storage_penetration_rate_pv",
145            0.1,
146            0.4,
147            variable_name="maximum no storage penetration rate pv",
148        ),
149        CategoricalParameter(
150            "SWITCH_lookup_curve_TGC", (1, 2, 3, 4), variable_name="SWITCH lookup curve TGC"
151        ),
152        CategoricalParameter(
153            "SWTICH_preference_carbon_curve", (1, 2), variable_name="SWTICH preference carbon curve"
154        ),
155        CategoricalParameter(
156            "SWITCH_economic_growth", (1, 2, 3, 4, 5, 6), variable_name="SWITCH economic growth"
157        ),
158        CategoricalParameter(
159            "SWITCH_electrification_rate",
160            (1, 2, 3, 4, 5, 6),
161            variable_name="SWITCH electrification rate",
162        ),
163        CategoricalParameter(
164            "SWITCH_Market_price_determination",
165            (1, 2),
166            variable_name="SWITCH Market price determination",
167        ),
168        CategoricalParameter(
169            "SWITCH_physical_limits", (1, 2), variable_name="SWITCH physical limits"
170        ),
171        CategoricalParameter(
172            "SWITCH_low_reserve_margin_price_markup",
173            (1, 2, 3, 4),
174            variable_name="SWITCH low reserve margin price markup",
175        ),
176        CategoricalParameter(
177            "SWITCH_interconnection_capacity_expansion",
178            (1, 2, 3, 4),
179            variable_name="SWITCH interconnection capacity expansion",
180        ),
181        CategoricalParameter(
182            "SWITCH_storage_for_intermittent_supply",
183            (1, 2, 3, 4, 5, 6, 7),
184            variable_name="SWITCH storage for intermittent supply",
185        ),
186        CategoricalParameter("SWITCH_carbon_cap", (1, 2, 3), variable_name="SWITCH carbon cap"),
187        CategoricalParameter(
188            "SWITCH_TGC_obligation_curve", (1, 2, 3), variable_name="SWITCH TGC obligation curve"
189        ),
190        CategoricalParameter(
191            "SWITCH_carbon_price_determination",
192            (1, 2, 3),
193            variable_name="SWITCH carbon price determination",
194        ),
195    ]
196    return model
197
198
199if __name__ == "__main__":
200    ema_logging.log_to_stderr(ema_logging.INFO)
201    model = get_energy_model()
202
203    policies = [
204        Policy("no policy", model_file="RB_V25_ets_1_extended_outcomes.vpm"),
205        Policy("static policy", model_file="ETSPolicy.vpm"),
206        Policy(
207            "adaptive policy",
208            model_file="RB_V25_ets_1_policy_modified_adaptive_extended_outcomes.vpm",
209        ),
210    ]
211
212    n = 100000
213    with MultiprocessingEvaluator(model) as evaluator:
214        experiments, outcomes = evaluator.perform_experiments(n, policies=policies)
215    #
216    # outcomes.pop("TIME")
217    # results = experiments, outcomes
218    # save_results(results, f"./data/{n}_lhs.tar.gz")