Generator Ramp Rate Constraints

(Sssaha) #1

I am writing a LP formulation for generator dispatch.
The generator production is a two dimensional matrix, n*t ; n = number of generators , t= time step

Now generator production values depending on the previous time step values.
So theoretical equation is
P[g,t] - P[g,t-1] < R; R is a constant and also
P[g,t] - P[g,t-1] > -R
How should I write this using CVX

(Mark L. Stone) #2

-R <= diff(P(g,:)) <= R

You need to pay attention to the <= , because , will be interpreted as <= . Make an adjustment ot he value of -R and R is necessary so that the constraints will be what you want when using <= .

As for P[g,t] vs. P(g,t) . CVX works within MATLAB, not Python.

(Sssaha) #3

If that is the case, do I have to define g at the beginning?
And is there any example that I can use for reference , like this kind of LP formulation in CVX

(Sssaha) #4

This is my code and it is generating errors

load=150*(0.5+[0.2 0.182 0.185 0.25 0.221]); %% Assumed Data
pgmin=1.5*[15 10 10]’;
pgmax =1.5* [40 30 25]’;
costco=[0.75 0.85 0.65];

cvx_begin quiet
variable pg(5,3) nonnegative
variable grid(5) nonnegative

minimize sum((sum(pg)).*costco) + sum(grid)*5
subject to
(rampmin ) <= diff(pg) <= (rampmax ) %ramp rate limit, CVX does not recognize diff function of MATLAB
sum (pg,2) + grid == load; % Load demand constraint, sum over the rows , CVX fails to create this constraint
pgmin <= pg(:,g) <= pgmax; % Generator power constraint ; How should I define g?

(Mark L. Stone) #5

g will have to have a numerical value at the time it is used. It could be the index of a for loop, if you need to impose such a constraint for each of several values of g.

I don’t know how relevant it is, but you can try solving the problems in . If you can do that, you should have a good foundation for solving whatever problem it is that you have.

But this forum is not intended for modeling advice. If you have a mathematical model, and need help in implementing it most effectively in CVX, you can ask for advice here.

(Mark L. Stone) #6

Sorry, i forgot that diff is not supported for CVX variables or expressions - there was a previous thread about that in this forum. You can put the constraints in a for loop.

for t=2:3 
rampmin <= pg(:,t) - pg(:,t-1) <= rampmax

I don’t know what you want to do with g. if all elements of pg need to be in [pgmin,pgmax], then use (not in a for loop) ,
pgmin <= pg <= pgmax
I think you will not want or need to use nonnegative in the variable declaration of pg, because of the pgmin constraint.