Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #10

Merged
merged 9 commits into from
Mar 25, 2024
Merged

Dev #10

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,14 @@
# IDAES-GTEP
IDAES Generation and Transmission Expansion Planning

<!-- BEGIN Status Badges -->
[![GitHub CI](https://github.com/IDAES/idaes-gtep/actions/workflows/test_pr_and_main.yml/badge.svg?branch=main&event=push)](https://github.com/IDAES/idaes-gtep/actions/workflows/test_pr_and_main.yml)
[![Documentation Status](https://readthedocs.org/projects/idaes-gtep/badge/?version=latest)](http://idaes-gtep.readthedocs.org/en/latest/)
<!-- END Status Badges -->

[Documentation](https://idaes-gtep.readthedocs.io)
The IDAES Generation and Transmission Expansion Planning (GTEP) package provides a [Pyomo](https://github.com/Pyomo/pyomo)-based implementation of a modular, flexible, Generalized Disjunctive Programming (GDP) formulation for power infrastructure planning problems. This formulation is designed with the following goals in mind:

- Abstract GTEP modeling away from any particular case study or fixed modeling assumptions (e.g., technologies, temporal resolution, spatial resolution, policy implications, etc.)
- Admit flexible decision sets and heterogeneous parameterization
- Allow high-level modeling options to be understood easily, chosen modularly, and changed rapidly

You can find the latest documentation [here](https://idaes-gtep.readthedocs.io).
3 changes: 3 additions & 0 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information

import os
import sys

sys.path.insert(0, os.path.abspath("../.."))

project = "idaes-gtep"
copyright = "2024, Kyle Skolfield"
Expand Down
10 changes: 9 additions & 1 deletion docs/source/data.rst
Original file line number Diff line number Diff line change
@@ -1,2 +1,10 @@
Data
====
====
.. currentmodule:: gtep.gtep_data

.. automodule:: gtep
:members:

.. automodule:: gtep.gtep_data
:members:

1 change: 1 addition & 0 deletions docs/source/modeling.rst
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
Modeling
=============================
.. currentmodule:: gtep.gtep_model

.. automodule:: gtep
:members:
Expand Down
2 changes: 1 addition & 1 deletion gtep/driver.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
data_object = ExpansionPlanningData()
data_object.load_prescient(data_path)
mod_object = ExpansionPlanningModel(
data=data_object, num_reps=1, len_reps=1, num_commit=1, num_dispatch=1
data=data_object.md, num_reps=1, len_reps=1, num_commit=1, num_dispatch=1
)
mod_object.create_model()
TransformationFactory("gdp.bound_pretransformation").apply_to(mod_object.model)
Expand Down
10 changes: 10 additions & 0 deletions gtep/gtep_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,17 @@


class ExpansionPlanningData:
"""Standard data storage class for the IDAES GTEP model."""

def __init__(self):
pass

def load_prescient(self, data_path, options_dict=None):
"""Loads data structured via Prescient data loader.

:param data_path: Folder containing the data to be loaded
:param options_dict: Options dictionary to pass to the Prescient data loader, defaults to None
"""
self.data_type = "prescient"
options_dict = {
"data_path": data_path,
Expand All @@ -25,6 +32,7 @@ def load_prescient(self, data_path, options_dict=None):
"sced_frequency_minutes": 60,
"ruc_horizon": 36,
}

prescient_options = PrescientConfig()
prescient_options.set_value(options_dict)
# Use prescient data provider to load in sequential data for representative periods
Expand Down Expand Up @@ -73,6 +81,8 @@ def load_prescient(self, data_path, options_dict=None):
self.representative_data = data_list

def load_default_data_settings(self):
## TODO: too many of these are hard coded; everything should check if it exists too.
"""Fills in necessary but unspecified data information."""
for gen in self.md.data["elements"]["generator"]:
self.md.data["elements"]["generator"][gen]["lifetime"] = 3
self.md.data["elements"]["generator"][gen]["spinning_reserve_frac"] = 0.1
Expand Down
Loading
Loading