Using intlinprog for Unit Commitment Problem

9 Ansichten (letzte 30 Tage)
Micah Mungal
Micah Mungal am 23 Mai 2018
Kommentiert: Alan Valadez am 7 Nov. 2021
I am trying to solve the Unit Commitment problem using intlinprog. Now I have already solved the Economic Load Dispatch problem using linprog and I intend on expanding the problem to solve the Unit Commitment problem.
For the economic load dispatch problem, I have three generating units which are assumed to be committed and I need to determine how much each power each unit must produce to meet the load demand at the lowest cost. Assume that the cost function for a unit is given as:
C(P) = a*P^2 + b*P + c.
I was able to linearize this cost function in the form of:
C(P) = K(P_1, P_2,...,P_n) = C(P_min) + s_1*P_1 + s_2*P_2 + … + s_n*P_n
where s_1, s_2, … , s_n are the slopes of the individual segments.
Now P is originally bounded by an upper and lower bound, and after linearization P_1, P_2, …. ,P_n are now bounded by values based on the originally bounds. Also the sum of all P's must meet a load demand. I was able to successfully formulate this problem in MATLAB and solve it using the linprog function. See attached files.
However, I now have to expand this concept to the Unit Commitment problem, where I have to now determine which units should be committed in the first place and then solve for the economic load dispatch problem. So the problem now involves a variable u = 0, or u = 1 which determines whether the unit is on/off. The objective function now becomes minimize (for three units):
Total C(P) = C_1(P_1min)u_1 + s_11*P_11*u_1 + s_12*P_12*u_1 + … + s_1n*P_1n*u_1 + C_2(P_2min)u_2 + s_21*P_21*u_2 + s_22*P_22*u_2 + … + s_2n*P_2n*u_2 + C_3(P_3min)u_3 + s_31*P_31*u_3 + s_32*P_32*u_3 + … + s_3n*P_3n*u_3
And based on research, I determined the problem must be formulated as:
Total C(P) = C_1(P_1min)u_1 + s_11*Z_11 + s_12*Z_12 + … + s_1n*Z_1n + C_2(P_2min)u_2 + s_21*Z_21 + s_22*Z_22 + … + s_2n*Z_2n + C_3(P_3min)u_3 + s_31*Z_31 + s_32*Z_32 + … + s_3n*Z_3n
where u_i = 0, implies that Z_ik = 0 and u_i = 1, implies that Z_ik = Pik. So from this it is simple to formulate the objective function and the unknow variables will now be the u_i and Z_ik variables.
My problem lies in creating the upper bounds. The lower bound will always be zero but the upper bound will change depending on the value of u_i. How do I formulate this problem properly?

Akzeptierte Antwort

Matt J
Matt J am 23 Mai 2018
Bearbeitet: Matt J am 23 Mai 2018
I think you should formulate it this way
Total C(P) = C_1(P_1min)T_1 + s_11*P_11 + s_12*P_12 + … + s_1n*P_1n
+ C_2(P_2min)T_2 + s_21*P_21 + s_22*P_22 + + s_2n*P_2n
+ C_3(P_3min)T_3 + s_31*P_31 + s_32*P_32 + + s_3n*P_3n
with the constraints
0<= P_ij <=Upper_ij
T_i >= sum_j(P_ij)/ sum_j(Upper_ij)
T_i binary
in addition to whatever minimum output sum(P_ij) must satisfy.
This works because if T_i=0 then all corresponding P_ij must equal zero by virtue of the first two constraints above. Conversely if even one P_ij>0 then likewise T_i>0 which in turn forces T_i=1 because of the integer/binary constraint on T_i.
  15 Kommentare
Micah Mungal
Micah Mungal am 11 Jun. 2018
I was able to get the code working using the optimproblem approach. I do not think I will continue with this method. Thank you very much for your help so far.
Alan Valadez
Alan Valadez am 7 Nov. 2021
Hey Micah, I would like to know how did you solve the problem, please could you show you code, i have a similar problem and I have no idea from where to start

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Linear Programming and Mixed-Integer Linear Programming finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by