Home

Temoa Project Documentation Release 2015

image

Contents

1. Temoa Project Documentation Release 2015 02 03 6 Chapter 2 Quick Start CHAPTER THREE THE MATH BEHIND TEMOA To understand this section the reader will need at least a cursory understanding of mathematical optimiza tion We omit here that introduction and instead refer the reader to various available online sources The key piece to note is that Temoa eventually relies on a computer and thus needs some concrete pieces of in formation to produce useful results These pieces are generally organized into sets parameters variables and equation definitions The heart of Temoa is a technology explicit energy system optimization model It is an algebraic network of linked processes understood by the model as a set of engineering characteristics e g capital cost efficiency capacity factor emission rates that transform raw energy sources into end use demands The model objective function minimizes the present value cost of energy supply through manipulation of capacity use and installation over time cradle grave End Use mountaintop gt LAR gt oa Demands river_water Energy Sources Figure 3 1 A common visualization of EEO models is a directed network graph with energy sources on the left and end use demands on the right The modeler must specify the specific end use demands to be met the technologies of the system rectangles and the inputs and outputs of each red and green arrows The cir
2. use_splines dot_dat dot_dat temoa py error too few arguments In a Unix environment you can make the file executable and it can be executed directly chmod x temoa py temoa py usage temoa py h graph_format GRAPH_FORMAT show_capacity graph_type GRAPH_TYPE use_splines dot dat dot dat seel temoa py error too few arguments The h command line argument provides the longer synopsis of the available arguments temoa py h usage temoa py h graph_format GRAPH_FORMAT show_capacity graph_type GRAPH_TYPE use_splines dot_dat dot_dat positional arguments dot_dat AMPL format data file s with which to create a model instance e g data dat optional arguments h help show this help message and exit graph_format GRAPH _FORMAT Create a system wide visual depiction of the model The available options are the formats available to Graphviz To get a list of available formats use the dot command dot Txxx Default None show_capacity Choose whether or not the capacity shows up in the subgraphs Default not shown 35 Temoa Project Documentation Release 2015 02 03 graph_type GRAPH_TYPE Choose the type of subgraph depiction desired The available options are explicit_vintages and separate_vintages Default separate_vintages use_splines Choose whether the subgraph edges needs to be straight or curved Default use str
3. 2010 Available from temoaproject org 2 The two main goals behind Temoa are transparency and repeatability hence the AGPL license Unfortunately there are some harsh realities in the current climate of EEO modeling so this license is not a guarantee of openness This documentation touches on the issues involved in the final section A note on Open Source Temoa Project Documentation Release 2015 02 03 e Surrounding tools e An online presence Each of these pieces is fundamental to creating a transparent and usable model with a community oriented around collaboration 1 2 Why Temoa In short because we believe that EEO model analyses should be repeatable by independent third parties The only realistic method to make this happen is to have a freely available model and to create an ecosystem of freely shared data and model inputs For a longer explanation please see DeCarolisHunterSreepathi10 available from temoaproject org In summary EEO model based analyses are impossible to verify complex enough as to be non repeatable without electronic access to exact versions of code and data input hardly address uncertainty and yet are used to inform large scale public policy Especially in light of the last two points we believe that EEO model analyses should be completely open independently reproducible electronically available and address uncertainty about the future 1 3 Conventions We use the word Temoa
4. Some processes take a single input and make multiple outputs A subset of these processes have a constant ratio of outputs relative to their input The most canonical example is that of an oil refinery Crude oil is composed of many different types of hydrocarbons and the refinery process exploits the fact that they each have a different boiling point The amount of each type of product that a refinery produces is thus directly related to the makeup of the crude oil input The TechOutputSplit constraint assumes that the input to any process of interest has a constant ratio output For example a hypothetical and highly simplified refinery might have a crude oil input that only contains 4 parts diesel 3 parts gasoline and 2 parts kerosene The relative ratios to the output then are d 4 total output g 3 total output k 2 total output In constraint in set notation is SEO aia SP Lio i ACT sat 3 15 I Vip S d t V o Osplit output 22 Chapter 3 The Math Behind Temoa Temoa Project Documentation Release 2015 02 03 3 5 General Caveats Temoa does not currently provide an easy avenue to track multiple concurrent energy flows through a process Consider a cogeneration plant Where a conventional power plant might simply emit excess heat as exhaust a cogeneration plant harnesses some or all of that heat for heating purposes either very close to the plant or generally as hot water for district heating Temoa s
5. Temoa Project Documentation Release 2015 02 03 Kevin Hunter Joseph DeCarolis Sarat Sreepathi February 02 2015 CONTENTS Preface 1 Le Whoatis Temoa 25 4 226 ieee eRe tees dd et eed es PERS e D s 1 12 Why Temoa Doses ce et ce Beck o fod Aw Se Se hae aig Se ee ow ea Se 2 13 Conventions em eta Sa ee hae a a Oe eS a a al Gea Se Y 2 14 Temoa Origin and Pronunciation s s s ec aa A Ba SB a we a da a 3 1 5 Bug Reporte 266 bea ee EEA eae Ghee wee eee Sed ea ad 3 Quick Start 5 The Math Behind Temoa 7 E 8 312 Parameters o ecu rr de eS e a Be eu a e cee era e as 2 20 10 3 3 Variables ui e ae ow a ee eR a ew Se ee al Ge d 17 SA CONSWAINIS e aa ad oe A aA Ba a SORE a a Ge d 18 3 5 General Caveats 2 3 364 2d bee ae PEA SHG AER Se ee OE ARSE ET EES s 23 The Temoa Computational Implementation 25 A Pile Structure e avai e EWS e e s Be Ge ee he dite Acts ate ee iG ee age di Bie o 25 42 Anatomy ofa ConstralMt roms ss pee HRS a Ee Oe ME Se Ps 26 4 3 A Wotd on Verbosity 24 050 06456664 be A DEA Ae ea ke oa a A a a i 29 44 Visualization gt sos e e bbe e ra tat a Be BO Sk da gOS a Bok A e ae we amp 30 Interacting with Temoa 35 5 1 The Command Line e in sce ee wR ee EEE RS CE He ee Sd ee Pee eS 35 3 2 Exactly Whatis Temoa Dome cobos hae boas eee ees Shoes 37 5 3 The Bleeding Edge a chee ee ce RAY REM HA EAS A ER RRS ER ee d 38 Temoa Code Style Guide 41 6 1 Indentation Tabs MA Spaces visos oe dae PRADO eee a
6. somewhat interchangeably to describe the project as a whole as well as the optimiza tion model When the context does not make it obvious which is meant we delineate with Temoa Project and Temoa model Though TEMOA is an acronym for Tools for Energy Model Optimization and Analysis we generally use Temoa as a proper noun and so forgo the need for all caps Regardless either are acceptable pursuant to the needs of the situation In the mathematical notation we use CAPITALIZATION to denote a container like a set indexed variable or indexed parameter Sets use only a single letter so we use the lower case to represent an item from the set For example T represents the set of all technologies and t represents a single item from T Variables are named V_VarName within the code to aid readability However in the documentation where there is benefit of italics and other font manipulations we elide the V_ prefix In all equations we bold variables to distinguish them from parameters Take for example this excerpt from the Temoa default objective function Cmarginal 5 VC pt Rp j ACT v p t veOve Note that Cmarginal 18 not bold as it is a temporary variable used for clarity while constructing the objective function It is not a structural variable and the solver never sees it Where appropriate we put the variable on the right side of the coefficient In other words this is not a preferred form
7. GAMS Development 2003 DeCarolisHunterSreepathil0 Joseph DeCarolis Kevin Hunter and Sarat Sreepathi The TEMOA Project Tools for Energy Model Optimization and Analysis In International Energy Workshop 21 23 2010 FourerGayKernighan87 Robert Fourer David M Gay and Brian W Kernighan AMPL A Mathematical Program ming Language AT amp T Bell Laboratories Murray Hill NJ 07974 1987 Kallrath04 Josef Kallrath Modeling Languages in Mathematical Optimization volume 88 Springer 2004 Makhorin00 Andrew Makhorin Modeling Language GNU MathProg Relat rio T cnico 2000 51 Temoa Project Documentation Release 2015 02 03 52 Bibliography A Activity_Constraint in module temoa_rules 18 B BaseloadDiurnal_Constraint in module temoa_rules 20 C Capacity_Constraint in module temoa_rules 18 Capacity AvailableB yPeriodAndTech_Constraint in module temoa_rules 19 CommodityBalance_Constraint in module temoa_rules 19 D Demand_Constraint in module temoa_rules 19 DemandActivity_Constraint in module temoa_rules 20 E EmissionLimit_Constraint in module temoa_rules 21 ExistingCapacity_Constraint in module temoa_rules 21 M MaxCapacity_Constraint in module temoa_rules 22 P ProcessBalance_Constraint in module temoa_rules 19 R ResourceExtraction_Constraint in module temoa_rules 22 S Storage_Constraint in module temoa_rules
8. dem for S_t in M tech_all for S_v in M vintage_all for S_i in ProcessInputsByOutput p S_t S_v dem DemandConstraintErrorCheck supply dem p s d expr supply gt M Demand p dem M DemandSpecificDistribution s d dem return expr As this constraint is guaranteed to be called only for necessary demand constraint indices there is no need to check for the existence of a tuple in the Demand parameter The only other change is the error check on line 10 This function is defined in temoa_lib and simply ensures that at least one process supplies the demand dem in time slice p s d If no process supplies the demand then it quits computation immediately as opposed to completing a potentially lengthy model generation and waiting for the solver to recognize the infeasibility of the model Further the function lists potential places for the modeler to look to correct the problem This last capability is subtle but in practice extremely useful while building and debugging a model 4 3 A Word on Verbosity Implementing this same constraint in AMPL GAMS or MathProg would require only a single source line in a single file Using MathProg as an example it might look like s t DemandConstraint p s d dem in sDemand_psd_dem sum p s d Si St Sv dem in sFlowVar_psditvo V_FlowOut p s d Si St Sv dem pDemand p s d dem While the syntax is not a direct translation the indices of the constraint
9. 2015 Cap 0 17 55 2020 Cap 0 18 4 3 2025 NH 99 Cap 0 19 gt 5 36 electricity 14 11 2030 Be 38 cap 0 20 ee 43 2035 Cap 0 20 coal 6 50 47 2040 Cap 4 46 2045 Cap 0 37 Results for e_coal in 2045 Figure 4 3 This graphic shows the amount of installed capacity and total flow of energy through each vintage of a technology in a model period 4 4 Visualization 33 Temoa Project Documentation Release 2015 02 03 2015 Capacity 3 87 intermediate day 3 00 1 14 60 _ intermediate night 41 14 coal electricity AB __ 0 57 gt summer dd summer night Activity split of process e_coal 2015 in year 2025 Figure 4 4 Drilling down even further this image shows the individual time slice decisions the optimizer chose for a process in a model period 34 Chapter 4 The Temoa Computational Implementation CHAPTER FIVE INTERACTING WITH TEMOA 5 1 The Command Line Notwithstanding the graphical output afforded by Graphviz interaction with Temoa is currently a command line CLI venture Fortunately Temoa does not have many command line arguments so the cognitive effort required to understand the interaction is minimal After downloading the temoa py file from http temoaproject org open a command line and run it with coopr_python coopr_python temoa py usage temoa py h graph format GRAPH_FORMAT show_capacity graph_type GRAPH_TYPE
10. M vintage_exist if l_process not in l_exist_indices msg Warning s has a specified Efficiency but does not have any existing install base ExistingCapacity n have any existing install base ExistingCapacity n SE write msg str l_process continue if 0 M ExistingCapacity l_process This manual will not discuss the file format layout or how to explicitly write code for Temoa For that please direct questions and discussion to the Temoa user forum 40 Chapier 5 Interacting with Temoa CHAPTER SIX TEMOA CODE STYLE GUIDE It is an open question in programming circles whether code formatting actually matters The Temoa Project developers believe that it does for these main reasons e Consistently formatted code reduces the cognitive work required to understand the structure and intent of a code base Specifically we believe that before code is to be executed it is to be understood by other humans The fact that it makes the computer do something useful is a happy coincidence e Consistently formatted code helps identify code smell e Consistently formatted code helps one to spot code bugs and typos more easily Note however that this is a style guide not a strict ruleset There will also be corner cases to which a style guide does not apply and in these cases the judgment of what to do is left to the implementers and maintainers of the code base To this end the Python project h
11. Max and Min constraint calculations For any process with an end of life EOL on a period boundary all of its capacity is available for use in all periods in which it is active the process TLF is 1 However for any process with an EOL that falls between periods Temoa makes the simplifying assumption that the available capacity from the expiring technology is available through the whole period but only as much percentage as its lifespan through the period For example if a process expires 3 years into an 8 year period then only 3 of the installed capacity is available for use throughout the period CAPAVL X TLF pty CAP 3 3 V VpeP teT 3 4 2 Network Constraints These three constraints define the core of the Temoa model Together they create the algebraic network The Demand constraint drives the right side of the energy system map the ProcessBalance constraint ensures flow through a process and the CommodityBalance constraint ensures flow between processes temoa_rules Demand_Constraint M p s d dem The Demand constraint drives the model This constraint ensures that supply at least meets the demand specified by the Demand parameter in all periods and slices by ensuring that the sum of all the demand output commodity c generated by FO must meet the modeler specified demand in each time slice 5 FO s 4 i t 0 dem gt DEM p dem d DSDs d dem 3 4 ITV vip S d dem Odemand Note that the validity of this
12. R Global rate used to calculate present cost GRM GrowthRateMax R Global rate used to calculate present cost GRS GrowthRateSeed R Global rate used to calculate present cost LEN LifetimeLoan N Tech and vintage specific loan term LTC 4 0 LifetimeTech N Tech and vintage specific lifetime MAX MaxCapacity Ro maximum tech specific capacity by period MIN MinCapacity Ro minimum tech specific capacity by period RSC ce ResourceBound Ro Upper bound on resource use SEG a SegFrac Fraction of year represented by each s d tuple TIS TechInputSplit Technology input fuel ratio TOS o TechOutputSplit Technology output fuel ratio LA LoanAnnualize RE Loan amortization by tech and vintage based on DR MLL v ModelLoanLife N Smaller of model horizon or process loan life MTLp 2 0 Model TechLife N Smaller of model horizon or process tech life LEN PeriodLength N Number of years in period p Rp PeriodRate R Converts future annual cost to discounted period cost TLE t 0 TechLifetimeFrac Fraction of last time period that tech is active 3 2 1 Efficiency EFFiec teTveV 0eC As it is the most influential to the rest of the Temoa model we present the efficiency EF F parameter first Beyond defining the conversion efficiency of each process Temoa also utilizes the indices to understand the valid input process output paths for energy For instance if a modeler does not specify an efficiency for a 2020 vintage coal power plant t
13. Temoa Project Documentation Release 2015 02 03 The Cost Invest parameter specifies the cost of the loan Unlike the CostFixed and CostVariable pa rameters Cost Invest only applies to vintages of technologies within the model optimization horizon P Like CostFixed CostInvest is specified in units of currency per unit of capacity and is only used in the default CUR objective function Di Cap A 3 2 7 CostVariable MOypepyteT vev The CostVariable parameter is a measure of the cost of a unit of activity of an installed process It is specified as a unit of currency per a unit of activity and is only used in the default objective function 3 2 8 Demand DEM pepeeci The Demand parameter allows the modeler to define the total end use demand levels for all periods In combination with the Efficiency parameter this parameter is the most important because without it the rest of model has no incentive to build anything In terms of the system map this parameter specifies the far right To specify the distribution of demand look to the DemandDefaultDistribution DDD and DemandSpecificDistribution DSD parameters As a historical note this parameter was at one time also indexed by season and time of day allowing modelers to specify exact demands for every time slice However while extremely flexible this proved too tedious to maintain for any data set of appreciable size Thus we implemented the DDD and DSD parameters
14. a a i 41 6 2 End of Line Whitespace s pc morena bees a ee A lS eS amp Gee Sw By Bow E 42 6 3 Maximum Lime Length ss e eee 4 4484 e e e 44 CRE De we ee ee eRe eae Se 42 64 Blank Eames siei once age see ce AA o ac Bde NaN aes a Goede A eee dat 42 0 BMCOGINGS s 5 20 4 demas a Ge a bo Bee Bae ae ie 89 ae la aces amp ds 42 6 6 Pu nctuationand Spacing s coe e bet he beet eh eee eS eS a See Sat BSS 43 6 7 Vertical Alisniment 4 aaa a e WA Sle ae eR ee WE Sl ee Eee 43 6 3 Single Double and Triple Quotes ee fe cee iG Bde eee de Bog glows wees 43 6 9 Naming Conventions sss 2 64 030 82 ce e eee SR A RE i 44 6 10 In line Implementation Conventions 2 2 ee 44 6 11 Miscellaneous Style Conventions s s ssc seoda 8 pO SRR ER EE de de 45 6 12 Patches and Commits to the Repository 200000222 eee eee 46 7 A note on Open Source Bibliography Index 49 51 53 CHAPTER ONE PREFACE This manual in both PDF and HTML form is the official documentation of the Temoa Project It describes all functionality of the Temoa model and explains the mathematical underpinnings of the implemented equations Besides this documentation there are a couple other sources for Temoa oriented information The most interactive is the mailing list and we encourage any and all Energy Economy Optimization EEO related questions Publications are good introductory resources but are not guaranteed to be the most up t
15. a licensee using your code similarly under the terms of the AGPL Executing licensing in this manner rather than requesting IP assignment ensures that no one group of code contributers may unilaterally change the license of Temoa unless all contributers agree in writing in a publicly archived forum such as the Temoa Forum e When you are ready to submit your set of patch es to the Temoa Project we will utilize GitHub s Pull Request mechanism 6 12 Patches and Commits to the Repository 47 Temoa Project Documentation Release 2015 02 03 48 Chapter 6 Temoa Code Style Guide CHAPTER SEVEN A NOTE ON OPEN SOURCE Though Temoa s stature as an open source product is enforced by the AGPL the code is only half the battle The other half involves the exact input fed to Temoa to create an analysis and there is no method available to require modelers to share the inner workings of their analyses Specifically this means that if a modeling team makes changes to the Temoa codebase and publishes an analysis based on them their is no legal requirement to share either the code or the input data To that end all we can do is plea to modeling teams to do the right thing and be transparent about all aspects of an analysis 49 Temoa Project Documentation Release 2015 02 03 50 Chapter 7 A note on Open Source BIBLIOGRAPHY BrookeRosenthal03 Anthony Brooke and Richard E Rosenthal GAMS
16. code base then take a look at the Temoa repository To acquire a copy make sure you have Git installed on your local machine then execute this command to clone the repository git clone git github com hunteke temoa git Cloning into temoa remote Counting objects 2386 done remote Compressing objects 100 910 910 done 38 Chapter 5 Interacting with Temoa Temoa Project Documentation Release 2015 02 03 remote Total 2386 delta 1552 reused 2280 delta 1446 Receiving objects 100 2386 2386 2 79 MiB 1 82 MiB s done Resolving deltas 100 1552 1552 done You will now have a new subdirectory called temoa that contains the entire Temoa Project code and archive history Note that Git is a distributed source code management tool This means that by cloning the Temoa repository you have your own copy to which you are welcome and encouraged to alter and make commits to It will not affect the source repository Though this is not a Git manual we recognize that many readers of this manual may not be software developers so we offer a few quick pointers to using Git effectively If you want to see the log of commits use the command git log git log 1 commit b5bddea7312c34c5c44fe5cce2830cbf5b9f0f3b Date Thu Jul 5 03 23 11 2012 0400 Update two APIs I had updated the internal global variables to use the _psditvo naming scheme and had forgotten to make the changes to _graphviz py Coopr also
17. constraint relies on the fact that the C set is distinct from both C and CP In other words an end use demand must only be an end use demand Note that if an output could satisfy both an end use and internal system demand then the output from FO would be double counted Note also that this constraint is an inequality not a strict equality Supply must meet or exceed demand Like with the ProcessBalance constraint if this constraint is not binding it may be a clue that the model under inspection could be more tightly specified and could have at least one input data anomaly temoa_rules ProcessBalance_Constraint M p s d i t v 0 The ProcessBalance constraint is one of the most fundamental constraints in the Temoa model It defines the basic relationship between the energy entering a process FI and the energy leaving a processing FO This constraint sets the F LowOut variable upon which all other constraints rely Conceptually this constraint treats every process as a black box caring only about the process efficiency In other words the amount of energy leaving a process cannot exceed the amount coming in Note that this constraint is an inequality not a strict equality In most sane cases the optimal solution should make this constraint and supply should exactly meet demand If this constraint is not binding it is likely a clue that the model under inspection could be more tightly specified and has at least one i
18. example T represents the set of all technologies and t represents an item within 7 8 Chapter 3 The Math Behind Temoa Temoa Project Documentation Release 2015 02 03 The code representation is more verbose than the algebraic version using full words This documentation presents them in an italicized font The same example of all technologies is represented in the code as tech_a11 Note that regardless the meanings are identical with only minor interaction differences inherent to implementation details Table 1 lists all of the Temoa sets with both notational schemes Their are four basic set groups within Temoa periods annual slices technology and energy commodities The technological sets contain all the possible energy technologies that the model may build and the commodities sets contain all the input and output forms of energy that technologies consume and produce The period and slice sets merit a slightly longer discussion Temoa s conceptual model of time is broken up into three levels e Periods consecutive blocks of years marked by the first year in the period For example a two period model might consist of pf 2010 2015 2025 representing the two periods of years from 2010 through 2014 and from 2015 through 2024 e Seasonal Each year may have multiple seasons For example winter might demand more heating while spring might demand more cooling and transportation e Daily Within a s
19. interaction with Graphviz is entirely text based As RCS systems excel at handling text the input files created by Temoa for Graphviz can simultaneously provide another vector for model debugging and a space efficient archive of visualizations for posterity and auditing purposes In addition we have taken care to make these intermediate files well formatted so that a human eye may understand them without undue effort 3 SVG support in web browsers is currently hit or miss The most recent versions of Chromium Google Chrome and Mozilla Firefox support SVG well enough for Temoa s current use of SVG 30 Chapter 4 The Temoa Computational Implementation Temoa Project Documentation Release 2015 02 03 Figure 4 1 This is a dynamically created image of one of the energy systems supplied with the Temoa example data sets It shows the possible flows energy could take in the energy system providing a good overview of the system 4 4 Visualization 31 Temoa Project Documentation Release 2015 02 03 36912 34 19102 77 1120 00 57757 50 gt ai 1120 00 1008 00 O e 1008 00 Results for 2045 Figure 4 2 The solved system graph showing the high level flow energy actually took in a period of the optimal system configuration 32 Chapter 4 The Temoa Computational Implementation Temoa Project Documentation Release 2015 02 03 Vintages Capacity 9 11 2010 Cap 3 34 X 89 50
20. of energy entering and leaving a storage technology 1s balanced over the course of a day accounting for the conversion efficiency of the storage process This constraint relies on the assumption that the total amount of storage related energy is small compared to the amount of energy required by the system over a season If it were not the algorithm would have to account 20 Chapter 3 The Math Behind Temoa Temoa Project Documentation Release 2015 02 03 for season to season transitions which would require an ordering of seasons within the model Currently each slice is completely independent of other slices 2 EFF tvo FL s d i t v o FO dto 0 3 9 vip S t t V o Ostorage 3 4 4 Objective Function temoa_rules TotalCost_rule M Using the Activity and Capacity variables the Temoa objective function calculates the costs associated with supplying the system with energy under the assumption that all costs are paid for through loans rather than with lump sum sales This implementation sums up all the costs incurred by the solution and is defined as Cot Cloans Crixea Cvariable Similarly each term on the right hand side is merely a summation of the costs incurred multiplied by an annual discount factor to calculate the discounted cost in year Po 1 GDR Po 1 1 1 GDR ML Cioans 5 fren i LA i C i CAR tveOro G GpR ati 1 1 GDR Mu p t veOrc Cvariable 5
21. parameter is analogous to the maximum capacity parameter except that 1t specifies the minimum capacity for which Temoa must ensure installation 3 2 20 ResourceBound RSC pe P ceCp This parameter allows the modeler to specify resources to constrain per period Note that a constraint in one period does not relate to any other periods For instance if the modeler specifies a limit in period 1 and does not specify a limit in period 2 then the model may use as much of that resource as it would like in period 2 3 2 21 SegFrac SEG ses deD The SegF rac parameter specifies the fraction of the year represented by each combination of season and time of day The sum of all combinations within SegF rac must be 1 representing 100 of a year 3 2 22 TechinputSplit SPLiec ter Some technologies have a single output but have multiple input fuels For the sake of modeling certain technologies require a fixed apportion of relative input See the TechOutputSplit constraint for the implementation concept 3 2 23 TechOutputSplit SP LicT occ Some technologies have a single input fuel but have multiple output forms of energy For the sake of modeling certain technologies require a fixed apportion of relative output For example an oil refinery might have an input energy of crude oil and the modeler wants to ensure that its output is 70 diesel and 30 gasoline See the TechOutputSplit constraint for the implementation details 3 2 Paramet
22. set to maintain a constant output for all daily slices Note that this allows the model to not use a baseload process in a season and only applies over the time_of_day set Ideally this constraint would not be necessary and baseload processes would simply not have a d index How ever implementing the more efficient functionality is currently on the Temoa TODO list SEGs Do ACT satu SEGs a ACT 5 5 Do t v 3 7 Vip S d t v Obaseload temoa_rules DemandActivity Constraint M p s d t v dem s_0 d_0 For end use demands it is unreasonable to let the optimizer only allow use in a single time slice For instance 1f household A buys a natural gas furnace while household B buys an electric furnace then both units should be used throughout the year Without this constraint the model might choose to only use the electric furnace during the day and the natural gas furnace during the night This constraint ensures that the ratio of a process activity to demand is constant for all time slices Note that if a demand is not specified in a given time slice or is zero then this constraint will not be considered for that slice and demand This is transparently handled by the O superset DEMb s d dem s Y FO Loan DEMb so do dem i 5 FO 5 d i t v dem 3 8 I T vip S d t VU dem 50 do Odemand activity temoa_rules Storage_Constraint M p s i t v 0 Temoa s algorithm for storage is to ensure that the amount
23. updated their API with the new sparse_ methods You can also explore the various development branches in the repository ls data_files stochastic temoa_model create_archive sh README txt git branch a energysystem remotes origin HEAD gt origin energysystem remotes origin energysystem remotes origin exp_electric_load_duration_reorg remotes origin exp_electricity_sector remotes origin exp_energysystem_flow_based remotes origin exp_energysystem_match_markal remotes origin exp_energysystem_test_framework remotes origin misc_scripts remotes origin old_energysystem_coopr2 remotes origin temoaproject org git checkout exp_energysystem_match_markal Branch exp_energysystem_match_markal set up to track remote branch exp_energysystem_match_markal from origin Switched to a new branch exp_energysystem_match_markal S Ls temoa_model create_archive sh utopia markal 20 dat compare_with_utopia 15 py README txt compare_with_utopia 20 py utopia markal 15 dat To view exactly what changes you have made since the most recent commit to the repository use the di f f command to git git diff diff git a temoa_model temoa_lib py b temoa_model temoa_lib py index 4ff9b30 0bal5b0 100644 a temoa_model temoa_lib py 5 3 The Bleeding Edge 39 Temoa Project Documentation Release 2015 02 03 b temoa_model temoa_lib py 246 7 246 7 def InitializeProcessParameters M if l_vin in
24. 0 2020 10 Note that LEN is only defined for elements in P and is specifically not defined for the final element in P 3 2 26 PeriodRate Rpep Temoa optimizes a single characteristic year within a period and differentiates the n copies of that single year solely by the appropriate discount factor Rather than calculating the same summation for every technology and vintage within a period we calculate it once per period and lookup the sum as necessary during the objective function generation The formula is the sum of discount factors corresponding to each year within a period LEN R Y y 0 1 1 GDR Yp P 16 Chapter 3 The Math Behind Temoa Temoa Project Documentation Release 2015 02 03 Note that this parameter is the implementation of the single characteristic year optimization per period concept discussed in the Sets section 3 2 27 TechLifeFrac TLF yepteT vev The modeler may specify a useful lifetime of a process such that the process will be decommissioned part way through a period Rather than attempt to delineate each year within that final period Temoa makes the choice to average the total output of the process over the entire period but limit the available capacity and output of the decommissioning process by the ratio of how long through the period the process is active This parameter is that ratio formally defined as v LT Ci w p LEN TLF tw Vip t v O
25. 2 06 22 17 21 pformat_results py 42167 2012 07 05 03 17 temoa_rules py 1698 2012 06 22 17 21 temoa_stochastic py 44670 2012 07 05 03 22 temoa_graphviz py 13910 2012 07 05 03 18 temoa_model py 30366 2012 07 05 04 29 temoa_lib py 86 2012 06 22 17 21 __main__ py 52 2012 06 22 17 21 __ init__ py 137093 9 files To work with the files make a directory and unpack the archive mkdir temoa_model S cd temoa_model unzip temoa py Archive temoa py warning temoa py 28 extra bytes at beginning or within zipfile attempting to process anyway linking ReferenceModel py gt temoa_stochastic py inflating pformat_results py inflating temoa_rules py inflating temoa_stochastic py inflating temoa_graphviz py inflating temoa_model py inflating temoa_lib py inflating __main__ py inflating __init__ py finishing deferred symbolic links ReferenceModel py gt temoa_stochastic py cd If you want to make a change to Temoa there is no need to repack it into temoa py Instead Python can execute the directory directly coopr_python temoa_model usage temoa_model h graph_format GRAPH_FORMAT show_capacity graph_type GRAPH_TYPE use_splines dot_dat dot_dat temoa_model error too few arguments 5 3 The Bleeding Edge The Temoa Project uses the Git source code management system and the services of Github com If you are inclined to work with the bleeding edge of the Temoa Project
26. 2 26 3 20100126 1600 dot Txxx Format xxx not recognized Use one of canon cmap cmapx cmapx_np dot eps fig gd gd2 gif gv imap imap_np ismap jpe jpeg jpg pdf plain plain ext png ps ps2 svg svgz tk vml vmlz vrml wbmp x11 xdot xlib From the list of available outputs one might be interested in an interactive map with SVG so temoa py test dat graph_format svg gt test sol 0 04 Reading data files Creating Temoa model instance Warning t_oil_refinery 2000 has a Warning t_elccar 2000 has a specified Efficiency but does not have any ex Warning t_oil_refinery 2000 has a specified Efficiency but does not have 0 43 0 81 Solving 0 86 Formatting results 0 93 Creating Temoa model diagrams The generated image might look like Figure 4 1 5 2 Exactly What is Temoa Doing At some point a modeler may be curious to open up the tiny file that is temoa py to peek under the hood Luckily temoa py is merely a standard ZIP file with 28 bytes of extra information to interoperate with Python This means that a standard ZIP manipulation program can view and unpack the contents of the archive unzip 1 temoa py Archive temoa py warning temoa py 28 extra bytes at beginning or within zipfile 5 2 Exactly What is Temoa Doing 37 Temoa Project Documentation Release 2015 02 03 attempting to process anyway Length Date Time Name 19 2012 06 22 17 21 ReferenceModel py 4125 201
27. 20 T TechInputSplit_Constraint in module temoa_rules 22 TechOutputSplit_Constraint in module temoa_rules 22 TotalCost_rule in module temoa_rules 21 INDEX 53
28. 3 2 9 DemandDefaultDistribution DDDses dep By default Temoa assumes that end use demands Demand are evenly distributed throughout a year In other words the Demand will be apportioned by the SegFrac parameter via EndUseDemand q c SegFrac Demand Temoa enables this default action by automatically setting DDD equivalent to SegF rac for all seasons and times of day If a modeler would like a different default demand distribution the modeler must specify any indices of the DDD parameter Like the SegFrac parameter the sum of DDD must be 1 3 2 10 DemandSpecificDistribution DSDses deD cec If there is an end use demand that does not follow the default distribution for example heating or cooling in the summer or winter the modeler may specify as much with this parameter Like SegFrac and DemandDefaultDistribu tion the sum of DSD for each c must be 1 If the modeler does not define DSD for a season time of day and demand commodity Temoa automatically populates this parameter according to DDD It is this parameter that is actually multiplied by the Demand parameter in the Demand constraint 3 2 Parameters 13 Temoa Project Documentation Release 2015 02 03 3 2 11 DiscountRate DRier In addition to the GlobalDiscountRate a modeler may also specify a technology specific discount rate If not specified this rate defaults to the GDR to represent a social discount rate 3 2 12 EmissionActivity EAC e
29. MC tv i Ry i ACT v p t veOve In the last sub equation Rp is the equivalent operation to the inner summation of the other two sub equations The difference is that where the inner summations specifically account for the fixed and loan costs of partial period processes the activity is constant for all years within a period There is thus no need to calculate the time value of money factor for each process and instead R is calculated once for each period as a pseudo parameter While this amounts to little more than an efficiency of model generation it is pedagogically signifi cant in that it highlights the fact that Temoa optimizes only a single characteristic year within each period 3 4 5 User Specific Constraints The constraints provided in this section are not required for proper system operation but allow the modeler some further degree of system specification temoa_rules ExistingCapacity Constraint M t v Temoa treats residual capacity from before the model s optimization horizon as regular processes that require the same parameter specification in the data file as do new vintage technologies e g entries in the efficiency table except the Cost Invest parameter This constraint sets the capacity of processes for model periods that exist prior to the optimization horizon to user specified values CAP ECAP v 3 10 V t v existing temoa_rules EmissionLimit_Constraint M p e A modeler can track emissions
30. The preferred place to break around a binary operator is after the operator not before it Some examples class Rectangle Blob def __init__ self width height color black emphasis None highlight 0 if width 0 and height 0 and color red and emphasis strong or highlight gt 100 raise ValueError sorry you lose if width 0 and height 0 and color red or emphasis is None raise ValueError I don t think so values are format width height Blob __init__ self width height color emphasis highlight 6 4 Blank Lines e Separate logical sections within a single function with a single blank line e Separate function and method definitions with two blank lines e Separate class definitions with three blank lines 6 5 Encodings Following PEP 3120 all code files should use UTF 8 encoding 42 Chapter 6 Temoa Code Style Guide Temoa Project Documentation Release 2015 02 03 6 6 Punctuation and Spacing Always put spaces after code punctuation like equivalence tests assignments and index lookups a b bad a b good a b bad a b good afb c bad alb cc good exception if there is more than one index al b c d acceptable but not preferred alb c d good preferred exception if using a string literal don t include a space al x bad a x good When defining a function or method put a single
31. about the solve This way the modeler can view the output later or post process it as necessary 36 Chapier 5 Interacting with Temoa Temoa Project Documentation Release 2015 02 03 temoa py test dat gt test sol 0 04 Reading data files Creating Temoa model instance Warning t_oil_refinery 2000 has a Warning t_elccar 2000 has a specified Efficiency but does not have any ex Warning t_oil_refinery 2000 has a specified Efficiency but does not have 0 44 0 81 Solving 0 86 Formatting results head test sol Model name TEMOA Entire Energy System Economic Optimization Model Objective function value TotalCost 398469346 331 Non zero variable values 395 535714285714 V_Activity 2010 summer day imp coal 2000 2 480158730159 V_Activity 2010 summer day imp gs1l 2000 197 767857142857 V_Activity 2010 summer day t coal 1990 39 553571428571 V_Activity 2010 summer day t elccar 2010 0 446428571429 V_Activity 2010 summer day t gascar 2000 98 883928571429 V_Activity 2010 summer night imp coal 2000 1 240079365079 V_Activity 2010 summer night imp gsl 2000 The next command line of real interest is graph_format If Graphviz is installed on the machine then specifying any output format that Graphviz supports will generate set of graphs First test if Graphviz is available then see what output formats it supports dot V dot graphviz version
32. activity by PTV v LTC P v LTC lt max F p maz Plp lt v LTC Note that this parameter is defined over the same indices as Cost Variable the active periods for each process p t v As an example if a model has P 2010 2012 2020 2030 and a process t v car 2010 has a useful lifetime of 5 years then this parameter would include only the first two activity indices for the process Namely p 2010 2012 as p t v 2010 car 2010 2012 car 2010 The values would be TLF 2910 car 2010 1 and T LF 29012 car 2010 3 In combination with the PeriodRate parameter this parameter is used to implement the single characteristic year simplification Specifically instead of trying to account for partial period decommissioning Temoa assumes that processes can only produce TechLifeFrac of their installed capacity 3 3 Variables The Table 3 3 Temoa s Main Variables Variable Temoa Name Domain Short Description Flosditwo V_Flowln Ro Commodity flow into a tech to produce a given output FOp s d i t v 0 V_FlowOut Ro Commodity flow out of a tech based on a given input ACT s d t v V_Activity Ro Total tech commodity production in each s d tuple CAP V_Capacity Ro Required tech capacity to support associated activity CAPAV Lp V_CapacityAvailable Ro The Capacity of technology t available in period p ByPeriodAndTech most fundamental variables in
33. aight lines not splines Solving a model simply requires a data file The Temoa Project supplies example data files on the website One of those data files is called test dat temoa py test dat 0 04 Reading data files Creating Temoa model instance Warning t_oil_refinery 2000 has a Warning t_elccar 2000 has a specified Efficiency but does not have any ex Warning t_oil_refinery 2000 has a specified Efficiency but does not have 0 43 0 80 Solving 0 85 Formatting results Model name TEMOA Entire Energy System Economic Optimization Model Objective function value TotalCost 398469346 331 Non zero variable values 395 535714285714 V_Activity 2010 summer day imp coal 2000 2 480158730159 V_Activity 2010 summer day imp gsl 2000 197 767857142857 V_Activity 2010 summer day t coal 1990 39 553571428571 V_Activity 2010 summer day t elccar 2010 0 446428571429 V_Activity 2010 summer day t gascar 2000 wats J The model world described by test dat is incredibly simple and so solves near instantaneously The output is extensive enumerating the value of all variables for the optimal configuration so we show just the first few lines in the documentation It is enough to get a sense of it however Temoa provides line by line output as progresses through each stage of a solve The very first line explains that Temoa took 0 04 processing seconds to read and
34. as a well written treatise in PEP 8 A Foolish Consistency is the Hobgoblin of Little Minds One of Guido s key insights is that code is read much more often than it is written The guidelines provided here are intended to improve the readability of code and make it consistent across the wide spectrum of Python code As PEP 20 says Readability counts A style guide is about consistency Consistency with this style guide is important Consistency within a project is more important Consistency within one module or function is most important But most importantly know when to be inconsistent sometimes the style guide just doesn t apply When in doubt use your best judgment Look at other examples and decide what looks best And don t hesitate to ask Two good reasons to break a particular rule 1 When applying the rule would make the code less readable even for someone who is used to reading code that follows the rules 2 To be consistent with surrounding code that also breaks it maybe for historic reasons although this is also an opportunity to clean up someone else s mess in true XP style 6 1 Indentation Tabs and Spaces The indentation of a section of code should always reflect the logical structure of the code Python enforces this at a consistency level but we make the provision here that real tabs specifically not spaces should be used at the beginning of lines This allows the most flexibility across
35. assumed to be ordered such that the minimum element is naught For example if pf 2015 2020 2030 then P 2015 In other words the capital P with the naught subscript indicates the first element in the time_future set We will explain the reason for this deviation shortly The second set of deviations revolves around the use of the Theta superset O The Temoa code makes heavy use of sparse sets for both correctness and efficient use of computational resources For brevity and to avoid discussion of some implementation details we do not enumerate their logical creation here Instead we rely on the readers general understanding of the context For example in the sparse creation of the constraints of the Demand constraint class explained in Network Constraints and Anatomy of a Constraint we state simply that the constraint is instantiated for all the p s d dem tuples in Odemana This means that the constraint is only defined for the exact indices for which the modeler specified end use demands via the Demand parameter Summations also occur in a sparse manner Take equation 3 1 as an example described in Decision Variables ACT eden gt PO is I O vip d t v Oactivity It defines the Activity variable for every valid combination of p s d t v as the sum over all inputs and outputs of the FlowOut variable A naive implementation of this equation might include nonsensical items in each summatio
36. cal optimization has a small community its open source segment even smaller and the EEO segment significantly smaller than that the Python community is huge and encompasses many disciplines This means that where a developer may struggle to find an answer implementa tion or workaround to a problem with a more standard AML Python will likely enable a community suggested solution e Powerful documentation tools One of the available toolsets in the Python world is documentation generators that dynamically introspect Python code While it is possible to inline and block comment with more traditional AMLs the integration with Python that many documentation generators have is much more powerful Temoa uses this capability to embed user oriented documentation literally in the code and almost every constraint has a block comment Having both the documentation and implementation in one place helps reduce the mental friction and discrepancies often involved in maintaining multiple sources of model authority e AMLs are not as concise as thought This last point is somewhat esoteric but consider the MathProg implementation of the Demand constraint in contrast with the last line of the Pyomo version expr supply gt M Demand p s d dem While the MathProg version indeed translates more directly to standard notation consider that standard notation itself needs extensive surrounding text to explain the significance of an equation Why does th
37. cles represent distinct types of energy carriers The most fundamental tenet of the model is the understanding of energy flow treating all processes as black boxes that take inputs and produce outputs Specifically Temoa does not care about the inner workings of a process only its global input and output characteristics In this vein the above graphic can be broken down into per process segments For example the coal power plant takes as input coal and produces electricity and is subject to various costs e g variable costs and constraints e g efficiency along the way Temoa Project Documentation Release 2015 02 03 Figure 3 2 The model does not assign any weight to the input or output commodities of a process just the engineering characteristics for use of the process itself Process coal_power_plant installed capacity efficiency install cost fixed cost variable cost emission per unit activity useful life loan life Input V_FlowIn Output V_FlowOut The modeler defines the processes and engineering characteristics through an amalgam of sets and parameters de scribed in the next few sections Temoa then translates these into variables and constraints that an optimizer may then solve 3 1 Sets Table 3 1 List of all Temoa sets with which a modeler might interact The asterisked elements are automatically derived by the model and are not user specifiable Set Temoa Name Data Type Sh
38. e Ce i t 0 0 etticiency Temoa currently has two methods for enabling a process to produce an output the Efficiency parameter and the EmissionActivity parameter Where the Efficiency parameter defines the amount of output energy a process produces per unit of input the EmissionActivity parameter allows for secondary outputs As the name suggests this parameter was originally intended to account for emissions per unit activity but it more accurately describes parallel activity For the time being it is restricted to emissions accounting by the e C set restriction but an item on the Temoa TODO list is to upgrade the use of this parameter For instance Temoa does not currently provide an easy avenue to model a dual function process such as a combined heat and power plant 3 2 13 EmissionLimit ELM pePeece The EmissionLimit parameter is fairly self explanatory ensuring that Temoa finds a solution that fits within the modeler specified limit of emission e in time period p 3 2 14 ExistingCapacity ECAP er vere In contrast to some competing models technologies in Temoa can have vintage specific characteristics within the same period Thus Temoa treats existing technological capacity as processes requiring all of the engineering characteristics of a standard process This is Temoa s answer to what some call residual capacity 3 2 15 GlobalDiscountRate GDR In financial circles the value of mon
39. e equation compare the sum of a subset of FlowOut to Demand In Temoa s implementation a high level understanding of what a constraint does requires only the last line of code Supply must meet demand 4 4 Visualization From the definition of the Temoa model as an algebraic network of linked processes a directed network graph is a natural visualization Temoa utilizes a graphic package called Graphviz to create a series of data specific and interactive energy system maps The graphs are available in any format Graphviz provides including scalable vector graphics SVG portable network graphics PNG portable document format PDF and encapsulated postscript E PS Currently the output graphs consist of a pre results possible energy map and results per model period including breakdowns of individual technology activity Here are some examples of the graphical outputs Temoa can dynamically create Contrary to the static nature of other image file formats e g PNG SVG is a text based format XML with a much richer set of information encoding possibilities than mere image display On top of being infinitely scalable the SVG format allows the inclusion of links and hyperlinks Temoa exploits this capability to make interactive system and solution graphs Currently this means that one can use a web browser to view and interact with the generated SVG images Regardless of the final visual format chosen the programmatic
40. eason a day might have various times of interest For instance the peak electrical load might occur midday in the summer and a secondary peak might happen in the evening There are two specifiable period sets time_exist P and time_future P The t ime_exist set contains periods before time_future Its primary purpose is to specify the vintages for capacity that exist prior to the model optimization This is part of Temoa s answer to what most other efforts model as residual capacity The time_future set contains the future periods that the model will optimize As this set must contain only integers Temoa interprets the elements to be the boundaries of each period of interest Thus this is an ordered set and Temoa uses its elements to automatically calculate the length of each optimization period modelers may exploit this to create variable period lengths within a model To our knowledge this capability is unique to Temoa Temoa names each optimization period by the first year and makes them easily accessible via the t ime_opt imize set This final period set is not user specifiable but is an exact duplicate of time_ future less the largest element In the above example since Pf 2010 2015 2025 time_opt imi ze does not contain 2025 P 2010 2015 One final note on periods rather than optimizing each year within a period individually Temoa makes a simplifying assumption that each period contains n copies o
41. egration we recommend the GNU Linear Programming Kit with two caveats a The GLPK project does not directly provide a Windows version We suggest WinGLPK b For larger data sets you may need to invest in a commercial solver 3 COOPR https software sandia gov trac coopr e COOPR is a set of Python Optimization libraries Temoa mainly uses Pyomo After the above 3 items are installed and tested download both the Temoa model and the example data sets Then run Temoa from your operating system s command line interface In the example lines beginning with the dollar symbol canonically represent a Unix command line Windows prompts will likely end with a right caret gt coopr_python temoa py h usage temoa py h graph_format GRAPH_FORMAT show_capacity graph_type GRAPH_TYPE use_splines dot_dat dot_dat output trimmed for brevity coopr python temoa py utopia dat 0 08 Reading data files 0 96 Creating Temoa model instance 1 65 Solving 1 77 Formatting results Model name Temoa Entire Energy System Economic Optimization Model Objective function value TotalCost 35657 0718528 Non zero variable values 0 578040628071 V_Activity 1990 inter day E01 1960 0 1445872 V_Activity 1990 inter day E31 1980 output trimmed for brevity 1 Circa 2013 GLPK uses more memory than commercial alternatives and has vastly weaker presolve capabilities
42. entioned here p s d i t v 0 is the canonical ordering If you note any case where for example d comes before s that is an oversight In general if there is an index ordering that does not follow this rubric we view that as a bug 3 1 Sets 9 Temoa Project Documentation Release 2015 02 03 Annual Energy Use as a Percentage of Time Value of Annual Costs asa AI First Year in Period Percentage of First Year in Period 160 100 50 Year Year in Period Year in Period Figure 3 3 The left graph is of energy while the right graph is of the annual costs In other words the energy used in a period by a process is the same for all years with exception for those processes that cease their useful life mid period However even though the costs incurred will be the same the time value of money changes due to the discount rate As the fixed costs of a process are tied to the length of its useful life those processes that do not fall on a period boundary require unique time value multipliers in the objective function 3 1 2 Deviations from Standard Mathematical Notation Temoa deviates from standard mathematical notation and set understanding in two ways The first is that Temoa places a restriction on the time set elements Specifically while most optimization programs treat set elements as arbitrary labels Temoa assumes that all elements of the time_existing and time_future sets are integers Further these sets are
43. erning these variables the Constraints section 3 4 Constraints There are 4 main equations that govern the flow of energy through the model network The DemandConstraint ensures that the supply meets demand in every time slice For each process the ProcessBalance ensures at least as much energy enters a process as leaves it conservation of energy at the process level Between processes the CommodityBalance ensures that at least as much of a commodity is generated as is demanded by other process inputs In combination those three constraints ensure the flow of energy through the system The final calculation the objective function is what puts a monetary cost to the actions dictated by the model The rest of this section defines each model constraint with a rationale for existence We use the implementation specific names for the constraints as both an artifact of our documentation generation process and to highlight the organization of the functions within the actual code They are listed roughly in order of importance 3 4 1 Decision Variables These first two constraints elucidate the relationship among decision variables in the model There is some overlap with the rest of the constraints but these are unique enough to warrant special attention to a Temoa modeler temoa_rules Activity_Constraint M p s d t v The Activity constraint defines the Activity convenience variable The Activity variable is mainly used in the objective
44. ers 15 Temoa Project Documentation Release 2015 02 03 3 2 24 LoanAnnualize LAter ver This is a model calculated parameter based on the process specific loan length it s indices are the same as the LifetimeLoan parameter and process specific discount rate the DiscountRate parameter It is calculated via the formula DRiw 1 14 DR Ne Vit v Ocostinvest LAty 3 2 25 PeriodLength LENpep Given that the modeler may specify arbitrary period boundaries this parameter specifies the number of years contained in each period The final year is the largest element in time_ future which is specifically not included in the list of periods in time_optimize P The length calculation for each period then exploits the fact that the t ime sets are ordered LET boundaries sorted P LET I p index of p in boundaries LEN boundaries I p 1 p Yp E P The first line creates a sorted array of the period boundaries called boundaries The second line defines a function that finds the index of period p in boundaries The third line then defines the length of period p to be the number of years between period p and the next period For example if P 2015 2020 2030 2045 then boundaries would be 2015 2020 2030 2045 For 2020 2020 would return 2 Similarly boundaries 3 2030 Then LEN 2920 boundaries 1 2020 1 2020 boundaries 2 1 2020 boundaries 3 2020 203
45. ers from the one above because it only calls the constraint rule for the valid tuples within the Cartesian product which is computationally more efficient than the simpler implementation above in temoa_model py actual implementation M DemandConstraint_psde Set dimen 4 rule DemandConstraintIndices M DemandConstraint Constraint M DemandConstraint_psdc rule Demand_Constraint As discussed above the DemandConstraint is only valid for certain p s d dem tuples Since the mod eler can specify demand distribution per commodity necessary to model demands like heating that do not make sense in the summer Temoa must ascertain the exact valid tuples We have implemented this logic in the function DemandConstraintIndices in temoa_lib py Thus Line 1 tells Pyomo to instanti ate DemandConstraint_psdc as a Set of 4 length tuples indices dimen 4 and populate it with what Temoa s rule DemandConstraintIndices returns We omit here an explanation of the implementation of the DemandConstraintIndices function stating merely that it returns the exact indices over which the Demand Constraint must to be created With the sparse set DemandConstraint_psdc created we can now can use it in place in place of the four sets specified in the non sparse implementation Pyomo will now call the constraint implementation rule the minimum number of times On the choice of the _psdc suffix for the index set name there is no Pyomo enforced
46. ey is dependent on when it was measured There is no method to measure the absolute value of a currency but there are generally accepted relative rates for forecasting and historical purposes Temoa uses the same general concept that the future value FV of a sum of currency is related to the net present value NPV via the formula FV NPV 1 GDR where n is in years This parameter is only used in Temoa s objective function 3 2 16 LifetimeLoan LLNieryeP Temoa differs from many EEO models by giving the modeler the ability to separate the loan lifetime from the useful life of the technology This parameter specifies the length of the loan associated with investing in a process in years If not specified the default is 30 years 14 Chapier 3 The Math Behind Temoa Temoa Project Documentation Release 2015 02 03 3 2 17 LifetimeTech LT CpepteT vev Similar to LifetimeLoan this parameter specifies the total useful life of technology years If not specified the default is 10 years 3 2 18 MaxCapacity MAX pe Per The MaxCapacity parameter enables a modeler to ensure that a certain technology is constrained to an upper bound The enforcing constraint ensures that the max total capacity summed across vintages of a technology class is under this maximum That is all active vintages are constrained This parameter is used only in the maximum capacity constraint 3 2 19 MinCapacity MIN peP ter The MinCapacity
47. f a single representative year Temoa optimizes just this characteristic year and only delineates each year within a period through a time value of money calculation in the objective function Figure 3 3 gives a graphical explanation of the annual delineation Many EEO efforts need to model sub annual variations in demand as well Temoa allows the modeler to subdivide years into slices comprised of a season and a time of day e g winter evening Unlike the periods there is no restriction on what labels the modeler may assign to the time_season and time_of_day set elements There is similarly no pre described order and modeling efforts should not rely on a specific ordering of annual slices 3 1 1 A Word on Index Ordering The ordering of the indices is consistent throughout the model to promote an intuitive left to right description of each parameter variable and constraint set For example Temoa s output commodity flow variable F Op s d i t v 0 may be described as in period p during season s at time of day d the flow of input commodity 7 to technology t of vintage v generates an output commodity flow 0 of FOp s d i t v o For any indexed parameter or variable within Temoa our intent is to enable a mental model of a left to right arrow box arrow as a simple mnemonic to describe the input process output flow of energy And while not all variables parameters or constraints have 7 indices the 7 index order m
48. flow variables can track both flows through a process but each flow will have its own efficiency from the Efficiency parameter This implies that to produce 1 unit of electricity will require aH units of input At the same time to produce unit of heat will require units of input energy and to produce both output units of heat and energy both flows must be active and the desired activity will be double counted by Temoa To model a parallel output device c f a cogeneration plant the modeler must currently set up the process with the TechInput Split and TechOutput Split parameters appropriately adding each flow to the Efficiency param eter and accounting for the overall process efficiency through all flows 3 5 General Caveats 23 Temoa Project Documentation Release 2015 02 03 24 Chapter 3 The Math Behind Temoa CHAPTER FOUR THE TEMOA COMPUTATIONAL IMPLEMENTATION We have implemented Temoa within an algebraic modeling environment AME AMEs provide both a convenient avenue to describe mathematical optimization models for a computational context and allow for abstract model formulations Kallrath04 In contrast to describing a model in a formal computer programming language like C or Java AMEs generally have syntax that directly translates to standard mathematical notation Consequently models written in AMEs are more easily understood by a wider variety of people Further by allowing abstract formulations a model wri
49. function to calculate the cost associated with use of a technology In English this constraint states that the activity of a process is the sum of its outputs There is one caveat to keep in mind in regards to the Activity variable if there is more than one output there is currently no attempt by Temoa to convert to a common unit of measurement For example common mea surements for heat include mass of steam at a given temperature or total BTUs while electricity is generally measured in a variant of watt hours Reconciling these units of measurement as for example with a cogeneration plant is currently left as an accounting exercise for the modeler ACT sat Y FO s a i t v 0 3 1 1 0 Vip 5 d t v Oaetivity temoa_rules Capacity Constraint M p s d t v Temoa s definition of a process capacity is the total size of installation required to meet all of that process demands The Activity convenience variable represents exactly that so the calculation on the left hand side of the inequality is the maximum amount of energy a process can produce in the time slice lt s d gt CFP C2A SEG a TLFp ty CAP gt ACT satu 3 2 Vip d t v O activity 18 Chapter 3 The Math Behind Temoa Temoa Project Documentation Release 2015 02 03 temoa_rules CapacityAvailableByPeriodAndTech_ Constraint M p t The CAPAVL variable is nominally for reporting solution values but is also used in the
50. han zero 1 2 3 We use the symbol R to denote the set of real numbers and Rt to denote non negative real numbers 1 4 Temoa Origin and Pronunciation While we use Temoa as an acronym it is an actual word in the Nahuatl Aztec language meaning to seek some thing One pronounces the word Temoa as teh moe uh 1 5 Bug Reporting Temoa strives for correctness Unfortunately as an EEO model and software project there are plenty of levels and avenues for error If you spot a bug inconsistency or general that could be improved we want to hear about it If you are a software developer type feel free to open an issue on our GitHub Issue tracker If you would rather not create a GitHub account feel free to let us know the issue on our mailing list 1 4 Temoa Origin and Pronunciation 3 Temoa Project Documentation Release 2015 02 03 4 Chapter 1 Preface CHAPTER TWO QUICK START For those without patience this section omits many details giving only the bare minimum to get up and running with Temoa Temoa is built with Sandia National Laboratories COOPR project which is in turn built with Python Thus one must first install these projects 1 Python v2 7 http python org e Temoa requires v2 7 Temoa will not work with v2 6 and Coopr does not work with v3 2 Linear Program Solver e Any solver for which COOPR has a plugin will work e For ease of int
51. hen Temoa will recognize any mention of a 2020 vintage coal power plant elsewhere as an error Generally if a process is not specified in the efficiency table Temoa assumes it is not a valid process and will provide the user a warning with pointed debugging information 1 The efficiency parameter is often referred to as the efficiency table due to how it looks after even only a few entries in the Pyomo input dot dat file 3 2 Parameters 11 Temoa Project Documentation Release 2015 02 03 3 2 2 CapacityFactorDefault CFDses deD teT Where many models assign a capacity factor to a technology class only Temoa indexes the CapacityFactor parameter by vintage and time slice as well This enables the modeler to specify the capacity factor of a process per season and time of day as well as recognizing any advances within a sector of technology However 1f the model calls for a capacity factor that is not 1 the default but is the same for all vintages of a technology this parameter elides the need to specify all of them 3 2 3 CapacityFactor CF seg deD teT veV In addition to Capacity FactorDefault there may be cases where different vintages have different capacity factors This may be useful for example in working with a renewable portfolio where the amount of a resource is dependent on the time of year and time of day and the available technological skill 3 2 4 Capacity2Activity C2Ater ene Capacit
52. igh level overview of the model temoa_rules py mainly contains the rule implementations That is this file implements the objective function internal parameters and constraint logic Where temoa_model provides the high level overview this file provides the actual equation implementations temoa_lib py mainly contains meta functions for the model For instance Temoa makes heavy use of sparse sets and temoa_1ib contains the functions that create those sparse sets This file also contains various error checking routines so that their logic does not clutter the implementations in temoa_rules as well as the logic that handles the command line interaction 1 In contrast to a concrete model an abstract algebraic formulation describes the general equations of the model but requires modeler specified input data before it can compute any results 25 Temoa Project Documentation Release 2015 02 03 temoa_graphviz py Currently Temoa s sole visualizations are generated through Graphviz This file contains the various Graphviz specific graph generation routines temoa_stochastic py contains the PySP required alterations to the deterministic model for use in a stochastic model Specifically Temoa only needs one additional constraint class in order to partition the calcu lation of the objective function per period If you are working with the release snapshot of the Temoa model then you will only see one file tem
53. n like perhaps an input of vehicle miles traveled and an output of sunlight for a wind powered turbine However in this context summing over the inputs and outputs and o implicitly includes only the valid combinations of p s d 1 t v 0 3 2 Parameters 10 Chapter 3 The Math Behind Temoa Temoa Project Documentation Release 2015 02 03 Table 3 2 List of Temoa parameters with which a modeler might inter act The asterisked elements are automatically derived by the model and are not user specifiable Parameter Temoa Name Domain Short Description CFD a CapacityFactorDefault Technology default capacity factor CFs at CapacityFactor Process specific capacity factor C2Ar 4 Capacity2Activity Rt Converts from capacity to activity units FC tu CostFixed R Fixed operations amp maintenance cost IC CostInvest R Tech specific investment cost MC tv Cost Variable R Variable operations amp maintenance cost DEM e Demand RE End use demands by period DDD 5 4 DemandDefaultDistribution Default demand distribution DSD s d c DemandS pecificDistribution Demand specific distribution DR DiscountRate R Tech specific interest rate on investment EFF two Efficiency Ro Tech and commodity specific efficiency EAC t v 0 e EmissionsActivity R Tech specific emissions rate ELM EmissionsLimit Ro Emissions limit by time period ECAP y ExistingCapacity Ro Pre existing capacity GDR GlobalDiscountRate
54. not use spaces immediately before the open bracket that starts an indexing or slicing a b key bad a b la b bad a b key good a bla b good 6 12 Patches and Commits to the Repository In terms of code quality and maintaining a legible audit trail every patch should meet a basic standard of quality e Every commit to the repository must include an appropriate summary message about the accompanying code changes Include enough context that one reading the patch need not also inspect the code to get a high level understanding of the changes For example Fixed broken algorithm does not convey much information A more appropriate and complete summary message might be Fixed broken storage algorithm The previous implementation erroneously assumed that only the energy flow out of a storage device mattered However Temoa needs to know the energy flow in to all devices so that it can appropriately calculate the inter process commodity balance License AGPL 3 0 If there is any external information that would be helpful such as a bug report include a clickable link to it such that one reading the patch as via an email or online can immediately view the external information Specifically commit messages should follow the form A subject line of 50 characters or less an empty line http any com http relevant org some path http urls edu some other path https github com bl
55. nput data anomaly FO s d i t v 0 lt EFF 40 0 EL s d i t v 0 3 5 V p S d 1 t v o E O valid process flows 3 4 Constraints 19 Temoa Project Documentation Release 2015 02 03 temoa_rules CommodityBalance_Constraint M p s d c Where the Demand constraint 3 4 ensures that end use demands are met the CommodityBalance constraint ensures that the internal system demands are met That is this is the constraint that ties the output of one process to the input of another At the same time this constraint also conserves energy between process But it does not account for transmission loss In this manner it is a corollary to both the ProcessBalance 3 5 and Demand 3 4 constraints 5 FO s d i t 0 c 2 5 FL s d c t v 0 3 6 I T V T V O vip S d c O commodity balance 3 4 3 Physical and Operational Constraints These three constraints fine tune the algebraic map created by the three previous constraints based on various physical and operational real world phenomena temoa_rules BaseloadDiurnal_Constraint M p s d t v There exists within the electric sector a class of technologies whose thermodynamic properties are impossible to change over a short period of time e g hourly or daily These include coal and nuclear power plants which take weeks to bring to an operational state and similarly require weeks to fully shut down Temoa models this behavior by forcing technologies in the tech_baseload
56. o date as information and implementations evolve quickly As with many software oriented projects even before this manual the code is the most definitive resource That said please let us know via the mailing list or other avenue of any discrepancies you find and we will fix it as soon as possible 1 1 What is Temoa Temoa is an energy economy optimization EEO model Briefly EEO models are self consistent frameworks for mathematically optimizing energy flows through a user defined energy system One may think of an EEO model as a right from left network graph with a set of energy demands on the right that must be met by specific energy flows from the system originating from energy sources on the left Some of Temoa s specific features are e technology explicit e arbitrary model period lengths e designed for High Performance Computing e written in Python e not tied to a particular solver e user extendable open source AGPL The word Temoa is actually an acronym for Tools for Energy Model Optimization and Analysis currently com posed of four major pieces of infrastructure The mathematical model e The implemented model code For a more in depth description of EEO models and their place in the energy modeling community as well as references to other papers and sources see The TEMOA Project Tools for Energy Model Optimization and Analysis by DeCarolis J and Hunter K and Sreepathi S
57. oa py This file is actually a compressed archive in ZIP format containing these 5 files and may be manipulated with standard utilities e g PKZIP WinZip Info ZIP Due to implementation details be careful uncompressing the archive as it is analogous to a Tarbomb If you are working with a Temoa Git repository these files are in the temoa_model subdirectory 4 2 Anatomy of a Constraint To help explain the Pyomo implementation we discuss a single constraint in detail Consider the demand constraint 3 4 5 FO s d i t v dem 2 DEM p dem DSDs d dem LEV V p S d dem Odemand Implementing this with Pyomo requires two pieces and optionally a third 1 a constraint definition in temoa_model py 2 the constraint implementation in temoa_rules py and 3 optional sparse constraint index creation in temoa_1ib py We discuss first a straightforward implementation of this constraint that specifies the sets over which the constraint is defined We will follow it with the actual implementation which utilizes a more computationally efficient but less transparent constraint index definition the optional step 3 A simple definition of this constraint is in temoa_model py M DemandConstraint Constraint M time_optimize M time_season M time_of_day M commodity_demand rule Demand_Constraint In line 1 M DemandConstraint creates a place holder in the model object M called DemandConst
58. of the previous equation Cmarginal Y ACT v j VCptv i Rp p t veEOve We generally put the limiting or defining aspect of an equation on the right hand side of the relational operator and the aspect being limited or defined on the left hand side For example equation 3 2 defines Temoa s 2 Chapter 1 Preface Temoa Project Documentation Release 2015 02 03 mathematical understanding of a process capacity CAP in terms of that process activity ACT CF i C24 SEGsa TLFptyv CAP o gt ACT satu vip 5 d t v E Oactivity e We use the word slice to refer to the tuple of season and time of day s d For example winter night e We use the word process to refer to the tuple of technology and vintage t v when knowing the vintage of a process is not pertinent to the context at hand In fact in contrast to most other EEO models Temoa is process centric This is a fairly large conceptual difference that we explain in detail in the rest of the documentation However it is a large enough point that we make it here for even the no time quick start modelers think in terms of processes while modeling not technologies and start times e Mathematical notation We use the symbol I to represent the unit interval 0 1 We use the symbol Z to represent the set of all integers We use the symbol N to represent natural numbers i e integers greater t
59. og 926 shiny new commit styles https help github com articles github flavored markdown another empty line Any amount and format of text such that it conforms to a line width of 72 characters 4 Bonus points for being aware of the Github Markdown syntax 5 ae wh Fe License AGPL 3 0 Ensure that each commit contains no more than one ogical change to the code base This is very important for later auditing If you have not developed in a logical manner like many of us don t git add p is a very helpful tool If you are not a core maintainer of the project all commits must also include a specific reference to the license under which you are giving your code to the project Note that Temoa will not accept any patches that are not licensed under AGPL 3 0 A line like this at the end of your commit will suffice 46 Chapter 6 Temoa Code Style Guide Temoa Project Documentation Release 2015 02 03 the last line of the commit message License AGPL 3 0 This indicates that you retain all rights to any intellectual property your set of commit s creates but that you license it to the Temoa Project under the terms of the GNU Affero Public License version 3 or later If the Temoa Project incorporates your commit then Temoa may not relicense your set of patch es other than to increase the version number of the AGPL license In short the intellectual property remains yours and the Temoa Project would be but
60. ort Description C commodity_all string union of all commodity sets E commodity_demand string end use demand commodities Cc commodity_emissions string emission commodities e g CO2 NOx CP commodity_physical string general energy forms e g electricity coal uranium oil C commodity_carrier string physical energy carriers and end use demands Cp U Ca I string alias of Cp used in documentation only to mean input O string alias of Ce used in documentation only to mean output pe time_existing Z model periods before optimization begins p time_future Z model time scale of interest the last year is not optimized P time_optimize Z model time periods to optimize Pf max P V vintage_all Z possible tech vintages P U P S time_season string seasonal divisions e g winter summer D time_of_day string time of day divisions e g morning T tech_all string all technologies to be modeled T U Tp T tech_resource string resource extraction techs T tech_production string techs producing intermediate commodities T tech_baseload string baseload electric generators 1 C T T tech_storage string storage technologies T C T Temoa uses two different set notation styles one for code representation and one that utilizes standard algebraic notation For brevity the mathematical representation uses capital glyphs to denote sets and small glyphs to represent items within sets For
61. p s d and dem are clear and by inference so are the indices of summation i t v and operand V_FlowOut This one line definition creates an inequality for each period season time of day and demand ensuring that total output meets each demand in each time slice almost exactly as we have formulated the demand constraint 3 4 In contrast Temoa s implementation in Pyomo takes 47 source lines the code discussed above does not include the function documentation While some of the verbosity is inherent to working with a general purpose scripting language and most of it is our formatting for clarity the absolute minimum number of lines a Pyomo constraint can be is 2 lines and that likely will be even less readable So why use Python and Pyomo if they are so verbose In short for four reasons e Temoa has the full power of Python and has access to a rich ecosystem of tools e g numpy matplotlib that 4 3 A Word on Verbosity 29 Temoa Project Documentation Release 2015 02 03 are not as cleanly available to other AMLs For instance there is minimal capability in MathProg to error check a model before a solve and providing interactive feedback like what Temoa s DemandConstraintErrorCheck function does is difficult if not impossible While a subtle addition specific and directed error messages are an effective measure to reduce the learning curve for new modelers e Python has a vibrant community Whereas mathemati
62. parse the supplied model data Processing seconds are roughly a measure of exactly how much time the program spent in the CPU but are not a measure of how long the modeler actually waited though the output above suggests that the whole model took about 0 85 processing seconds to complete the time the author sat waiting for the prompt to return was closer 1 8 seconds The next timing slot is empty but the same line also contains a warning message The warning message is pointing out that the input file includes some inconsistent data that the modeler may want to address The timing information immediately below the warnings is how long it took Coopr to create the Temoa model instance Temoa intelligently emits these messages If only the results are warranted the modeler can redirect the stderr stream to the virtual wastebin temoa py test dat 2 gt dev null Model name TEMOA Entire Energy System Economic Optimization Model Objective function value TotalCost 398469346 331 Non zero variable values 395 535714285714 V_Activity 2010 summer day imp coal 2000 2 480158730159 V_Activity 2010 summer day imp gs1 2000 LOT 767857142857 V_Activity 2010 summer day t coal 1990 39 553571428571 V_Activity 2010 summer day t elccar 2010 0 446428571429 V_Activity 2010 summer day t gascar 2000 Era Conversely the modeler can redirect the stdout stream to a file while still receiving status information
63. raint Like a variable this is the name through which Pyomo will reference this class of constraints Constraint is a Pyomo specific function that creates each individual constraint in the class The first arguments line 2 are the index sets of the constraint class Line 2 is the Pyomo method of saying for all v Line 3 contains the final mandatory argument rule that specifies the name of the implementation rule for the constraint in this case Demand_Constraint Pyomo will call this rule with each tuple in the Cartesian product of the index sets An associated implementation of this constraint based on the definition above is 26 Chapter 4 The Temoa Computational Implementation Temoa Project Documentation Release 2015 02 03 temoa_rules py def Demand_Constraint M p s d dem if p s d dem not in M Demand If user did not specify this Demand tell return Constraint Skip Pyomo to ignore this constraint index store the summation into the local variable supply for later reference supply sum M V_FlowOut p s d S_i S_t S_v dem for S_t in M tech_all for S_v in M vintage_all for S_i in ProcessInputsByOutput p S_t S_v dem The gt operator creates in this case a Greater Than x object not a True False value as a Python programmer might expect the intermediat variable expr is thus not strictly necessary but we leave it as reminder of this potentially conf
64. restriction However use of an index set in place of the non sparse specification obfuscates over what indexes a constraint is defined While it is not impossible to deduce either from this documentation or from looking at the DemandConstraint Indices or Demand_Constraint implementations the Temoa convention includes in index set names the one character 2 A word on return expressions in Pyomo in most contexts a relational expression is evaluated instantly However in Pyomo a relational expression returns an expression object That is M aVar gt 5 does not evaluate to a boolean true or false and Pyomo will manipulate it into the final LP formulation 28 Chapter 4 The Temoa Computational Implementation Temoa Project Documentation Release 2015 02 03 version of each set dimension In this case the name DemandConstraint_psdc implies that this set has a dimen sionality of 4 and following the naming scheme the first index of each tuple will be an element of time_optimize the second an element of time_ season the third an element of t ime_of_day and the fourth a commodity From the contextual information that this is the Demand constraint one can assume that the c represents an element from commodity_demand Over a sparse index the constraint implementation changes only slightly in temoa_rules py actual implementation def Demand Constraint M p s d dem supply sum M V_FlowOut p s d S_i S_t S_v
65. s have 7 indices the 7 index order mentioned here p s d i t v 0 is the canonical ordering If you note any case where for example d comes before s that is an oversight 6 10 In line Implementation Conventions Wherever possible implement the algorithm in a way that is pedagogically sound or reads like an English sentence Consider this snippet if a gt 5 anda lt 10 doSomething In English one might translate this snippet as If a is greater than 5 and less then 10 do something However a semantically stronger implementation might be if 5 lt a and a lt 10 doSomething This reads closer to the more familiar mathematical notation of 5 lt a lt 10 and translates to English as If a is between 5 and 10 do something The semantic meaning that a should be between 5 and 10 is more readily apparent 44 Chapter 6 Temoa Code Style Guide Temoa Project Documentation Release 2015 02 03 from just the visual placement between 5 and 10 and is easier for the next person to understand who may very well be you in six months Consider the reverse case if a lt 5orap gt 10 doSomething On the number line this says that a must fall before 5 or beyond 10 But the intent might more easily be understood if altered as above if not 5 lt a anda lt 10 doSomething This last snippet now makes clear the core question that a should not fall between 5 and 10 Consider another
66. snippet acounter scounter 1 This method of increasing or incrementing a variable is one that many mathematicians turned programmers prefer but is more prone to error For example is that an intentional use of acounter or scounter Assuming as written that it s incorrect a better paradigm uses the operator acounter 1 This performs the same operation but makes clear that the acounter variable is to be incremented by one rather than be set to one greater than scounter The same argument can be made for the related operators gt gt gt a by c 10 3 2 gt gt gt a t 5 a same aS a a t 5 15 gt gt gt a b a same as a a b 12 gt gt gt a b a same as a a b 4 gt gt gt a x C a same aS a axe 8 gt gt gt a xx C a same as a a xx C 64 6 11 Miscellaneous Style Conventions e Same as PEP 8 Do not use spaces around the assignment operator when used to indicate a default argument or keyword parameter def complex real imag 0 0 bad return magic r real i imag bad def complex real imag 0 0 good return magic r real i imag good e Same as PEP 8 Do not use spaces immediately before the open parenthesis that starts the argument list of a function call 6 11 Miscellaneous Style Conventions 45 Temoa Project Documentation Release 2015 02 03 a b calc bad a b calc c bad a b calc c good e Same as PEP 8 Do
67. space on either side of each parenthesis def someFunction a b c bad pass def someFunction a b c good pass 6 7 Vertical Alignment Where appropriate vertically align sections of the code bad M someVariable Var M someIndex domain NonNegativeIntegers M otherVariable Var M otherIndex domain NonNegativeReals good M someVariable Var M someIndex domain NonNegativeIntegers M otherVariable Var M otherIndex domain NonNegativeReals ll 6 8 Single Double and Triple Quotes Python has four delimiters to mark a string literal in the code and 7 Use each as appropriate One should rarely need to escape a quote within a string literal because one can merely alternate use of the single double or triple quotes a She said Do not do that 4 bad a She said Do not do that good b She said Don t do that bad b She said Don t do that bad p She said Don t de thatd 4 bad p She said Don t do Chati good 6 6 Punctuation and Spacing 43 Temoa Project Documentation Release 2015 02 03 6 9 Naming Conventions All constraints attached to a model should end with Constraint Similarly the function they use to define the constraint for each index should use the same prefix and Constraint suffix but separate them with an underscore e g M somenameConstraint Constraint rule somename_Constraint M Capacit
68. text editors and preferences for indentation width Spaces and not tabs should be used for mid line spacing and alignment Many editors have functionality to highlight various whitespace characters 41 Temoa Project Documentation Release 2015 02 03 6 2 End of Line Whitespace Remove it Many editors have plugins or builtin functionality that will take care of this automatically when the file is saved 6 3 Maximum Line Length Similar to PEP 8 Limit all lines to a maximum of 80 characters Historically 80 characters was the width in monospace characters that a terminal had to display output With the advent of graphical user interfaces with variable font sizes this technological limit no longer exists However 80 characters remains an excellent metric of what constitutes a long line A long line in this sense is one that is not as transparent as to its intent as it could be The 80 character width of code also represents a good squint test metric If a code base has many lines longer than 80 characters it may benefit from a refactoring Slightly adapted from PEP 8 The preferred way of wrapping long lines is by using Python s implied line continuation inside paren theses brackets and braces Long lines can be broken over multiple lines by wrapping expressions in parentheses These should be used in preference to using a backslash for line continuation Make sure to indent the continued line appropriately
69. the Temoa formulation are FlowIn and FlowOut They describe the commodity flows into and out of a process in a given time slice They are related through the ProcessBalance constraint 3 5 which in essence guarantees the conservation of energy for each process The Activity variable is defined as the sum over all inputs and outputs of a process in a given time slice see equation 3 1 At this time one potential gotcha is that for a process with multiple inputs or outputs there is no attempt to reconcile energy units Temoa assumes all inputs are comparable and as no understanding of units The onus is on the modeler to ensure that all inputs and outputs have similar units There is an open ticket to address the lack of unit awareness in Temoa See issue 5 in our issue tracker 3 3 Variables 17 Temoa Project Documentation Release 2015 02 03 The Capacity variable is used in the default objective function as the amount of capacity of a process to build It is indexed for each process and Temoa constrains the Capacity variable to at least be able to meet the Activity of that process in all time slices in which it is active 3 2 Finally Capacity AvailableByPeriodAndTech is a convenience variable that is not strictly necessary but used where the individual vintages of a technology are not warranted e g in calculating the maximum or minimum total capacity allowed in a given time period We explain the equations gov
70. through use of the commodity_emissions set and EmissionActivity 3 4 Constraints 21 Temoa Project Documentation Release 2015 02 03 parameter The HAC parameter is analogous to the efficiency table tying emissions to a unit of activity The EmissionLimit constraint allows the modeler to assign an upper bound per period to each emission commodity X EACe i t v o i FOp 5 4 i t v 0 lt ELMype I T V Ole i t v oe EACina 3 11 vip e ELMina temoa_rules MaxCapacity Constraint M p t The MinCapacity and MaxCapacity constraints set limits on the what the model is allowed to not have available of a certain technology Note that the indices for these constraints are period and tech_all not tech and vintage CAPAVL gt MIN 3 12 Vip gt t OMinCapacity parameter CAPAVL lt MAX 3 13 Vip t E OMaxCapacity parameter temoa_rules ResourceExtraction_Constraint M p r The ResourceExtraction constraint allows a modeler to specify an annual limit on the amount of a particular resource Temoa may use in a period Y FO safe lt RSC e 3 14 S D L teTr V Vip c O resource bound parameter temoa_rules TechInputSplit_Constraint M p s d i t v Some processes make a single output from multiple inputs A subset of these processes have a constant ratio of inputs See TechOutputSplit_Constraint for the analogous math reasoning temoa_rules TechOutputSplit_Constraint M p s d t v 0
71. ts of the summation not once but twice A less naive approach would replace the appena call with the operator reducing the number of iterations through the elements to one supply 0 for S_t in M tech_all for S_v in M vintage_all for S_i in ProcessInputsByOutput p S_t S_v dem supply M V_FlowOut p s d S_i S_t S_v dem Why is list comprehension necessary Strictly speaking it is not especially in light of this last example which may read more familiar to those comfortable with C Fortran or Java However due to quirks of both Python and Pyomo list comprehension is preferred both syntactically as the Pythonic way and as the more efficient route for many list manipulations It also may seem slightly more familiar to those used to a more mainstream algebraic modeling language With the correct model variables summed and stored in the supply variable line 18 creates the actual inequality comparison This line is superfluous but we leave it in the code as a reminder that inequality operators i e lt and gt with a Pyomo object like supply generate a Pyomo expression object not a boolean True or False as one might expect It is this expression object that must be returned to Pyomo as on line 19 In the above implementation the constraint is called for every tuple in the Cartesian product of the indices and the constraint must then decide whether each tuple is valid The below implementation diff
72. tten with an AME may be used with many different input data sets Three well known and popular algebraic modeling environments are the General Algebraic Modeling System GAMS BrookeRosenthal03 AMPL FourerGayKernighan87 and GNU MathProg Makhorin00 All three environments provide concise syntax that closely resembles standard paper notation We decided to implement Temoa within a recently developed AME called Python Optimization Modeling Objects Pyomo Pyomo provides similar functionality to GAMS AMPL and MathProg but is open source and written in the Python scripting language This has two general consequences of which to be aware e Python is a scripting language in general scripts are an order of magnitude slower than an equivalent compiled program e Pyomo provides similar functionality but because of its Python heritage is much more verbose than GAMS AMPL or MathProg It is our view that the speed penalty of Python as compared to compiled languages is inconsequential in the face of other large resource bottle necks so we omit any discussion of it as an issue However the boiler plate code verbosity overhead requires some discussion We discuss this in the Anatomy of a Constraint 4 1 File Structure The Temoa model code is split into 5 main files e temoa_model py contains the overall model definition defining the various sets parameters variables and equations of the Temoa model Peruse this file for a h
73. using behavior expr supply gt M Demand p s d dem finally return the new Greater Than object not boolean to Pyomo return expr The Python boiler plate code to create the rule is on line 1 It begins with de f followed by the rule name matching the rule argument in the constraint definition in temoa_model followed by the argument list The argument list will always start with the model Temoa convention shortens this to just M followed by local variable names in which to store the index set elements passed by Pyomo Note that the ordering is the same as specified in the constraint definition Thus the first item after M will be an item from time_optimize the second from t ime_season the third from t ime_of_day and the fourth from commodity_demand Though one could choose a b c and d or any naming scheme we chose p s d and dem as part of a naming scheme to aid in mnemonic understanding Consequently the rule signature Line 1 is another place to look to discover what indices define a constraint Lines 2 and 3 are an indication that this constraint is implemented in a non sparse manner That is Pyomo does not inherently know the valid indices for all of a model s contexts In temoa_model the constraint definition listed four index sets so Pyomo will naively call this function for every possible combination of tuple p s d dem However as there may be slices for which a demand does not exist e g the
74. winter season might have no cooling demand there is no need to create a constraint for any tuple involving winter and cooling Indeed an attempt to access a demand for which the modeler has not specified a value results in a Pyomo error so it is necessary to ignore any tuple for which no Demand exists Lines 6 through 12 are a single source line that we split over 7 lines for clarity These lines implement the summation of the Demand constraint summing over all technologies vintages and the inputs that generate the end use demand dem Lines 6 through 12 also showcase a very common idiom in Python list comprehension List comprehension is a concise and efficient syntax to create lists As opposed to building a list element by element with for loops list comprehension can convert many statements into a single operation Consider a nave approach to calculating the supply to_sum list for S_t in M tech_all for S_v in M vintage_all for S_i in ProcessInputsByOutput p S_t S_v dem 4 2 Anatomy of a Constraint 27 Temoa Project Documentation Release 2015 02 03 to_sum append M V_FlowOut p s d S_i S_t S_v dem supply sum to_sum While both implementations have the same number of lines this last one creates an extra list to_sum then builds the list element by element with append before finally calculating the summation This means that the Python interpreter must iterate through the elemen
75. y and Activity are inherently two different units of measure Capacity is a unit of energy per time 2 while Activity is a measure of total energy actually emitted energy However there are times when one needs to compare the two and this parameter makes those comparisons more natural For example a capacity of 1 GW for one year works out to an activity of 1GW 8 76022 3 6005 10 31 536 22 yr y yr or 1GW 8 76027 10735 8 75TWh When comparing one capacity to another the comparison is easy unit wise However when one needs to compare capacity and activity how does one reconcile the units One way to think about the utility of this parameter is in the context of the question How much activity would this capacity create if used 100 of the time 3 2 5 CostFixed FCpepteTvev The Cost Fixed parameter specifies the fixed cost associated with any process Fixed costs are those that must be paid regardless of the use of a facility For instance if the model decides to build a nuclear power plant even if it decides not utilize the plant the model must pay the fixed costs These are in addition to the loan so once the loan is paid off these costs are still incurred every year the process exists Temoa s default objective function assumes the modeler has specified this parameter in units of currency per unit CUR capacity oniiCap 3 2 6 Costinvest ICretTwer 12 Chapier 3 The Math Behind Temoa
76. yConstraint Constraint M CapacityVar_tv rule Capacity_Constraint When providing the implementation for a constraint rule use a consistent naming scheme between functions and constraint definitions For instance we have already chosen M to represent the Pyomo model instance t to represent technology and v to represent vintage def Capacity Constraint M t v The complete list we have already chosen e pto represent a period item from time_optimize e s to represent a season item from time_season e dto represent a time of day item from time_of_day e to represent an input to a process an item from commodity_physical e tto represent a technology from tech_all e v to represent a vintage from vintage_all e o to represent an output of a process an item from commodity_carrier Note also the order of presentation even in this list In order to reduce the number mental question marks one might have while discovering Temoa we attempt to rigidly reference a mental model of left to right Just as the entire energy system that Temoa optimizes may be thought of as a left to right graph so too are the individual processes As said in section A Word on Index Ordering For any indexed parameter or variable within Temoa our intent is to enable a mental model of a left to right arrow box arrow as a simple mnemonic to describe the input process output flow of energy And while not all variables parameters or constraint

Download Pdf Manuals

image

Related Search

Related Contents

Istruzioni per l`uso per il gestore FM444  IMPORTANTE INSTRUCCIONES DE SEGRUIDAD  Créer votre compte et remplir votre dossier  Sea Gull Lighting 44387-962 Installation Guide    Samsung HMX-M20SD User Manual  733HC-E Steam Sterilizer - Getinge Infection Control  Contract Insight Enterprise User Manual The Ultimate Web  Bulletin d`info 2014  Manual de Instrução  

Copyright © All rights reserved.
Failed to retrieve file