Profit Data and Market Power Scenarios
Auxiliary File: MarketPower.aux
PowerWorld Case: B7OPF.pwb
PowerWorld Oneline: B7OPF.pwd
Output Files: ProfitData.aux
(Right-click on the above files and select Save Target As to save them to your computer.)
This script records generator profit data while increasing the bid of one generator and taking a nearby generator out of service. The auxiliary file contains five script sections:
CostCurves changes the GenIOC coefficients in the cubic cost models of the generators to improve the behavior of the LP OPF solution.
PowerFlow solves the LP OPF and records generator profit data in an external file.
ChangeBid1 slightly increases the bid of generator 1 and calls the PowerFlow script.
ChangeBid2 increases the bid of generator 1 to ten times the average of the other generators’ bids and calls the PowerFlow script.
OpenGen2 takes generator 2 out of service and calls the PowerFlow script.
After running the script you can examine the profit data in the file “ProfitData.aux”. This file lists the bus number, generator ID, output MW, bid (IOB coefficient) and profit for each generator. The file has four sections; the first is from the initial LP OPF solution, the second is from the ChangeBid1 script, the third is from the ChangeBid2 script, and the fourth is from the OpenGen2 script.
The data in “ProfitData.aux” demonstrate a situation where generator 1 could exercise market power. When generator 2 is in service and generator 1 increases its bid to $75/MWh, the output of generator 1 decreases to nearly zero. However, when generator 2 is out of service, generator 1 maintains an output of about 164 MW even when its bid is ten times the average bid of the other generators.
MarketPower.aux:
//This script saves data about generator profit
//First one generator changes its bid curve,
//then a nearby generator is taken out of serviceSCRIPT CostCurves
{
//This section will modify the GenIOC coefficient in
//the cost curves.
//Increasing IOC slightly increases the slope of the
//marginal cost curve
//and this helps the OPF to behave more as expected.
//First we will enter the edit mode.
EnterMode(Edit);
//Select all the generators
SelectAll(GEN);
//Set the GenIOC to 0.13 for all the selected generators
SetData(GEN, [GenIOC], [0.13], SELECTED);
//Unselect the generators
UnselectAll(GEN);
}SCRIPT PowerFlow
{
//Now we will solve the power flow.
//First we enter PowerFlow mode.
EnterMode(PowerFlow);
//Solve the Primal LP OPF (Primal Linear
//Programming Optimal Power Flow)
SolvePrimalLp;
//record generator MW outputs and LMP values in
//the file ProfitData.AUX
SaveData(“ProfitData”, AUX, GEN, [BusNum, GenID, GenMW, GenIOB, GenLMPProfit], []);
}SCRIPT ChangeBid1
{
//Increase the bid of the generator at bus 1
//Increase the IOB coefficient of generator 1
//to 10 ($/MWh).
SetData(GEN, [BusNum, GenID, GenIOB], [1, 1, 10]);
//call the PowerFlow script to solve the
//power flow and record data.
LoadScript(“MarketPower.AUX”, PowerFlow);
}SCRIPT ChangeBid2
{
//Increase the bid of the generator at bus 1
//Increase the IOB coefficient of generator 1
//to 75 ($/MWh).
SetData(GEN, [BusNum, GenID, GenIOB], [1, 1, 75]);
//call the PowerFlow script to solve the power
//flow and record data.
LoadScript(“MarketPower.AUX”, PowerFlow);
//Notice that when Generator 1 bids 10 times the
//other bids and all the
//other generators are operating generator 1
//is dispatched for no more than 5 MW.
//In this case generator 1 cannot profitably raise
//bids much above the other generators.
}SCRIPT OpenGen2
{
//Take the generator at bus 2 out of service.
//Set the status of generator 2 to OPEN
SetData(GEN, [BusNum, GenID, GenStatus], [2, 1, “OPEN”]);
//Call the PowerFlow script to solve the power flow
//and record data.
LoadScript(“MarketPower.AUX”, PowerFlow);
//Notice that when generator 2 is out of service
//generator 1 has to produce
//about 164 MW, and it will do this at any bid level.
//In this case generator 1 can profitably bid any
//price because for stability of the system it
//has to supply the 164 MW.
}
Tags: Cases,How-to,Script,Simulator
June 29, 2012