GenX.jl v0.4.0
Note: user guide "Porting a module from GenX v0.3.6 to GenX v0.4.0" available at this link.
What's Changed
This present version of GenX.jl through this new release introduces a few new modules and technologies. It also introduces a new version of the folder structure for case studies and a reformatted version of the input files for demand, reserves and resources. The documentation pages have also been updated to reflect these new changes as well as we have a much more logically consistent and user-friendly structure of organization of the documentation pages. We hope, this will cater better and more effectively, all kinds of users, whether developers/contributors, or energy modelers.
Added
- Feature CO2 and fuel module (#536)
Adds a fuel module which enables modeling of fuel usage via (1) a constant heat rate and (2)
piecewise-linear approximation of heat rate curves.
Adds a CO2 module that determines the CO2 emissions based on fuel consumption, CO2 capture
fraction, and whether the feedstock is biomass. - Enable thermal power plants to burn multiple fuels (#586)
- Feature electrolysis basic (#525)
Adds hydrogen electrolyzer model which enables the addition of hydrogen electrolyzer
demands along with optional clean supply constraints. - Add ability of storage to contribute to capacity reserves (#475)
- Add Co-located VRE+Storage Module (#523)
- Add output for dual of capacity constraint (#473)
- Add PR template (#516)
- Validation ensures that resource flags (THERM, HYDRO, LDS etc) are self-consistent (#513).
- Maintenance formulation for thermal-commit plants (#556).
- Add new tests for GenX: three-zone, multi-stage, electrolyzer, VRE+storage,
piecewise_fuel+CO2, and TDR (#563 and #578). - Added a DC OPF method (#543) to calculate power flows across all lines
- Added write_operating_reserve_price_revenue.jl to compute annual operating reserve and regulation revenue.
and added the operating reserve and regulation revenue to net revenue (#611) - Add functions to compute conflicting constraints when model is infeasible if supported by the solver (#624).
- New settings parameter, VirtualChargeDischargeCost to test script and VREStor example case. The PR 608 attempts to
introduce this parameter as cost of virtual charging and discharging to avoid unusual results (#608). - New settings parameter, StorageVirtualDischarge, to turn storage virtual charging and discharging off if desired by the user (#638).
- Add module to retrofit existing resources with new technologies (#600).
- Formatted the code and added a format check to the CI pipeline (#673).
- Add check when capital recovery period is zero and investment costs are non-zero in multi-stage GenX (#666)
- Added condition number scaling added to objective function (#667)
- Added versioned doc-pages for v0.3.6 and v0.4.0
- Added a warning message in write_costs_multistage mentioning the approximate value of costs currently. (#680)
Fixed
Reserves
have been renamed asOperationReserves
in order to distinguish it fromCapacity Reserve Margin
(#641)- Generators_data.csv is not split into multiple different input files grouped together according to different resources (#612)
- Assign correct investment cost per stage in objective function initialization for multi-stage runs (#530)
- Fix name of Fixed_OM_Cost_Charge_per_MWyr when reading from Generators_data in multistage code. (#533)
Previously there was a typo in this in the multistage code that led to a silent bug, which affects outputs,
for anyone running non-myopic multistage GenX with asymmetric storage. - Fix computation of cumulative minimum capacity retirements in multistage GenX (#514)
- Fix access of eELOSSByZone expr before initialization (#541)
- Correctly write unmet reserves (in reg_dn.csv) (#575)
- Correctly scale total reserves column (in reg_dn.csv) (#594)
- Add validation for
Reg_Max
andRsv_Max
columns inGenerators_data.csv
whenMUST_RUN
is set to 1 (#576) - Fix scaling of transmission losses in write_transmission_losses.jl (#621)
- Fix cost assignment to virtual storage charge/discharge - issue #604 (#608)
- Fix modeling of hydro reservoir with long duration storage (#572).
- Fix update of starting transmission capacity in multistage GenX
- Fix write_status with UCommit = WriteShadowPrices = 1 (#645)
- Fixed outputting capital recovery cost to 0 if the remaining number of years is 0 (#666)
- Updated the docstring for the initialize_cost_to_go function and adjusted the formula for the discount factor to reflect the code
implementation (#672). - Fix write_multi_stage_cost.jl: add discount with OPEX multipliers to cUnmetPolicyPenalty (#679)
- Fix DF calculation in DDP to make it more generic for variable length stages (#680)
- Fix write_power_balance.jl: add additional two columns ("VRE_Storage_Discharge" and "VRE_Storage_Charge") for VRE_STOR
Changed
- Use add_to_expression! instead of the += and -= operators for memory performance improvements (#498).
- Generally, 'demand' is now used where (electrical) 'load' was used previously (#397).
Load_data.csv
is being renamed toDemand_data.csv
. (#397)Load_MW_z*
columns in that file are renamed toDemand_MW_z*
. (#397)- In
Reserves.csv
,Reg_Req_Percent_Load
andRsv_Req_Percent_Load
are renamed to..._Demand
. (#397) Load
andLoadWeight
keys in thetime_domain_reduction_settings.yml
file are renamed toDemand
,DemandWeight
. (#397)- The
New_Build
column inGenerators_data.csv
has been separated into two:New_Build
andCan_Retire
(#392).
Values in each column are {0,1}. - Separate proprietary JuMP solvers from the GenX package.
This allows users of Gurobi or CPLEX to use them without modifying
the source code of the GenX package directly. This is a key step in publishing
GenX as a proper Julia package. This does require change to the Run.jl files,
to specify the solver. (#531) - In the examples, change Reg_Max and Rsv_Max of any MUST_RUN generators to 0.
This mitigates but does not fully fix (#576). - Expressions of virtual charging and discharging costs in storage_all.jl and vre_stor.jl
- The input file
Generators_data.csv
has been split into different files, one for each type of generator.
The new files are:Thermal.csv
,Hydro.csv
,Vre.csv
,Storage.csv
,Flex_demand.csv
,Must_run.csv
,
Electrolyzer.csv
, andVre_stor.csv
. The examples have been updated, and new tests have been added to
check the new data format (#612). - The settings parameter
Reserves
has been renamed toOperationalReserves
,Reserves.csv
to
Operational_reserves.csv
, and the.jl
files contain the wordreserves
have been renamed to
operational_reserves
(#641). - New folder structure for a GenX case. The input files are now organized in the following folders:
settings
,
policies
,resources
andsystem
. The examples and tests have been updated to reflect this change. - New folder structure implemented for example_system. This folder now consists of nine separate folders each pertaining to a different
case study example, ranging from the ISONE three zones, with singlestage, multistage, electrolyzers, all the way to the 9 bus IEEE
case for running DC-OPF. - Pruned HiGHS solver settings to the necessary minimum (#668)
- Changed deploydoc URL to GenX.jl (#662)
Deprecated
- The above
load
keys, which generally refer to electrical demand, are being deprecated.
Users should update their case files.
For now this is done in a backward-compatible manner, and @info reminders are written to the log to prompt the user to update.
"Load" now typically refers only to the transferrence of data from files to memory,
except for a few places such as the common term "value of lost load" which refers to non-served demand (#397). New_Build = -1
inGenerators_data.csv
: instead, useNew_Build = 0
andCan_Retire = 0
.- The matrix-style input of the grid for Network.csv is deprecated in favor a column-style input.
Instead of columns z1, z2, ... with entries -1, 0, 1, use two columns: Start_Zone, End_Zone (#591).
Full Changelog: v0.3.6...v0.4.0-rc
Full List of Changes from GenX v0.3.6 to prerelease v0.4.0-rc
- Add output for dual of capacity constraint by @gmantegna in #473
- Remove Network.csv files from single-zone cases by @cfe316 in #505
- Fix error on write_costs re: COMMIT_ZONE #506 by @cfe316 in #508
- Feature issue template by @cfe316 in #511
- add PR template by @gmantegna in #516
- Deduplicate 'multi-stage' overview docs by @cfe316 in #515
- Return path from write_outputs by @cfe316 in #509
- Set example small_hydro plants MUST_RUN=1 by @cfe316 in #517
- Validate resources in generators_data.csv by @cfe316 in #513
- Remove coveralls and coverage by @cfe316 in #518
- Fix typo in logs by @gmantegna in #521
- Update PULL_REQUEST_TEMPLATE.md by @gmantegna in #520
- Fix bug in reserves by @gmantegna in #524
- add_to_expression! by @pshlime in #498
- Add ability for storage to contribute to capacity reserves without needing to generate by @gmantegna in #475
- Disable Retrofits feature by @cfe316 in #527
- Bug fix and simplify expression_manipulations.jl by @RuaridhMacd in #528
- Build GenX and run example case nightly by @gschivley in #529
- Bug Fix for correct tracking of current investment stage by SDDP by @filippopecci in #530
- Update CHANGELOG.md for SDDP bug fix by @gmantegna in #532
- Add Co-located VRE+Storage Module by @gmantegna in #523
- Fix Fixed_OM_Cost_Charge_per_MWyr to align with example cases by @gmantegna in #533
- Change "load" to "demand" by @cfe316 in #397
- Feature: rename load to develop in examples by @cfe316 in #534
- Feature electrolysis basic by @JesseJenkins in #525
- Remove doubled hydrogen settings in example by @cfe316 in #544
- Change ModelParameterScale to const by @cfe316 in #551
- Remove unneeded check in
load fuels
by @cfe316 in #545 - Maintenance constraints (and for thermal generators) by @cfe316 in #556
- Separate new build and retirement eligibility by @cfe316 in #392
- Added computation of cumulative minimum capacity retirements in multistage by @filippopecci in #542
- Fix eELOSSByZone expr: access before initialization by @lbonaldo in #568
- Enable commercial solver use without modifying GenX source code by @gmantegna in #531
- Zero-out Rsv_Max and Reg_Max of MUST_RUN example gens by @cfe316 in #577
- Remove MoM test by @lbonaldo in #578
- Separate reserves into creation and constraints by @cfe316 in #580
- Refactor reserves by @cfe316 in #562
- Allow ability to scale written timeseries outputs. by @cfe316 in #581
- Function to compute locational marginal prices from output by @cfe316 in #582
- Fix #567: apply min/max power for electrolyzers by @cfe316 in #583
- Refactor write capactiy value by @cfe316 in #585
- Fix DimensionMismatch error in refactored CRM by @cfe316 in #588
- Output correct CRM values for THERM plants with maintenance by @cfe316 in #589
- use maxlog=1 by @cfe316 in #592
- Prefer columns-style network format to matrix format by @cfe316 in #591
- Minor refactor of write_esr_revenue by @cfe316 in #593
- Update changelog for #591 by @cfe316 in #595
- Fix 559; report electrolyzer power per-zone by @cfe316 in #596
- Correctly write and scale unmet reserve output by @cfe316 in #594
- Use weighted_price variable in write_reserve_margin_revenue by @cfe316 in #597
- Use scale_factor in write_min/max_capacity_requirement.jl by @cfe316 in #599
- Fix-485: Account for Inv_Cost_Charge and Fixed_OM_Cost_Charge for STOR=2, in NetRevenue.csv by @cfe316 in #602
- Fixed issue #605 by @filippopecci in #609
- Crunching the mass-based and demand-rate based into one expression in… by @sambuddhac in #610
- Update Julia versions in ci.yml by @lbonaldo in #615
- Add validation MUST_RUN reserve contribution by @lbonaldo in #619
- Fix #584: derating factor for VRE_STOR in write_capacity_value by @lbonaldo in #618
- Extend expression_manipulations.jl to some variables by @RuaridhMacd in #579
- Fix scaling of tx losses in tlosses.csv #616 by @lbonaldo in #621
- Fix cTotal on write_costs: #553 by @lbonaldo in #620
- Add default settings to tests and cleanup by @lbonaldo in #625
- Compute conflicting constraints for infeasible models by @filippopecci in #624
- Get rid of costs to virtual charging & discharging in storage_all.jl by @sambuddhac in #608
- Create write_operating_reserve_price_revenue.jl by @sambuddhac in #611
- Fix write_net_revenue when Reserves = 0 by @lbonaldo in #626
- Fixed #572 : allow long duration hydro reservoir by @filippopecci in #629
- Fix update of starting transmission capacity in multistage GenX by @filippopecci in #634
- New input files format - split of Generators_data.csv by @lbonaldo in #612
- Add a feature to enable thermal power plants to burn multiple fuels by @qluo0320github in #586
- Add the option to write only the annual data and/or specify output files to write by @lbonaldo in #617
- DC OPF by @abdelrahman-ayad in #543
- Add a setting to turn off storage virtual discharge by @gmantegna in #638
- Fix write_rsv.jl by @lbonaldo in #642
- Rename Reserves to OperationalReserves by @lbonaldo in #641
- Update case folder structure and examples by @lbonaldo in #640
- Fix scaling of multistage data when read from module file by @lbonaldo in #643
- Fix ret_cap_charge in load_resources by @lbonaldo in #646
- Fix write_status with UCommit=1 and Shadow Prices by @lbonaldo in #645
- Update interface vre_stor. Review load data. by @lbonaldo in #648
- Update CI to regularly test examples by @lbonaldo in #644
- Docs restructuring by @lbonaldo in #637
- Added zenodo author list by @sambuddhac in #650
- Gen x retrofit mit by @yifueve in #600
- Proxy PR against Compat Helper PR by @sambuddhac in #652
- Added docstring for endogenous retirement constraint by @sambuddhac in #654
- Updated CHANGELOG by @sambuddhac in #656
- Bring the tip of the develop branch in sync with Release/0.4.0 by @sambuddhac in #661
- PR for GenX v0.4.0 release from Release/0.4.0 by @sambuddhac in #655
- Changed deploydoc URL to GenX.jl by @sambuddhac in #662
- Sync up develop (Changed deploydoc URL to GenX.jl) by @sambuddhac in #663
- Update README.md by @sambuddhac in #664
- Update make.jl by @sambuddhac in #669
- Update README.md by @sambuddhac in #670
- Fix initialize_cost_to_go docstring by @lbonaldo in #672
- HiGHS parameter pruning by @sambuddhac in #668
- Scaler by @Betristor in #667
- Format codebase and add format check to the CI by @lbonaldo in #673
- Update configure_multi_stage_inputs.jl by @sambuddhac in #666
- Discount cUnmetPolicyPenalty in write_multi_stage_cost.jl by @lbonaldo in #679
- Add FLEX power constraint by @qluo0320github in #677
- Fix the bug in write_power_balance.jl related to VRE_STOR by @qluo0320github in #682
- Mga fix/0.4.0 by @lbonaldo in #681
- Remove fuel cols in vre and stor csvs in examples by @lbonaldo in #684
- Add can_retire validation for multi-stage optimization by @lbonaldo in #683
- Update docs with new Tutorials by @mmutic in #685
- Allow writing of multistage stats during optimization by @lbonaldo in #687
- Fix docstring in operational_reserves.jl by @lbonaldo in #690
- Update ESR docs (Issue #468) by @mmutic in #692
- Refined DF Calculation in DDP for more general Expression for addressing variable length stages by @sambuddhac in #680
- Merge Release/0.4.0 to main for version release by @sambuddhac in #675
New Contributors
- @pshlime made their first contribution in #498
- @qluo0320github made their first contribution in #586
- @abdelrahman-ayad made their first contribution in #543
- @yifueve made their first contribution in #600
- @Betristor made their first contribution in #667
- @mmutic made their first contribution in #685
Full Changelog: v0.3.7...v0.4.0
Full List of Changes from GenX v0.3.7 to v0.4.0
- Add output for dual of capacity constraint by @gmantegna in #473
- Remove Network.csv files from single-zone cases by @cfe316 in #505
- Fix error on write_costs re: COMMIT_ZONE #506 by @cfe316 in #508
- Feature issue template by @cfe316 in #511
- add PR template by @gmantegna in #516
- Deduplicate 'multi-stage' overview docs by @cfe316 in #515
- Return path from write_outputs by @cfe316 in #509
- Set example small_hydro plants MUST_RUN=1 by @cfe316 in #517
- Validate resources in generators_data.csv by @cfe316 in #513
- Remove coveralls and coverage by @cfe316 in #518
- Fix typo in logs by @gmantegna in #521
- Update PULL_REQUEST_TEMPLATE.md by @gmantegna in #520
- Fix bug in reserves by @gmantegna in #524
- add_to_expression! by @pshlime in #498
- Add ability for storage to contribute to capacity reserves without needing to generate by @gmantegna in #475
- Disable Retrofits feature by @cfe316 in #527
- Bug fix and simplify expression_manipulations.jl by @RuaridhMacd in #528
- Build GenX and run example case nightly by @gschivley in #529
- Bug Fix for correct tracking of current investment stage by SDDP by @filippopecci in #530
- Update CHANGELOG.md for SDDP bug fix by @gmantegna in #532
- Add Co-located VRE+Storage Module by @gmantegna in #523
- Fix Fixed_OM_Cost_Charge_per_MWyr to align with example cases by @gmantegna in #533
- Change "load" to "demand" by @cfe316 in #397
- Feature: rename load to develop in examples by @cfe316 in #534
- Feature electrolysis basic by @JesseJenkins in #525
- Remove doubled hydrogen settings in example by @cfe316 in #544
- Change ModelParameterScale to const by @cfe316 in #551
- Remove unneeded check in
load fuels
by @cfe316 in #545 - Maintenance constraints (and for thermal generators) by @cfe316 in #556
- Separate new build and retirement eligibility by @cfe316 in #392
- Added computation of cumulative minimum capacity retirements in multistage by @filippopecci in #542
- Fix eELOSSByZone expr: access before initialization by @lbonaldo in #568
- Enable commercial solver use without modifying GenX source code by @gmantegna in #531
- Zero-out Rsv_Max and Reg_Max of MUST_RUN example gens by @cfe316 in #577
- Remove MoM test by @lbonaldo in #578
- Separate reserves into creation and constraints by @cfe316 in #580
- Refactor reserves by @cfe316 in #562
- Allow ability to scale written timeseries outputs. by @cfe316 in #581
- Function to compute locational marginal prices from output by @cfe316 in #582
- Fix #567: apply min/max power for electrolyzers by @cfe316 in #583
- Refactor write capactiy value by @cfe316 in #585
- Fix DimensionMismatch error in refactored CRM by @cfe316 in #588
- Output correct CRM values for THERM plants with maintenance by @cfe316 in #589
- use maxlog=1 by @cfe316 in #592
- Prefer columns-style network format to matrix format by @cfe316 in #591
- Minor refactor of write_esr_revenue by @cfe316 in #593
- Update changelog for #591 by @cfe316 in #595
- Fix 559; report electrolyzer power per-zone by @cfe316 in #596
- Correctly write and scale unmet reserve output by @cfe316 in #594
- Use weighted_price variable in write_reserve_margin_revenue by @cfe316 in #597
- Use scale_factor in write_min/max_capacity_requirement.jl by @cfe316 in #599
- Fix-485: Account for Inv_Cost_Charge and Fixed_OM_Cost_Charge for STOR=2, in NetRevenue.csv by @cfe316 in #602
- Fixed issue #605 by @filippopecci in #609
- Crunching the mass-based and demand-rate based into one expression in… by @sambuddhac in #610
- Update Julia versions in ci.yml by @lbonaldo in #615
- Add validation MUST_RUN reserve contribution by @lbonaldo in #619
- Fix #584: derating factor for VRE_STOR in write_capacity_value by @lbonaldo in #618
- Extend expression_manipulations.jl to some variables by @RuaridhMacd in #579
- Fix scaling of tx losses in tlosses.csv #616 by @lbonaldo in #621
- Fix cTotal on write_costs: #553 by @lbonaldo in #620
- Add default settings to tests and cleanup by @lbonaldo in #625
- Compute conflicting constraints for infeasible models by @filippopecci in #624
- Get rid of costs to virtual charging & discharging in storage_all.jl by @sambuddhac in #608
- Create write_operating_reserve_price_revenue.jl by @sambuddhac in #611
- Fix write_net_revenue when Reserves = 0 by @lbonaldo in #626
- Fixed #572 : allow long duration hydro reservoir by @filippopecci in #629
- Fix update of starting transmission capacity in multistage GenX by @filippopecci in #634
- New input files format - split of Generators_data.csv by @lbonaldo in #612
- Add a feature to enable thermal power plants to burn multiple fuels by @qluo0320github in #586
- Add the option to write only the annual data and/or specify output files to write by @lbonaldo in #617
- DC OPF by @abdelrahman-ayad in #543
- Add a setting to turn off storage virtual discharge by @gmantegna in #638
- Fix write_rsv.jl by @lbonaldo in #642
- Rename Reserves to OperationalReserves by @lbonaldo in #641
- Update case folder structure and examples by @lbonaldo in #640
- Fix scaling of multistage data when read from module file by @lbonaldo in #643
- Fix ret_cap_charge in load_resources by @lbonaldo in #646
- Fix write_status with UCommit=1 and Shadow Prices by @lbonaldo in #645
- Update interface vre_stor. Review load data. by @lbonaldo in #648
- Update CI to regularly test examples by @lbonaldo in #644
- Docs restructuring by @lbonaldo in #637
- Added zenodo author list by @sambuddhac in #650
- Gen x retrofit mit by @yifueve in #600
- Proxy PR against Compat Helper PR by @sambuddhac in #652
- Added docstring for endogenous retirement constraint by @sambuddhac in #654
- Updated CHANGELOG by @sambuddhac in #656
- Bring the tip of the develop branch in sync with Release/0.4.0 by @sambuddhac in #661
- PR for GenX v0.4.0 release from Release/0.4.0 by @sambuddhac in #655
- Changed deploydoc URL to GenX.jl by @sambuddhac in #662
- Sync up develop (Changed deploydoc URL to GenX.jl) by @sambuddhac in #663
- Update README.md by @sambuddhac in #664
- Update make.jl by @sambuddhac in #669
- Update README.md by @sambuddhac in #670
- Fix initialize_cost_to_go docstring by @lbonaldo in #672
- HiGHS parameter pruning by @sambuddhac in #668
- Scaler by @Betristor in #667
- Format codebase and add format check to the CI by @lbonaldo in #673
- Update configure_multi_stage_inputs.jl by @sambuddhac in #666
- Discount cUnmetPolicyPenalty in write_multi_stage_cost.jl by @lbonaldo in #679
- Add FLEX power constraint by @qluo0320github in #677
- Fix the bug in write_power_balance.jl related to VRE_STOR by @qluo0320github in #682
- Mga fix/0.4.0 by @lbonaldo in #681
- Remove fuel cols in vre and stor csvs in examples by @lbonaldo in #684
- Add can_retire validation for multi-stage optimization by @lbonaldo in #683
- Update docs with new Tutorials by @mmutic in #685
- Allow writing of multistage stats during optimization by @lbonaldo in #687
- Fix docstring in operational_reserves.jl by @lbonaldo in #690
- Update ESR docs (Issue #468) by @mmutic in #692
- Refined DF Calculation in DDP for more general Expression for addressing variable length stages by @sambuddhac in #680
- Merge Release/0.4.0 to main for version release by @sambuddhac in #675
New Contributors
- @pshlime made their first contribution in #498
- @qluo0320github made their first contribution in #586
- @abdelrahman-ayad made their first contribution in #543
- @yifueve made their first contribution in #600
- @Betristor made their first contribution in #667
- @mmutic made their first contribution in #685
Full Changelog: v0.3.7...v0.4.0