Hi all,

We were recently asked how to add a new offer to vSPD for testing purposes. To be clear, this question pertains to the standalone version of vSPD, and not vSPD-online.

Currently, we can easily modify the existing offer in vSPD but it is not straightforward to add a new (undeclared) offer into vSPD. In this topic, I will present some sample code that can be used to add a new offer ("ABC2201 XYZ0" ) to an existing location/pnode (e.g. HAM2201). I would recomend that this code snippet be inserted between code sections 4 and 5 of the vSPDSolve.gms file as follows:


* 4. Input data overrides - declare and apply (include vSPDoverrides.gms)



 - At this point, vSPDoverrides.gms is included into vSPDsolve.gms if an override file defined by the $setglobal vSPDinputOvrdData in vSPDSetting.inc exists.

 - All override data symbols have the characters 'Ovrd' appended to the original symbol name. After declaring the override symbols, the override data is installed and the original symbols are overwritten.

 - Note that the Excel interface permits a limited number of input data symbols to be overridden. The EMI interface will create a GDX file of override values for all data inputs to be overridden. If operating in standalone mode, overrides can be installed by any means the user prefers - GDX file, $include file, hard-coding, etc. But it probably makes sense to mimic the GDX file as used by EMI.



$if exist "%ovrdPath%%vSPDinputOvrdData%.gdx"  $include vSPDoverrides.gms

*--------- adding a new generation offer ---------------------------------------------


*1. Declare a new offer (Ex: "ABC2201 XYZ0")

set      i_Offer       'Adding generation offer'   / 'ABC2201 XYZ0' / ;



*2. Map the new offer to an existing pnode (Ex: "HAM2201")

i_tradePeriodOfferNode(tp, 'ABC2201 XYZ0', 'HAM2201') = yes ;


*3. Map the new offer to an existing trader (Ex: "38486") . You can use any trader in the i_trader list

i_tradePeriodOfferTrader(tp,'ABC2201 XYZ0','38486')  = yes ;


*4. Adding offer paremeter data

i_tradePeriodOfferParameter(tp,'ABC2201 XYZ0','i_initialMW')  = 0;

i_tradePeriodOfferParameter(tp,'ABC2201 XYZ0','i_reserveGenerationMaximum')  = 10000;

i_tradePeriodOfferParameter(tp,'ABC2201 XYZ0','i_windOffer')  = 0;

i_tradePeriodOfferParameter(tp,'ABC2201 XYZ0','i_FKbandMW') = 0;

i_tradePeriodOfferParameter(tp,'ABC2201 XYZ0','i_rampUpRate') = 9999;

i_tradePeriodOfferParameter(tp,'ABC2201 XYZ0','i_rampDnRate') = 9999;

i_tradePeriodRiskGenerator(tp,'ABC2201 XYZ0') = no ;


*5. Adding offer quantity and price

i_tradePeriodEnergyOffer(tp,'ABC2201 XYZ0','t1','i_generationMWoffer') = 100 ;

i_tradePeriodEnergyOffer(tp,'ABC2201 XYZ0','t1','i_generationMWofferPrice') = 0.01;

i_tradePeriodEnergyOffer(tp,'ABC2201 XYZ0','t2','i_generationMWoffer') = 100 ;

i_tradePeriodEnergyOffer(tp,'ABC2201 XYZ0','t2','i_generationMWofferPrice') = 1000;



* 5. Initialise constraint violation penalties (CVPs)


Please post any related questions below, new questions in a new discussion, or drop us an email via the emi email address.

Hope this helps,

Tuong Nguyen.