sandialabs / snl-quest

An open source, Python-based software platform for energy storage simulation and analysis developed by Sandia National Laboratories.
Other
128 stars 38 forks source link

Dispatchable BTM generation #4

Open jon-aegis opened 5 years ago

jon-aegis commented 5 years ago

I'd like to model a system operating simultaneous CHP, PV, and electrical storage behind the meter. CHP is like a battery source in that it's dispatchable, but the economics are more complicated since the real time value of the CHP asset depend on the thermal demand of the building, and the electricity rate. I have two questions:

  1. Is CHP support planned for quest?
  2. If the answer to question 1 is no, how flexible is the code, and could an experienced programmer integrate CHP modeling into the optimization routine with reasonable effort?

Thanks!

rconcep commented 5 years ago

Hello,

That is definitely an interesting and practical application. I don't believe our work in our energy storage group at Sandia touches upon CHP. As a result, it's unlikely that we will develop support for such an analysis. Of course, this is subject to change with the sponsors of our work.

For the experienced programmer, I would suggest working directly with the Pyomo modeling code. Just in case you're unfamiliar, Pyomo is an optimization modeling library for Python. The underlying concept for QuESt is facilitating the creation of mathematical programs in Pyomo through the GUI. As such, the code describing the mathematical program is standalone and can be modified or forked to develop other models.

We developed a framework for the different analysis types in QuESt. An example for the BTM model can be found in /es_gui/tools/btm. The btm_optimizer.py file contains the wrapper class for building a model in Pyomo for the BTM cost savings model. It is based on the design pattern in /es_gui/tools/optimizer.py. The constraints.py file contains the objective function and constraint definitions. The idea is to encapsulate the mathematical program structure in the class definition and to pass relevant data (such as rate schedules and PV profiles) and parameters (such as ESS power/capacity ratings) to instances of the class to formulate specific problems. For an example of how these objects are used in QuESt, see /es_gui/apps/btm/op_handler.py.

If you do make modifications to the optimization models or develop new ones, it's unlikely to be compatible with the rest of QuESt because of different interface and data requirements, etc. But if you are comfortable developing your own Pyomo models, you're probably fine with developing your own scripts to conduct analysis. Hopefully, our examples serve as a launching point for developing new models.

For reference, here's the paper that the QuESt BTM Cost Savings model is based on.

Best, Ricky