Hello,
I’m looking to use PyPSA to find the optimal project configuration (capacity expansion) for a hypothetical PPA auction. Unlike most PyPSA use cases, I don’t need to optimise the total system cost to meet 100% of demand, but rather I want the configuration which maximises the investment return, considering the ‘soft constraints’ of penalties if we don’t meet the specified % of total annual demand. In short, I’m trying to use PyPSA as an investment analysis tool for renewable energy developers who are looking to develop hybrid plants to deliver more firm energy.
Below are a few examples with some questions on how I might best use PyPSA to solve this.
I have been working with a modified version of the example show here – many many thanks to Fabian for producing this amazing course, and to the whole community for their tireless efforts in supporting the usage of this tool.
Example
A PPA requires the developer to meet 80% of a 100 MW baseload load over a full year with only renewable energy and storage. Any shortfall below 80% (e.g. RE generation below 80% * 100 MW * 8760) incurs a penalty.
I could model the requirement to only meet 80% by creating a ‘free’ generator (“Free_Gen_20%”) with no variable costs, fixing capacity at 100 MW, and setting the CO2 intensity to 1 tonne per MWh. Then I could set a global constraint to CO2 emissions at (20% * 100 MW * 8760), so that the ‘free’ hours are limited to 20% of the year.
Question 1: Is there a less hacky way to model this?
The RE & storage generators will have two revenue streams. One would be the tariff paid by the baseload PPA provider; the maximum generation which can be sold in one time period would be 100 MW. Any generation above 100 MW in that period would be sold at an excess power tariff; this might be fixed or set per period as per a market price forecast.
Question 2: Is there a way to model these two revenue streams? Or more importantly, is there any way to optimise the model to consider the value of excess power in its capacity planning? I’m guessing not, as PyPSA only optimises to reduce the whole system costs, and can’t optimise for profit, right? Could excess generation revenues be summed and subtracted from the whole system costs, and so considered in the optimisation function?
To model the ability to go below the 80% annual requirement by paying the penalty, I could create a second generator (“Penalty_gen_Annual_shortfall”), with 0 CO2 emissions, fixing capacity at 100 MW, and setting the marginal cost to the penalty amount we want to model.
Question 3: Is this the best way to model a ‘soft constraint’ on the annual load requirement?
Some PPA auctions will specify a penalty for not meeting the load in certain specified hours. E.g. you need to meet X% of the baseload amount between the hours of 1000 – 1200 and 1700 – 1900 every day, otherwise you need to pay a penalty of $X/MWh.
Question 4: to model this penalty, is there a way to 1) restrict “Free_Gen_20%” and “Penalty_gen_Annual_shortfall”, so that they cannot generate in the specified hours, and 2) Create a third generator to simulate the penalty amounts that can only run during the specified hours?
Thanks very much for any hints or guidance which you can give!
Best regards,
Matt
--
You received this message because you are subscribed to a topic in the Google Groups "pypsa" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/pypsa/su1vXYfRL-U/unsubscribe.
To unsubscribe from this group and all its topics, send an email to pypsa+un...@googlegroups.com.
To view this discussion on the web, visit https://groups.google.com/d/msgid/pypsa/3d11cb13-7489-4906-88a8-eeb7bda6a4cen%40googlegroups.com.