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")