openTEPES 4.18.8__py3-none-any.whl → 4.18.10__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/__init__.py +1 -1
- openTEPES/openTEPES.py +3 -3
- openTEPES/openTEPES_InputData.py +10 -6
- openTEPES/openTEPES_Main.py +2 -2
- openTEPES/openTEPES_ModelFormulation.py +116 -91
- openTEPES/openTEPES_OutputResults.py +248 -79
- openTEPES/openTEPES_ProblemSolving.py +8 -8
- {opentepes-4.18.8.dist-info → opentepes-4.18.10.dist-info}/METADATA +16 -16
- {opentepes-4.18.8.dist-info → opentepes-4.18.10.dist-info}/RECORD +12 -12
- {opentepes-4.18.8.dist-info → opentepes-4.18.10.dist-info}/WHEEL +0 -0
- {opentepes-4.18.8.dist-info → opentepes-4.18.10.dist-info}/entry_points.txt +0 -0
- {opentepes-4.18.8.dist-info → opentepes-4.18.10.dist-info}/licenses/LICENSE +0 -0
openTEPES/__init__.py
CHANGED
|
@@ -14,7 +14,7 @@ Open Generation, Storage, and Transmission Operation and Expansion Planning Mode
|
|
|
14
14
|
>>> import openTEPES as oT
|
|
15
15
|
>>> oT.routine("9n", "C:\\Users\\UserName\\Documents\\GitHub\\openTEPES", "glpk")
|
|
16
16
|
"""
|
|
17
|
-
__version__ = "4.18.
|
|
17
|
+
__version__ = "4.18.10"
|
|
18
18
|
|
|
19
19
|
from .openTEPES_Main import main
|
|
20
20
|
from .openTEPES import *
|
openTEPES/openTEPES.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - January
|
|
2
|
+
Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - January 25, 2026
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
# import dill as pickle
|
|
@@ -38,8 +38,8 @@ def openTEPES_run(DirName, CaseName, SolverName, pIndOutputResults, pIndLogConso
|
|
|
38
38
|
idxDict['y' ] = 1
|
|
39
39
|
|
|
40
40
|
#%% model declaration
|
|
41
|
-
mTEPES = ConcreteModel('Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - Version 4.18.
|
|
42
|
-
print( 'Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - Version 4.18.
|
|
41
|
+
mTEPES = ConcreteModel('Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - Version 4.18.10 - January 25, 2026')
|
|
42
|
+
print( 'Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - Version 4.18.10 - January 25, 2026', file=open(f'{_path}/openTEPES_version_{CaseName}.log','w'))
|
|
43
43
|
|
|
44
44
|
pIndOutputResults = [j for i,j in idxDict.items() if i == pIndOutputResults][0]
|
|
45
45
|
pIndLogConsole = [j for i,j in idxDict.items() if i == pIndLogConsole ][0]
|
openTEPES/openTEPES_InputData.py
CHANGED
|
@@ -677,16 +677,17 @@ def DataConfiguration(mTEPES):
|
|
|
677
677
|
mTEPES.psnchp = Set(initialize = [(p,sc,n,chp) for p,sc,n,chp in mTEPES.psn*mTEPES.chp if (p,chp) in mTEPES.pchp])
|
|
678
678
|
mTEPES.psnbo = Set(initialize = [(p,sc,n,bo) for p,sc,n,bo in mTEPES.psn*mTEPES.bo if (p,bo) in mTEPES.pbo ])
|
|
679
679
|
mTEPES.psnhp = Set(initialize = [(p,sc,n,hp) for p,sc,n,hp in mTEPES.psn*mTEPES.hp if (p,hp) in mTEPES.php ])
|
|
680
|
+
mTEPES.psneb = Set(initialize = [(p,sc,n,eb) for p,sc,n,eb in mTEPES.psn*mTEPES.eb if (p,eb) in mTEPES.peb ])
|
|
680
681
|
mTEPES.psnes = Set(initialize = [(p,sc,n,es) for p,sc,n,es in mTEPES.psn*mTEPES.es if (p,es) in mTEPES.pes ])
|
|
681
682
|
mTEPES.psneh = Set(initialize = [(p,sc,n,eh) for p,sc,n,eh in mTEPES.psn*mTEPES.eh if (p,eh) in mTEPES.peh ])
|
|
682
683
|
mTEPES.psnec = Set(initialize = [(p,sc,n,ec) for p,sc,n,ec in mTEPES.psn*mTEPES.ec if (p,ec) in mTEPES.pec ])
|
|
683
684
|
mTEPES.psnnd = Set(initialize = [(p,sc,n,nd) for p,sc,n,nd in mTEPES.psn*mTEPES.nd ])
|
|
684
685
|
mTEPES.psnar = Set(initialize = [(p,sc,n,ar) for p,sc,n,ar in mTEPES.psn*mTEPES.ar ])
|
|
685
686
|
|
|
686
|
-
mTEPES.psnla = Set(initialize = [(p,sc,n,ni,nf,cc) for p,sc,n,ni,nf,cc in mTEPES.psn*mTEPES.la
|
|
687
|
-
mTEPES.psnle = Set(initialize = [(p,sc,n,ni,nf,cc) for p,sc,n,ni,nf,cc in mTEPES.psn*mTEPES.le
|
|
688
|
-
mTEPES.psnll = Set(initialize = [(p,sc,n,ni,nf,cc) for p,sc,n,ni,nf,cc in mTEPES.psn*mTEPES.ll
|
|
689
|
-
mTEPES.psnls = Set(initialize = [(p,sc,n,ni,nf,cc) for p,sc,n,ni,nf,cc in mTEPES.psn*mTEPES.ls
|
|
687
|
+
mTEPES.psnla = Set(initialize = [(p,sc,n,ni,nf,cc) for p,sc,n,ni,nf,cc in mTEPES.psn*mTEPES.la if (p,ni,nf,cc) in mTEPES.pla ])
|
|
688
|
+
mTEPES.psnle = Set(initialize = [(p,sc,n,ni,nf,cc) for p,sc,n,ni,nf,cc in mTEPES.psn*mTEPES.le if (p,ni,nf,cc) in mTEPES.pla ])
|
|
689
|
+
mTEPES.psnll = Set(initialize = [(p,sc,n,ni,nf,cc) for p,sc,n,ni,nf,cc in mTEPES.psn*mTEPES.ll if (p,ni,nf,cc) in mTEPES.pll ])
|
|
690
|
+
mTEPES.psnls = Set(initialize = [(p,sc,n,ni,nf,cc) for p,sc,n,ni,nf,cc in mTEPES.psn*mTEPES.ls if (p,ni,nf,cc) in mTEPES.pla ])
|
|
690
691
|
|
|
691
692
|
mTEPES.psnehc = Set(initialize = [(p,sc,n,eh) for p,sc,n,eh in mTEPES.psneh if mTEPES.dPar['pRatedMaxCharge'][eh] > 0.0 ])
|
|
692
693
|
|
|
@@ -2082,7 +2083,6 @@ def SettingUpVariables(OptModel, mTEPES):
|
|
|
2082
2083
|
'''
|
|
2083
2084
|
nFixedVariables = 0
|
|
2084
2085
|
|
|
2085
|
-
# fix the must-run existing units and their output
|
|
2086
2086
|
# must-run units must produce at least their minimum output
|
|
2087
2087
|
[OptModel.vTotalOutput[p,sc,n,g].setlb(mTEPES.pMinPowerElec[p,sc,n,g]) for p,sc,n,g in mTEPES.psng if mTEPES.pMustRun[g] == 1 and g not in mTEPES.gc]
|
|
2088
2088
|
|
|
@@ -2119,8 +2119,12 @@ def SettingUpVariables(OptModel, mTEPES):
|
|
|
2119
2119
|
OptModel.vReserveUp [p,sc,n,nr].fix(0.0)
|
|
2120
2120
|
OptModel.vReserveDown [p,sc,n,nr].fix(0.0)
|
|
2121
2121
|
nFixedVariables += 3
|
|
2122
|
+
# fix the must-run existing units and their output
|
|
2123
|
+
if mTEPES.pMustRun[nr] == 1 and mTEPES.pMaxPower2ndBlock[p,sc,n,nr] == 0.0 and nr not in mTEPES.gc:
|
|
2124
|
+
OptModel.vTotalOutput[p,sc,n,nr].fix(mTEPES.pMinPowerElec[p,sc,n,nr])
|
|
2125
|
+
nFixedVariables += 1
|
|
2122
2126
|
if mTEPES.pIndRampReserves == 1:
|
|
2123
|
-
if mTEPES.pMaxPower2ndBlock[p,
|
|
2127
|
+
if mTEPES.pMaxPower2ndBlock[p,sc,n,nr] == 0.0 or mTEPES.pRampUp[nr] == 0.0:
|
|
2124
2128
|
OptModel.vRampReserveUp[p,sc,n,nr].fix(0.0)
|
|
2125
2129
|
OptModel.vRampReserveDw[p,sc,n,nr].fix(0.0)
|
|
2126
2130
|
nFixedVariables += 2
|
openTEPES/openTEPES_Main.py
CHANGED
|
@@ -660,7 +660,7 @@
|
|
|
660
660
|
# For more information on this, and how to apply and follow the GNU AGPL, see
|
|
661
661
|
# <https://www.gnu.org/licenses/>.
|
|
662
662
|
|
|
663
|
-
# Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - January
|
|
663
|
+
# Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - January 25, 2026
|
|
664
664
|
# simplicity and transparency in power systems planning
|
|
665
665
|
|
|
666
666
|
# Developed by
|
|
@@ -693,7 +693,7 @@ GREEN = "\033[32m"
|
|
|
693
693
|
BLUE = "\033[34m"
|
|
694
694
|
RESET = "\033[0m"
|
|
695
695
|
|
|
696
|
-
print(GREEN + 'Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - Version 4.18.
|
|
696
|
+
print(GREEN + 'Open Generation, Storage, and Transmission Operation and Expansion Planning Model with RES and ESS (openTEPES) - Version 4.18.10 - January 25, 2026' + RESET)
|
|
697
697
|
print(BLUE + '#### Academic research license - for non-commercial use only ####' + RESET + '\n')
|
|
698
698
|
|
|
699
699
|
parser = argparse.ArgumentParser(description='Introducing main parameters...')
|