openTEPES 4.18.3__py3-none-any.whl → 4.18.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- openTEPES/9n_PTDF/oT_Data_Demand_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Duration_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Emission_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_EnergyInflows_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_EnergyOutflows_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Generation_9n_PTDF.csv +17 -0
- openTEPES/9n_PTDF/oT_Data_Inertia_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Network_9n_PTDF.csv +14 -0
- openTEPES/9n_PTDF/oT_Data_NodeLocation_9n_PTDF.csv +10 -0
- openTEPES/9n_PTDF/oT_Data_OperatingReserveDown_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_OperatingReserveUp_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_Option_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_Parameter_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_Period_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_RESEnergy_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_ReserveMargin_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_Scenario_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_Stage_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Data_VariableEmissionCost_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableFuelCost_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMaxConsumption_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMaxEnergy_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMaxGeneration_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMaxStorage_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMinConsumption_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMinEnergy_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMinGeneration_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariableMinStorage_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Data_VariablePTDF_9n_PTDF.csv +8740 -0
- openTEPES/9n_PTDF/oT_Data_VariableTTCBck_9n_PTDF.csv +8739 -0
- openTEPES/9n_PTDF/oT_Data_VariableTTCFrw_9n_PTDF.csv +8739 -0
- openTEPES/9n_PTDF/oT_Dict_AreaToRegion_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Area_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Circuit_9n_PTDF.csv +3 -0
- openTEPES/9n_PTDF/oT_Dict_Generation_9n_PTDF.csv +17 -0
- openTEPES/9n_PTDF/oT_Dict_Line_9n_PTDF.csv +3 -0
- openTEPES/9n_PTDF/oT_Dict_LoadLevel_9n_PTDF.csv +8737 -0
- openTEPES/9n_PTDF/oT_Dict_NodeToZone_9n_PTDF.csv +10 -0
- openTEPES/9n_PTDF/oT_Dict_Node_9n_PTDF.csv +10 -0
- openTEPES/9n_PTDF/oT_Dict_Period_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Region_9n_PTDF.csv +31 -0
- openTEPES/9n_PTDF/oT_Dict_Scenario_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Stage_9n_PTDF.csv +2 -0
- openTEPES/9n_PTDF/oT_Dict_Storage_9n_PTDF.csv +3 -0
- openTEPES/9n_PTDF/oT_Dict_Technology_9n_PTDF.csv +7 -0
- openTEPES/9n_PTDF/oT_Dict_ZoneToArea_9n_PTDF.csv +10 -0
- openTEPES/9n_PTDF/oT_Dict_Zone_9n_PTDF.csv +10 -0
- openTEPES/RTS-GMLC_6y/oT_Dict_AreaToRegion_RTS-GMLC_6y.csv +4 -4
- openTEPES/RTS-GMLC_6y/oT_Dict_Area_RTS-GMLC_6y.csv +4 -4
- openTEPES/RTS-GMLC_6y/oT_Dict_Circuit_RTS-GMLC_6y.csv +5 -5
- openTEPES/RTS-GMLC_6y/oT_Dict_Line_RTS-GMLC_6y.csv +3 -3
- openTEPES/RTS-GMLC_6y/oT_Dict_NodeToZone_RTS-GMLC_6y.csv +74 -74
- openTEPES/RTS-GMLC_6y/oT_Dict_Region_RTS-GMLC_6y.csv +2 -2
- openTEPES/RTS-GMLC_6y/oT_Dict_Scenario_RTS-GMLC_6y.csv +2 -2
- openTEPES/RTS-GMLC_6y/oT_Dict_Storage_RTS-GMLC_6y.csv +3 -3
- openTEPES/RTS-GMLC_6y/oT_Dict_Technology_RTS-GMLC_6y.csv +10 -10
- openTEPES/RTS-GMLC_6y/oT_Dict_ZoneToArea_RTS-GMLC_6y.csv +22 -22
- openTEPES/RTS-GMLC_6y/oT_Dict_Zone_RTS-GMLC_6y.csv +22 -22
- openTEPES/__init__.py +1 -1
- openTEPES/openTEPES.py +137 -65
- openTEPES/openTEPES_InputData.py +419 -234
- openTEPES/openTEPES_Main.py +2 -2
- openTEPES/openTEPES_ModelFormulation.py +469 -180
- openTEPES/openTEPES_OutputResults.py +305 -223
- openTEPES/openTEPES_ProblemSolving.py +68 -56
- {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/METADATA +17 -18
- {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/RECORD +70 -23
- {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/WHEEL +1 -1
- {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/LICENSE +0 -0
- {opentepes-4.18.3.dist-info → openTEPES-4.18.5.dist-info}/entry_points.txt +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) -
|
|
2
|
+
Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - May 05, 2025
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import time
|
|
@@ -20,10 +20,10 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
20
20
|
#%% solving the problem
|
|
21
21
|
Solver = SolverFactory(SolverName) # select solver
|
|
22
22
|
if SolverName == 'gurobi':
|
|
23
|
-
FileName =
|
|
23
|
+
FileName = f'{_path}/openTEPES_gurobi_{CaseName}_{p}_{sc}_{st}.log'
|
|
24
24
|
if os.path.exists(FileName):
|
|
25
25
|
os.remove(FileName)
|
|
26
|
-
Solver.options['LogFile' ] =
|
|
26
|
+
Solver.options['LogFile' ] = f'{_path}/openTEPES_gurobi_{CaseName}_{p}_{sc}_{st}.log'
|
|
27
27
|
# Solver.options['SolutionTarget'] = 1 # optimal solution with or without basic solutions
|
|
28
28
|
Solver.options['Method' ] = 2 # barrier method
|
|
29
29
|
Solver.options['Crossover' ] = -1
|
|
@@ -32,16 +32,16 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
32
32
|
# Solver.options['RINS' ] = 100
|
|
33
33
|
# Solver.options['BarConvTol' ] = 1e-9
|
|
34
34
|
# Solver.options['BarQCPConvTol' ] = 0.025
|
|
35
|
-
# Solver.options['IISFile' ] =
|
|
35
|
+
# Solver.options['IISFile' ] = f'{_path}/openTEPES_gurobi_'+CaseName+'.ilp' # should be uncommented to show results of IIS
|
|
36
36
|
Solver.options['MIPGap' ] = 0.01
|
|
37
37
|
Solver.options['Threads' ] = int((psutil.cpu_count(logical=True) + psutil.cpu_count(logical=False))/2)
|
|
38
38
|
Solver.options['TimeLimit' ] = 36000
|
|
39
39
|
Solver.options['IterationLimit' ] = 36000000
|
|
40
40
|
if SolverName == 'cplex':
|
|
41
|
-
FileName =
|
|
41
|
+
FileName = f'{_path}/openTEPES_cplex_{CaseName}_{p}_{sc}_{st}.log'
|
|
42
42
|
if os.path.exists(FileName):
|
|
43
43
|
os.remove(FileName)
|
|
44
|
-
# Solver.options['LogFile' ] =
|
|
44
|
+
# Solver.options['LogFile' ] = f'{_path}/openTEPES_cplex_{CaseName}_{p}_{sc}_{st}.log'
|
|
45
45
|
Solver.options['LPMethod' ] = 4 # barrier method
|
|
46
46
|
# Solver.options['BarCrossAlg' ] = 0
|
|
47
47
|
# Solver.options['NumericalEmphasis'] = 1
|
|
@@ -52,42 +52,46 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
52
52
|
Solver.options['TimeLimit' ] = 36000
|
|
53
53
|
# Solver.options['ItLim' ] = 36000000
|
|
54
54
|
if SolverName == 'appsi_highs':
|
|
55
|
-
FileName =
|
|
55
|
+
FileName = f'{_path}/openTEPES_highs_{CaseName}_{p}_{sc}_{st}.log'
|
|
56
56
|
if os.path.exists(FileName):
|
|
57
57
|
os.remove(FileName)
|
|
58
|
-
Solver.options['log_file' ] =
|
|
59
|
-
Solver.options['solver' ] = '
|
|
58
|
+
Solver.options['log_file' ] = f'{_path}/openTEPES_highs_{CaseName}_{p}_{sc}_{st}.log'
|
|
59
|
+
Solver.options['solver' ] = 'choose'
|
|
60
|
+
Solver.options['simplex_strategy' ] = 3
|
|
60
61
|
Solver.options['run_crossover' ] = 'on'
|
|
61
62
|
Solver.options['mip_rel_gap' ] = 0.01
|
|
63
|
+
Solver.options['parallel' ] = 'on'
|
|
62
64
|
Solver.options['threads' ] = int((psutil.cpu_count(logical=True) + psutil.cpu_count(logical=False))/2)
|
|
63
65
|
Solver.options['time_limit' ] = 36000
|
|
64
66
|
Solver.options['simplex_iteration_limit'] = 36000000
|
|
65
67
|
if SolverName == 'gams' or SolverName == 'GAMS':
|
|
68
|
+
FileName = f'{_path}/openTEPES_gams_{CaseName}_{p}_{sc}_{st}.log'
|
|
66
69
|
solver_options = {
|
|
67
|
-
'file COPT / cplex.opt / ; put COPT putclose "LPMethod 4" / "EpGap 0.01" / ; GAMS_MODEL.OptFile = 1 ;'
|
|
70
|
+
'file COPT / cplex.opt / ; put COPT putclose "LPMethod 4" / "EpGap 0.01" / ; GAMS_MODEL.OptFile = 1 ; '
|
|
68
71
|
'option SysOut = off ;',
|
|
69
72
|
'option LP = cplex ; option MIP = cplex ;',
|
|
70
73
|
'option ResLim = 36000 ; option IterLim = 36000000 ;',
|
|
71
74
|
'option Threads = '+str(int((psutil.cpu_count(logical=True) + psutil.cpu_count(logical=False))/2))+' ;'
|
|
72
75
|
}
|
|
73
76
|
|
|
74
|
-
|
|
77
|
+
nUnfixedVars = 0
|
|
75
78
|
for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
|
|
76
|
-
if not var.is_continuous():
|
|
77
|
-
|
|
78
|
-
|
|
79
|
+
if not var.is_continuous() and not var.is_fixed() and var.value != None:
|
|
80
|
+
nUnfixedVars += 1
|
|
81
|
+
|
|
82
|
+
if nUnfixedVars == 0:
|
|
79
83
|
OptModel.dual = Suffix(direction=Suffix.IMPORT_EXPORT)
|
|
80
84
|
OptModel.rc = Suffix(direction=Suffix.IMPORT_EXPORT)
|
|
81
85
|
|
|
82
|
-
if SolverName == 'gams':
|
|
83
|
-
SolverResults = Solver.solve(OptModel, tee=True, report_timing=True, symbolic_solver_labels=False, add_options=solver_options)
|
|
86
|
+
if SolverName == 'gams' or SolverName == 'GAMS':
|
|
87
|
+
SolverResults = Solver.solve(OptModel, tee=True, report_timing=True, symbolic_solver_labels=False, add_options=solver_options, logfile=FileName)
|
|
84
88
|
else:
|
|
85
89
|
SolverResults = Solver.solve(OptModel, tee=True, report_timing=True)
|
|
86
90
|
|
|
87
91
|
print('Termination condition: ', SolverResults.solver.termination_condition)
|
|
88
92
|
if SolverResults.solver.termination_condition == TerminationCondition.infeasible or SolverResults.solver.termination_condition == TerminationCondition.maxTimeLimit or SolverResults.solver.termination_condition == TerminationCondition.infeasible.maxIterations:
|
|
89
93
|
log_infeasible_constraints(OptModel, log_expression=True, log_variables=True)
|
|
90
|
-
logging.basicConfig(filename=
|
|
94
|
+
logging.basicConfig(filename=f'{_path}/openTEPES_infeasibilities_{CaseName}_{p}_{sc}_{st}.log', level=logging.INFO)
|
|
91
95
|
raise ValueError('Problem infeasible')
|
|
92
96
|
SolverResults.write() # summary of the solver results
|
|
93
97
|
|
|
@@ -96,36 +100,42 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
96
100
|
# binary operation decisions are fixed to their optimal values
|
|
97
101
|
# if NoRepetition == 1, all variables are fixed
|
|
98
102
|
# if NoRepetition == 0, only the variables of the current period and scenario are fixed
|
|
99
|
-
|
|
103
|
+
nUnfixedVars = 0
|
|
100
104
|
if mTEPES.NoRepetition == 1:
|
|
101
105
|
for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
|
|
102
|
-
if not var.is_continuous() and not var.is_fixed():
|
|
106
|
+
if not var.is_continuous() and not var.is_fixed() and var.value != None:
|
|
103
107
|
var.fixed = True # fix the current value
|
|
104
|
-
|
|
108
|
+
nUnfixedVars += 1
|
|
105
109
|
else:
|
|
106
110
|
for var in OptModel.component_data_objects(pyo.Var, active=True, descend_into=True):
|
|
107
|
-
if not var.is_continuous() and not var.is_fixed() and var.index()[0] == p and var.index()[1] == sc:
|
|
111
|
+
if not var.is_continuous() and not var.is_fixed() and var.value != None and var.index()[0] == p and var.index()[1] == sc:
|
|
108
112
|
var.fixed = True # fix the current value
|
|
109
|
-
|
|
113
|
+
nUnfixedVars += 1
|
|
110
114
|
|
|
111
115
|
# continuous investment decisions are fixed to their optimal values
|
|
112
|
-
for
|
|
113
|
-
|
|
116
|
+
for eb in mTEPES.eb:
|
|
117
|
+
if (p,eb) in mTEPES.peb:
|
|
118
|
+
OptModel.vGenerationInvest[p,eb].fix( OptModel.vGenerationInvest[p,eb ]())
|
|
114
119
|
for gd in mTEPES.gd:
|
|
115
|
-
|
|
120
|
+
if (p,gd) in mTEPES.pgd:
|
|
121
|
+
OptModel.vGenerationRetire[p,gd].fix( OptModel.vGenerationRetire[p,gd ]())
|
|
116
122
|
if mTEPES.pIndHydroTopology == 1:
|
|
117
123
|
for rc in mTEPES.rn:
|
|
118
|
-
|
|
124
|
+
if (p,rc) in mTEPES.prc:
|
|
125
|
+
OptModel.vReservoirInvest[p,rc].fix( OptModel.vReservoirInvest [p,rc ]())
|
|
119
126
|
for ni,nf,cc in mTEPES.lc:
|
|
120
|
-
|
|
127
|
+
if (p,ni,nf,cc) in mTEPES.plc:
|
|
128
|
+
OptModel.vNetworkInvest[p,ni,nf,cc].fix( OptModel.vNetworkInvest [p,ni,nf,cc]())
|
|
121
129
|
if mTEPES.pIndHydrogen == 1:
|
|
122
130
|
for ni,nf,cc in mTEPES.pc:
|
|
123
|
-
|
|
131
|
+
if (p,ni,nf,cc) in mTEPES.ppc:
|
|
132
|
+
OptModel.vH2PipeInvest [p,ni,nf,cc].fix(OptModel.vH2PipeInvest [p,ni,nf,cc]())
|
|
124
133
|
if mTEPES.pIndHeat == 1:
|
|
125
134
|
for ni,nf,cc in mTEPES.hc:
|
|
126
|
-
|
|
135
|
+
if (p,ni,nf,cc) in mTEPES.phc:
|
|
136
|
+
OptModel.vHeatPipeInvest[p,ni,nf,cc].fix(OptModel.vHeatPipeInvest [p,ni,nf,cc]())
|
|
127
137
|
|
|
128
|
-
if
|
|
138
|
+
if nUnfixedVars > 0:
|
|
129
139
|
OptModel.dual = Suffix(direction=Suffix.IMPORT_EXPORT)
|
|
130
140
|
OptModel.rc = Suffix(direction=Suffix.IMPORT_EXPORT)
|
|
131
141
|
SolverResults = Solver.solve(OptModel, tee=True, report_timing=True)
|
|
@@ -159,43 +169,45 @@ def ProblemSolving(DirName, CaseName, SolverName, OptModel, mTEPES, pIndLogConso
|
|
|
159
169
|
if mTEPES.NoRepetition == 1:
|
|
160
170
|
for pp,scc in mTEPES.ps:
|
|
161
171
|
print (f'***** Period: {pp}, Scenario: {scc}, Stage: {st} ******')
|
|
162
|
-
print (' Total generation investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenInvestCost [
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
172
|
+
print (' Total generation investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenInvestCost [eb ] * OptModel.vGenerationInvest [pp,eb ]() for eb in mTEPES.eb if (pp,eb) in mTEPES.peb) +
|
|
173
|
+
sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenInvestCost [bc ] * OptModel.vGenerationInvestHeat[pp,bc ]() for bc in mTEPES.bc if (pp,bc) in mTEPES.pbc))
|
|
174
|
+
print (' Total generation retirement cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pGenRetireCost [gd ] * OptModel.vGenerationRetire [pp,gd ]() for gd in mTEPES.gd if (pp,gd) in mTEPES.pgd))
|
|
175
|
+
if mTEPES.pIndHydroTopology == 1 and mTEPES.rn:
|
|
176
|
+
print(' Total reservoir investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pRsrInvestCost [rc ] * OptModel.vReservoirInvest [pp,rc ]() for rc in mTEPES.rn if (pp,rc) in mTEPES.prc))
|
|
166
177
|
else:
|
|
167
178
|
print(' Total reservoir investment cost [MEUR] ', 0.0)
|
|
168
|
-
print (' Total network investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pNetFixedCost [ni,nf,cc] * OptModel.vNetworkInvest
|
|
169
|
-
if mTEPES.pIndHydrogen == 1 and
|
|
170
|
-
print(' Total H2 pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pH2PipeFixedCost [ni,nf,cc] * OptModel.vH2PipeInvest
|
|
179
|
+
print (' Total network investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pNetFixedCost [ni,nf,cc] * OptModel.vNetworkInvest [pp,ni,nf,cc]() for ni,nf,cc in mTEPES.lc if (pp,ni,nf,cc) in mTEPES.plc))
|
|
180
|
+
if mTEPES.pIndHydrogen == 1 and mTEPES.pc:
|
|
181
|
+
print(' Total H2 pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pH2PipeFixedCost [ni,nf,cc] * OptModel.vH2PipeInvest [pp,ni,nf,cc]() for ni,nf,cc in mTEPES.pc if (pp,ni,nf,cc) in mTEPES.ppc))
|
|
171
182
|
else:
|
|
172
183
|
print(' Total H2 pipe investment cost [MEUR] ', 0.0)
|
|
173
|
-
if mTEPES.pIndHeat == 1 and
|
|
174
|
-
print(' Total heat pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pHeatPipeFixedCost[ni,nf,cc] * OptModel.vHeatPipeInvest
|
|
184
|
+
if mTEPES.pIndHeat == 1 and mTEPES.hc:
|
|
185
|
+
print(' Total heat pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pHeatPipeFixedCost[ni,nf,cc] * OptModel.vHeatPipeInvest [pp,ni,nf,cc]() for ni,nf,cc in mTEPES.hc if (pp,ni,nf,cc) in mTEPES.phc))
|
|
175
186
|
else:
|
|
176
187
|
print(' Total heat pipe investment cost [MEUR] ', 0.0)
|
|
177
|
-
print (' Total generation operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalGCost
|
|
178
|
-
print (' Total consumption operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalCCost
|
|
179
|
-
print (' Total emission cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalECost
|
|
180
|
-
print (' Total reliability cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalRCost
|
|
188
|
+
print (' Total generation operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalGCost [pp,scc,n ]() for n in mTEPES.n ))
|
|
189
|
+
print (' Total consumption operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalCCost [pp,scc,n ]() for n in mTEPES.n ))
|
|
190
|
+
print (' Total emission cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalECost [pp,scc,n ]() for n in mTEPES.n ))
|
|
191
|
+
print (' Total reliability cost [MEUR] ', sum(mTEPES.pDiscountedWeight[pp] * mTEPES.pScenProb [pp,scc ]() * OptModel.vTotalRCost [pp,scc,n ]() for n in mTEPES.n ))
|
|
181
192
|
else:
|
|
182
193
|
print (f'***** Period: {p}, Scenario: {sc}, Stage: {st} ******')
|
|
183
|
-
print (' Total generation investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenInvestCost [
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
194
|
+
print (' Total generation investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenInvestCost [eb ] * OptModel.vGenerationInvest [p,eb ]() for eb in mTEPES.eb if (p,eb) in mTEPES.peb) +
|
|
195
|
+
sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenInvestCost [bc ] * OptModel.vGenerationInvestHeat[p,bc ]() for bc in mTEPES.bc if (p,bc) in mTEPES.pbc))
|
|
196
|
+
print (' Total generation retirement cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pGenRetireCost [gd ] * OptModel.vGenerationRetire [p,gd ]() for gd in mTEPES.gd if (p,gd) in mTEPES.pgd))
|
|
197
|
+
if mTEPES.pIndHydroTopology == 1 and mTEPES.rn:
|
|
198
|
+
print (' Total reservoir investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pRsrInvestCost [rc ] * OptModel.vReservoirInvest [p,rc ]() for rc in mTEPES.rn if (p,rc) in mTEPES.prc))
|
|
187
199
|
else:
|
|
188
200
|
print (' Total reservoir investment cost [MEUR] ', 0.0)
|
|
189
|
-
print (' Total network investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pNetFixedCost [ni,nf,cc] * OptModel.vNetworkInvest
|
|
190
|
-
if mTEPES.pIndHydrogen == 1 and
|
|
191
|
-
print (' Total H2 pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pH2PipeFixedCost [ni,nf,cc] * OptModel.vH2PipeInvest
|
|
201
|
+
print (' Total network investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pNetFixedCost [ni,nf,cc] * OptModel.vNetworkInvest [p,ni,nf,cc ]() for ni,nf,cc in mTEPES.lc if (p,ni,nf,cc) in mTEPES.plc))
|
|
202
|
+
if mTEPES.pIndHydrogen == 1 and mTEPES.pc:
|
|
203
|
+
print (' Total H2 pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pH2PipeFixedCost [ni,nf,cc] * OptModel.vH2PipeInvest [p,ni,nf,cc ]() for ni,nf,cc in mTEPES.pc if (p,ni,nf,cc) in mTEPES.ppc))
|
|
192
204
|
else:
|
|
193
205
|
print (' Total H2 pipe investment cost [MEUR] ', 0.0)
|
|
194
|
-
if mTEPES.pIndHeat == 1 and
|
|
195
|
-
print (' Total heat pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pHeatPipeFixedCost[ni,nf,cc] * OptModel.vHeatPipeInvest
|
|
206
|
+
if mTEPES.pIndHeat == 1 and mTEPES.hc:
|
|
207
|
+
print (' Total heat pipe investment cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pHeatPipeFixedCost[ni,nf,cc] * OptModel.vHeatPipeInvest [p,ni,nf,cc ]() for ni,nf,cc in mTEPES.hc if (p,ni,nf,cc) in mTEPES.phc))
|
|
196
208
|
else:
|
|
197
209
|
print (' Total heat pipe investment cost [MEUR] ', 0.0)
|
|
198
|
-
print (' Total generation operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalGCost
|
|
199
|
-
print (' Total consumption operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalCCost
|
|
200
|
-
print (' Total emission cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalECost
|
|
201
|
-
print (' Total reliability cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalRCost
|
|
210
|
+
print (' Total generation operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalGCost [p,sc,n ]() for n in mTEPES.n ))
|
|
211
|
+
print (' Total consumption operation cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalCCost [p,sc,n ]() for n in mTEPES.n ))
|
|
212
|
+
print (' Total emission cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalECost [p,sc,n ]() for n in mTEPES.n ))
|
|
213
|
+
print (' Total reliability cost [MEUR] ', sum(mTEPES.pDiscountedWeight[p] * mTEPES.pScenProb [p,sc ]() * OptModel.vTotalRCost [p,sc,n ]() for n in mTEPES.n ))
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: openTEPES
|
|
3
|
-
Version: 4.18.
|
|
3
|
+
Version: 4.18.5
|
|
4
4
|
Summary: Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES)
|
|
5
|
-
Home-page: https://
|
|
5
|
+
Home-page: https://opentepes.readthedocs.io/en/latest/index.html
|
|
6
6
|
Author: IIT-EnergySystemModels
|
|
7
7
|
Author-email: andres.ramos@comillas.edu
|
|
8
8
|
Requires-Python: >=3.11
|
|
@@ -25,8 +25,8 @@ Requires-Dist: networkx>=3.3
|
|
|
25
25
|
Requires-Dist: dill>=0.3.8
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
.. image::
|
|
29
|
-
:target: https://
|
|
28
|
+
.. image:: doc/img/openTEPES.png
|
|
29
|
+
:target: https://opentepes.readthedocs.io/en/latest/index.html
|
|
30
30
|
:alt: logo
|
|
31
31
|
:align: center
|
|
32
32
|
|
|
@@ -63,11 +63,13 @@ Requires-Dist: dill>=0.3.8
|
|
|
63
63
|
|
|
64
64
|
The **openTEPES** model has been developed at the `Instituto de Investigación Tecnológica (IIT) <https://www.iit.comillas.edu/index.php.en>`_ of the `Universidad Pontificia Comillas <https://www.comillas.edu/en/>`_.
|
|
65
65
|
|
|
66
|
-
The **openTEPES** model presents a decision support system for defining the **integrated generation, storage, and transmission resource planning** (IRP, GEP+SEP+TEP) of a **large-scale electric system** at a tactical level (i.e., time horizons of
|
|
66
|
+
The **openTEPES** model presents a decision support system for defining the **integrated generation, storage, and transmission resource planning** (IRP, GEP+SEP+TEP) -**Integrated Resource Planning** (IRP)- of a **large-scale electric system** at a tactical level (i.e., time horizons of 5-30 years),
|
|
67
67
|
defined as a set of **generation, storage, and (electricity, hydrogen, and heat) networks dynamic investment decisions for multiple future years**.
|
|
68
68
|
|
|
69
|
+
The `openTEPES complete documentation <https://opentepes.readthedocs.io/en/latest/index.html>`_ presents the input data, output results, mathematical formulation, download and installation, and the research projects where the model has been used.
|
|
70
|
+
|
|
69
71
|
It is integrated into the `open energy system modelling platform <https://openenergymodels.net/>`_, helping model Europe's energy system and in the list of `energy models published under open source licenses <https://wiki.openmod-initiative.org/wiki/Open_Models>`_.
|
|
70
|
-
It is also part of the Africa
|
|
72
|
+
It is also part of the `Africa's open energy system modelling toolbox <https://africaenergymodels.net/models/>`_, which is a suite of open and linked state-of-the-art open-source energy system models for Africa, and of the `African Energy modelling Network Open-Source Tools <https://africanenergymodellingnetwork.net/en/focus-area-3-open-source-tools-and-data>`_.
|
|
71
73
|
|
|
72
74
|
Scripts are provided to exchange information with Integrated Assessment Models (IAM) using their `nomenclature and data formats <https://nomenclature-iamc.readthedocs.io/en/stable/>`_.
|
|
73
75
|
|
|
@@ -79,6 +81,12 @@ Reference
|
|
|
79
81
|
|
|
80
82
|
**openTEPES**: `summary presentation <https://pascua.iit.comillas.edu/aramos/openTEPES.pdf>`_, `présentation (French) <https://pascua.iit.comillas.edu/aramos/openTEPES_fr.pdf>`_, and `installation <https://pascua.iit.comillas.edu/aramos/openTEPES_installation.pdf>`_
|
|
81
83
|
|
|
84
|
+
Authors
|
|
85
|
+
########
|
|
86
|
+
**Andrés Ramos, Erik Alvarez, Francisco Labora, Sara Lumbreras**. Universidad Pontificia Comillas, Instituto de Investigación Tecnológica, Alberto Aguilera 23, 28015 Madrid, Spain
|
|
87
|
+
|
|
88
|
+
Contact: andres.ramos@comillas.edu
|
|
89
|
+
|
|
82
90
|
Description
|
|
83
91
|
############
|
|
84
92
|
**openTEPES** determines the investment plans of new facilities (generators, ESS, and lines)
|
|
@@ -146,10 +154,10 @@ Miniconda (recommended)
|
|
|
146
154
|
2. **Packages and Solver**:
|
|
147
155
|
|
|
148
156
|
1. Launch a new Anaconda prompt (or terminal in any IDE)
|
|
149
|
-
2. The `HiGHS
|
|
157
|
+
2. The `HiGHS <https://ergo-code.github.io/HiGHS/dev/interfaces/python/#python-getting-started>`_ is our recommendation if you want a free and open-source solver.
|
|
150
158
|
3. Install openTEPES via pip by ``pip install openTEPES``
|
|
151
159
|
|
|
152
|
-
Continue at `Get Started <#get-started>`_
|
|
160
|
+
Continue at `Get Started <#get-started>`_.
|
|
153
161
|
|
|
154
162
|
|
|
155
163
|
GitHub Repository (the hard way)
|
|
@@ -223,15 +231,6 @@ Then, the **results** should be written in the folder who is called with the cas
|
|
|
223
231
|
|
|
224
232
|
``openTEPES_run(<dir>, <case>, <solver>, <results>, <log>)``
|
|
225
233
|
|
|
226
|
-
Tips
|
|
227
|
-
####
|
|
228
|
-
|
|
229
|
-
1. A complete documentation of the openTEPES model can be found at `<https://opentepes.readthedocs.io/en/latest/index.html>`_, which presents the mathematical formulation, input data and output results.
|
|
230
|
-
2. Try modifying the **TimeStep** in **oT_Data_Parameter_<case>.csv** and see their effect on results.
|
|
231
|
-
3. Using **0** or **1**, the optimization options can be activated or deactivated in **oT_Data_Option_<case>.csv**.
|
|
232
|
-
4. If you need a nice python editor, think about using `PyCharm <https://www.jetbrains.com/pycharm/>`_. It has many features including project management, etc.
|
|
233
|
-
5. We also suggest the use of `Gurobi <https://www.gurobi.com/academia/academic-program-and-licenses/>`_ (for Academics and Recent Graduates) as a solver to deal with MIP and LP problems instead of GLPK.
|
|
234
|
-
|
|
235
234
|
Run the Tutorial
|
|
236
235
|
################
|
|
237
236
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
openTEPES/__init__.py,sha256=
|
|
1
|
+
openTEPES/__init__.py,sha256=0LrESaXoSN5ntta3lWySc71R8nXHjJg0CqsW2WtGuxo,832
|
|
2
2
|
openTEPES/openTEPES.mapbox_token,sha256=xsXNkwGp2vzXqQy2zVkyLhhNcNWniK2BMeOFpc5SZHI,93
|
|
3
|
-
openTEPES/openTEPES.py,sha256=
|
|
4
|
-
openTEPES/openTEPES_InputData.py,sha256=
|
|
5
|
-
openTEPES/openTEPES_Main.py,sha256=
|
|
6
|
-
openTEPES/openTEPES_ModelFormulation.py,sha256=
|
|
7
|
-
openTEPES/openTEPES_OutputResults.py,sha256=
|
|
8
|
-
openTEPES/openTEPES_ProblemSolving.py,sha256=
|
|
3
|
+
openTEPES/openTEPES.py,sha256=7OxyRstC3-tSDSDAIpbaC-R6DhKnPZr0Iz4DRQV6X54,27285
|
|
4
|
+
openTEPES/openTEPES_InputData.py,sha256=ImmkRzRwPhSjJIZbFcXw5tvquLCewKVAHvZmjCOGo6g,224488
|
|
5
|
+
openTEPES/openTEPES_Main.py,sha256=w3s55T1QDfMCHtCROI05gIzgXeMShZ5EW90C5XNlQwE,39914
|
|
6
|
+
openTEPES/openTEPES_ModelFormulation.py,sha256=r5rT_a7MGeofXQ4D_S9Hz8gUUCaGTAmWUnMbOD5Q4bI,136424
|
|
7
|
+
openTEPES/openTEPES_OutputResults.py,sha256=LJLl-GlE184Jde6FNCADK1ZSfF8V077mEai20JoC2MY,221372
|
|
8
|
+
openTEPES/openTEPES_ProblemSolving.py,sha256=WATzENUIGOlvbjAH44F6AEnAVgm9g91hiaWMsjCn5YI,15934
|
|
9
9
|
openTEPES/openTEPES_gitinfo.py,sha256=6fA1fa-JcyusSc_HcjPiCgnV9zn-fZwdG-kK0a5Fxc8,2004
|
|
10
10
|
openTEPES/.idea/.name,sha256=jiwfcnJ20wztcvpny4SHcqmAIWK-w5tCqN9TWf0GOkw,11
|
|
11
11
|
openTEPES/.idea/misc.xml,sha256=m4-3O284ZBS8WZSQD0QWwk8YjuQYz92w6kr7NRFNips,298
|
|
@@ -102,6 +102,53 @@ openTEPES/9n7y/oT_Dict_Storage_9n7y.csv,sha256=GbyzeENaCG-Yx67tdPsZhF1qUY-OVDKQP
|
|
|
102
102
|
openTEPES/9n7y/oT_Dict_Technology_9n7y.csv,sha256=9WQUthNC8T5Sy4rdm2XvqcUMXebxQ7jNnAai3OrfgJ0,47
|
|
103
103
|
openTEPES/9n7y/oT_Dict_ZoneToArea_9n7y.csv,sha256=ub27ppJJ-NYjYX7hmL9ua6ACYzDUV9XWgTLdHulvZ2c,128
|
|
104
104
|
openTEPES/9n7y/oT_Dict_Zone_9n7y.csv,sha256=-EFkGBbP6FddAAYIksLik2ktnW008aLg3ZwNPDp9s6M,69
|
|
105
|
+
openTEPES/9n_PTDF/oT_Data_Demand_9n_PTDF.csv,sha256=LsMcM_06kkRn1eXbA2TknF-n20ghARxBLdKVUXlHF0A,1196560
|
|
106
|
+
openTEPES/9n_PTDF/oT_Data_Duration_9n_PTDF.csv,sha256=MNMIViQ0Q0g3TLP9fgQUBhalqLFnprOv-HWozXW_7gE,332010
|
|
107
|
+
openTEPES/9n_PTDF/oT_Data_Emission_9n_PTDF.csv,sha256=rYwkA8jTZyx47BP54DfyN4443WbBelCc_X76K1bp-zU,41
|
|
108
|
+
openTEPES/9n_PTDF/oT_Data_EnergyInflows_9n_PTDF.csv,sha256=oEXYvy2pjKpIpi9HmPFMipdeHlKeoMv8jhyDbISQZQc,437023
|
|
109
|
+
openTEPES/9n_PTDF/oT_Data_EnergyOutflows_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
110
|
+
openTEPES/9n_PTDF/oT_Data_Generation_9n_PTDF.csv,sha256=0jgZt1ZD68uAnOQnTITYEdKKjWqNCSEMUwUcgVDh6jI,2564
|
|
111
|
+
openTEPES/9n_PTDF/oT_Data_Inertia_9n_PTDF.csv,sha256=nndR80BBM7wKH9Ej3LrSuG0U4a0eKtT8LVmm79brjIY,288321
|
|
112
|
+
openTEPES/9n_PTDF/oT_Data_Network_9n_PTDF.csv,sha256=zcRFVagDQ3EL9J9Q85C1muzjLuLvhk8VUbfQh0sX1aw,1213
|
|
113
|
+
openTEPES/9n_PTDF/oT_Data_NodeLocation_9n_PTDF.csv,sha256=eaz-9dcwWLoQUEp-oafd4jcetaQ_Grjgp0gh0oIv6k4,303
|
|
114
|
+
openTEPES/9n_PTDF/oT_Data_OperatingReserveDown_9n_PTDF.csv,sha256=VqBDqfaIPiD1guy1rLNAYEEZYWypabaFR4u57YNz0fw,383843
|
|
115
|
+
openTEPES/9n_PTDF/oT_Data_OperatingReserveUp_9n_PTDF.csv,sha256=VqBDqfaIPiD1guy1rLNAYEEZYWypabaFR4u57YNz0fw,383843
|
|
116
|
+
openTEPES/9n_PTDF/oT_Data_Option_9n_PTDF.csv,sha256=2onSiuxVxB0WXX45pBWpfb6uoGY1o_FuAYKrp7w3cpQ,230
|
|
117
|
+
openTEPES/9n_PTDF/oT_Data_Parameter_9n_PTDF.csv,sha256=Gn-pzaThuI_w9USJwZ-AGDy5VnXMuVnmiac3W1sm2ds,220
|
|
118
|
+
openTEPES/9n_PTDF/oT_Data_Period_9n_PTDF.csv,sha256=NFbJq1PV7fhKMp7ocoy_hy42mKuVabBdPqe9Pt2IVQ4,26
|
|
119
|
+
openTEPES/9n_PTDF/oT_Data_RESEnergy_9n_PTDF.csv,sha256=zOj39jlgP1Pj6oIWDY8Kr-ysvvKUhkap5zCZn9s68is,40
|
|
120
|
+
openTEPES/9n_PTDF/oT_Data_ReserveMargin_9n_PTDF.csv,sha256=WCIVw1Yr64PzAOBRta-7h4Ri8G0kLNvdu7700sQr6Yg,46
|
|
121
|
+
openTEPES/9n_PTDF/oT_Data_Scenario_9n_PTDF.csv,sha256=UGeFNxqb6ysUgpVrLESkfFGy-3X9nzJoeRooynFTTQQ,45
|
|
122
|
+
openTEPES/9n_PTDF/oT_Data_Stage_9n_PTDF.csv,sha256=fHzcT28maF4tn7D92epcXLZqsQct_ZrmOfLGZj12B6Q,24
|
|
123
|
+
openTEPES/9n_PTDF/oT_Data_VariableEmissionCost_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
124
|
+
openTEPES/9n_PTDF/oT_Data_VariableFuelCost_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
125
|
+
openTEPES/9n_PTDF/oT_Data_VariableMaxConsumption_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
126
|
+
openTEPES/9n_PTDF/oT_Data_VariableMaxEnergy_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
127
|
+
openTEPES/9n_PTDF/oT_Data_VariableMaxGeneration_9n_PTDF.csv,sha256=2unfNkFYcQYNzI-M8-PoSFVI0aVVJmUO-pGKVEkRgX4,565976
|
|
128
|
+
openTEPES/9n_PTDF/oT_Data_VariableMaxStorage_9n_PTDF.csv,sha256=oEXYvy2pjKpIpi9HmPFMipdeHlKeoMv8jhyDbISQZQc,437023
|
|
129
|
+
openTEPES/9n_PTDF/oT_Data_VariableMinConsumption_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
130
|
+
openTEPES/9n_PTDF/oT_Data_VariableMinEnergy_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
131
|
+
openTEPES/9n_PTDF/oT_Data_VariableMinGeneration_9n_PTDF.csv,sha256=OVKIL2LhUakkInIKxvL8GjE7jcGQyod3ZOxG3LDtRZM,419537
|
|
132
|
+
openTEPES/9n_PTDF/oT_Data_VariableMinStorage_9n_PTDF.csv,sha256=oEXYvy2pjKpIpi9HmPFMipdeHlKeoMv8jhyDbISQZQc,437023
|
|
133
|
+
openTEPES/9n_PTDF/oT_Data_VariablePTDF_9n_PTDF.csv,sha256=wetQwHN8CURqlCfF8pHbNE03Db6IV19MSlH19-VXleY,445800
|
|
134
|
+
openTEPES/9n_PTDF/oT_Data_VariableTTCBck_9n_PTDF.csv,sha256=nwKz0WpSjuJfWhlwoSi773y4oPZmfjlM6WFxmz9gbw0,314549
|
|
135
|
+
openTEPES/9n_PTDF/oT_Data_VariableTTCFrw_9n_PTDF.csv,sha256=nwKz0WpSjuJfWhlwoSi773y4oPZmfjlM6WFxmz9gbw0,314549
|
|
136
|
+
openTEPES/9n_PTDF/oT_Dict_AreaToRegion_9n_PTDF.csv,sha256=Tj0yBL-v69HHH4eZD1DGWRLNZsZci9lP3LLKDAo15qA,23
|
|
137
|
+
openTEPES/9n_PTDF/oT_Dict_Area_9n_PTDF.csv,sha256=gPrgfhexkukh9zR4hjcUvmYaJCkoQndGtKpnlPR68iY,13
|
|
138
|
+
openTEPES/9n_PTDF/oT_Dict_Circuit_9n_PTDF.csv,sha256=HA_AvO-c5JJ0A5mgMEzk4YzTmsA4hk02WkyIwEJMZsg,19
|
|
139
|
+
openTEPES/9n_PTDF/oT_Dict_Generation_9n_PTDF.csv,sha256=ooB6zMs5bAUlVzm3R_g-sfX8ZA2G7S6sWreqsRU0NM4,209
|
|
140
|
+
openTEPES/9n_PTDF/oT_Dict_Line_9n_PTDF.csv,sha256=xg4OpM5ldCbkhLOrAgZiJbZekkwtD5lpwxYE6dCzzLA,18
|
|
141
|
+
openTEPES/9n_PTDF/oT_Dict_LoadLevel_9n_PTDF.csv,sha256=FNuj3oD4Npror74ru-HGnm3wD8rLhJFTu2u4jMUYJ4o,192203
|
|
142
|
+
openTEPES/9n_PTDF/oT_Dict_NodeToZone_9n_PTDF.csv,sha256=hn2BuMq73Hmw3AZRZhZ8X2Ltnvk0tKvhSdEeAO3NqM8,137
|
|
143
|
+
openTEPES/9n_PTDF/oT_Dict_Node_9n_PTDF.csv,sha256=dIZAxYlhLVGWv2r0tmb91rTnaAY8VjvjYa6rzexxo9I,78
|
|
144
|
+
openTEPES/9n_PTDF/oT_Dict_Period_9n_PTDF.csv,sha256=1zv4VAX7gc0fMHgXbmMdzWbaPT-3EwAM29WixPc_zyo,14
|
|
145
|
+
openTEPES/9n_PTDF/oT_Dict_Region_9n_PTDF.csv,sha256=7ypbm_FG7DsOw1xg4KL4UvRbDdiHzwM1uU5eecX9kjA,128
|
|
146
|
+
openTEPES/9n_PTDF/oT_Dict_Scenario_9n_PTDF.csv,sha256=UFD1pqOy6af_SLucKNhgs-CCcoSkZ6OB7YcxLhIpeqs,16
|
|
147
|
+
openTEPES/9n_PTDF/oT_Dict_Stage_9n_PTDF.csv,sha256=PyWDtx6UFjodj7r4qZktaFfzPVgGzOA-cPLNW1CIjGw,12
|
|
148
|
+
openTEPES/9n_PTDF/oT_Dict_Storage_9n_PTDF.csv,sha256=GbyzeENaCG-Yx67tdPsZhF1qUY-OVDKQP2TOSbugPVk,28
|
|
149
|
+
openTEPES/9n_PTDF/oT_Dict_Technology_9n_PTDF.csv,sha256=9WQUthNC8T5Sy4rdm2XvqcUMXebxQ7jNnAai3OrfgJ0,47
|
|
150
|
+
openTEPES/9n_PTDF/oT_Dict_ZoneToArea_9n_PTDF.csv,sha256=ub27ppJJ-NYjYX7hmL9ua6ACYzDUV9XWgTLdHulvZ2c,128
|
|
151
|
+
openTEPES/9n_PTDF/oT_Dict_Zone_9n_PTDF.csv,sha256=-EFkGBbP6FddAAYIksLik2ktnW008aLg3ZwNPDp9s6M,69
|
|
105
152
|
openTEPES/NG2030/oT_Data_Demand_NG2030.csv,sha256=Ebg6bwYYLjiHsd5nkbVgS8yHgfVLfaUx3HSONT_9fms,12342624
|
|
106
153
|
openTEPES/NG2030/oT_Data_Duration_NG2030.csv,sha256=Wzg3rbdRY-tkz_-Im_WZvUTbw7uJQAqiWKqqyX1wRQE,995946
|
|
107
154
|
openTEPES/NG2030/oT_Data_Emission_NG2030.csv,sha256=FGgWg3G127ufYGa5nG-9k16tlQj__DYJxfUxf9yXLuo,43
|
|
@@ -218,22 +265,22 @@ openTEPES/RTS-GMLC_6y/oT_Data_VariableMinConsumption_RTS-GMLC_6y.csv,sha256=TZB_
|
|
|
218
265
|
openTEPES/RTS-GMLC_6y/oT_Data_VariableMinEnergy_RTS-GMLC_6y.csv,sha256=TZB_4NU_utULtvgq-RGNviZukUjzvyjakn9sVH_-hRs,12582183
|
|
219
266
|
openTEPES/RTS-GMLC_6y/oT_Data_VariableMinGeneration_RTS-GMLC_6y.csv,sha256=TZB_4NU_utULtvgq-RGNviZukUjzvyjakn9sVH_-hRs,12582183
|
|
220
267
|
openTEPES/RTS-GMLC_6y/oT_Data_VariableMinStorage_RTS-GMLC_6y.csv,sha256=TZB_4NU_utULtvgq-RGNviZukUjzvyjakn9sVH_-hRs,12582183
|
|
221
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_AreaToRegion_RTS-GMLC_6y.csv,sha256=
|
|
222
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Area_RTS-GMLC_6y.csv,sha256=
|
|
223
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Circuit_RTS-GMLC_6y.csv,sha256
|
|
268
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_AreaToRegion_RTS-GMLC_6y.csv,sha256=AC7WhEMDMekOKE9-kUHV-Dy92zmWKo6-YNL9vyps_j8,64
|
|
269
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Area_RTS-GMLC_6y.csv,sha256=VR1A8dGJ-9UcRtiyYaJwANd-7faXMtPggvkhNQ4RBf8,30
|
|
270
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Circuit_RTS-GMLC_6y.csv,sha256=-5ia4UT_W0lrWYYVyFV9D6-q6nA93timI8MYf_XaWxY,33
|
|
224
271
|
openTEPES/RTS-GMLC_6y/oT_Dict_Generation_RTS-GMLC_6y.csv,sha256=w6kE1V9QiFoihhMs43minFkyFWRzwQtWnSYsF96_7WA,2535
|
|
225
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Line_RTS-GMLC_6y.csv,sha256=
|
|
272
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Line_RTS-GMLC_6y.csv,sha256=xg4OpM5ldCbkhLOrAgZiJbZekkwtD5lpwxYE6dCzzLA,18
|
|
226
273
|
openTEPES/RTS-GMLC_6y/oT_Dict_LoadLevel_RTS-GMLC_6y.csv,sha256=FNuj3oD4Npror74ru-HGnm3wD8rLhJFTu2u4jMUYJ4o,192203
|
|
227
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_NodeToZone_RTS-GMLC_6y.csv,sha256=
|
|
274
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_NodeToZone_RTS-GMLC_6y.csv,sha256=p0TKIjW16gSR5F51FnP-5E_oACrxzPo0glTt0OoglBE,1325
|
|
228
275
|
openTEPES/RTS-GMLC_6y/oT_Dict_Node_RTS-GMLC_6y.csv,sha256=2YRl6OD1hV1lR8LiTN-PYjX8bW2v3BktmLVMRl8HW74,736
|
|
229
276
|
openTEPES/RTS-GMLC_6y/oT_Dict_Period_RTS-GMLC_6y.csv,sha256=Jp7qufLCOXwJ1kSCruPE64llGaTj4wVqe79u5H4LPKg,44
|
|
230
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Region_RTS-GMLC_6y.csv,sha256=
|
|
231
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Scenario_RTS-GMLC_6y.csv,sha256=
|
|
277
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Region_RTS-GMLC_6y.csv,sha256=xd-mTmEwgSbq3wu8mbiMhvW4D_h9Y9sX9-M4C7j_Jyc,18
|
|
278
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Scenario_RTS-GMLC_6y.csv,sha256=UFD1pqOy6af_SLucKNhgs-CCcoSkZ6OB7YcxLhIpeqs,16
|
|
232
279
|
openTEPES/RTS-GMLC_6y/oT_Dict_Stage_RTS-GMLC_6y.csv,sha256=cZKl_y6qUHVS8cLY2EFYwGyb8Bzw8043XqkYZJhOOr0,76
|
|
233
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Storage_RTS-GMLC_6y.csv,sha256=
|
|
234
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Technology_RTS-GMLC_6y.csv,sha256=
|
|
235
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_ZoneToArea_RTS-GMLC_6y.csv,sha256=
|
|
236
|
-
openTEPES/RTS-GMLC_6y/oT_Dict_Zone_RTS-GMLC_6y.csv,sha256=
|
|
280
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Storage_RTS-GMLC_6y.csv,sha256=GbyzeENaCG-Yx67tdPsZhF1qUY-OVDKQP2TOSbugPVk,28
|
|
281
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Technology_RTS-GMLC_6y.csv,sha256=TpbqRLfZsKkqXtVZNRxBrmis9claViI_UQzw7zyvCuA,76
|
|
282
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_ZoneToArea_RTS-GMLC_6y.csv,sha256=lj86EH-OBqXsts32_AyCPKWtyH8aFRAnHfJls6tJI_8,347
|
|
283
|
+
openTEPES/RTS-GMLC_6y/oT_Dict_Zone_RTS-GMLC_6y.csv,sha256=mwTHNLbVoLCLclucd4IC1p4Ui8eK7td5FYYUHb8QMxk,195
|
|
237
284
|
openTEPES/RTS24/oT_Data_Demand_RTS24.csv,sha256=18rtSbDL9CNMYanislGY7DmgFm0MqZIPF57gFurjFu8,1824986
|
|
238
285
|
openTEPES/RTS24/oT_Data_Duration_RTS24.csv,sha256=MNMIViQ0Q0g3TLP9fgQUBhalqLFnprOv-HWozXW_7gE,332010
|
|
239
286
|
openTEPES/RTS24/oT_Data_Emission_RTS24.csv,sha256=fuUh5xa2V53QHSLlDxWeG4g9CwOmNwWADwDOpqMvfeA,58
|
|
@@ -335,8 +382,8 @@ openTEPES/sSEP/oT_Dict_Storage_sSEP.csv,sha256=H2rJXZvoMuT-25sI2GpG8IuiNKD-dxuty
|
|
|
335
382
|
openTEPES/sSEP/oT_Dict_Technology_sSEP.csv,sha256=MCTpplzz7_eVPKQfOw35c86ib6CTtW6UK6JrbCJ8wls,170
|
|
336
383
|
openTEPES/sSEP/oT_Dict_ZoneToArea_sSEP.csv,sha256=AUDCs5Bg6sw9f2pVjGP1o4IJjXFF_VrokOGf_V3QsEI,24
|
|
337
384
|
openTEPES/sSEP/oT_Dict_Zone_sSEP.csv,sha256=TBud-fvbFbiAsuutxTYe8wWlv_x1P8oyWXILMpYiXJc,13
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
385
|
+
openTEPES-4.18.5.dist-info/entry_points.txt,sha256=gNNPrDaTsRuRJXI1FLNgqMX1CiJ45bEp1dEDH7ZB8Oc,49
|
|
386
|
+
openTEPES-4.18.5.dist-info/LICENSE,sha256=4O7bphXVzRuYavtsWzpLGuM3E-fp3HTRna7F4yIfnS4,35184
|
|
387
|
+
openTEPES-4.18.5.dist-info/WHEEL,sha256=jPMR_Dzkc4X4icQtmz81lnNY_kAsfog7ry7qoRvYLXw,81
|
|
388
|
+
openTEPES-4.18.5.dist-info/METADATA,sha256=iydsNCxTCunfmrstvG17guqA4-NK4Plk5i08Qle042s,18201
|
|
389
|
+
openTEPES-4.18.5.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|