Generator Ramp Rate Constraints

Hey
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

`-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.

Thanks
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

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]’;
rampmin=-20ones(3,1);
rampmax=20
ones(3,1);
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?
cvx_end

`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 https://ecal.berkeley.edu/files/ene2xx/Assignments/HW4.pdf . 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.

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
end
``````

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.