Using intlinprog for Unit Commitment Problem

20 views (last 30 days)
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?

Accepted Answer

Matt J
Matt J on 23 May 2018
Edited: Matt J on 23 May 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 Comments
Micah Mungal
Micah Mungal on 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 on 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

Sign in to comment.

More Answers (0)

Categories

Find more on Linear Programming and Mixed-Integer Linear Programming in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!