1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
| {string} T = ...; // horizon
{string} I = ...; // nbre centrales
float D[T] = ...; // dmande
float R[T] = ...;
float a[I] = ...;
float b[I] = ...;
float SU[I] = ...;
float SD[I] = ...;
float RU[I] = ...;
float PL[I] = ...;
float PU[I] = ...;
float RD[I] = ...;
// variables de decisions
dvar float+ p[I][T];
dvar boolean u[I][T] ;
dvar boolean y[I][T] ;
dvar boolean z[I][T] ;
// Objective function
minimize
sum(t in T, i in I) (a[i]*u[i,t] + b[i]*p[i,t]
+ SU[i]*y[i,t] + SD[i]*z[i,t]);
// Constraints
subject to {
// Demand load balance
forall (t in T) {
DLB:
sum(i in I) p[i,t] >= D[t] ;
}
//Spinning reserve
forall (t in T) {
ctSR:
sum(i in I) PU[i]*u[i,t] >= D[t]+R[t] ;
}
// Power Output limitations
forall (i in I,t in T) {
ctPOL1:
PL[i]*u[i,t] <= p[i,t] ;
}
forall (i in I,t in T) {
ctPOL2:
p[i,t] <=PU[i]*u[i,t];
}
// ramping rate limitation
/*
forall (i in I,t in T) {
ctRRL1:
p[i,t]-p[i,t-1]<= RU[i] ;
}
/*
forall (i in I,t in T) {
ctRRL2:
p[i,t-1]-p[i,t]<= RD[i] ;
}
// Startup and shutdown
*/
//Minimum up- and downtime
}; |
Partager