You are on page 1of 15

Economic Dispatch of Thermal Units and

Methods of Solution

By:
HANDOKO RUSIANA ISKANDAR
[Student Number : 23214004]

Date of Report Assignment:


Thursday / October, 23rd 2014

Lecture:
Prof. Dr. GIBSON HILMAN SIANIPAR

Power Engineering
School of Electrical Engineering and Informatics
Bandung Institute of Technology
2014

3.13 Economic Dispatch Problem


Consider three generating units that do not have convex input-output functions. (This is the
type of problem one encounters when considering valve points in the dispatch problem).
Unit 1.
80 + 8P1 + 0.024 P12
H1 (P1) =

196.4 + 3P1 + 0.075 P12

20 MW P1 60 MW

60 MW P1 100 MW

Generation limits are 20 MW P1 100 MW.


Unit 2.
120 + 6P2 + 0.04P22
H2 (P2) =

157.335 + 3.3333 P2 + 0.08333 P22

20 MW P2 40 MW

40 MW P2 100 MW

Generation limits are 20 MW P2 100 MW.


Unit 3.
100 + 4.6666P3 + 0.13333 P32
H3 (P3) =

316.66 + 2 P3 + 0.1 P32

20 MW P3 50 MW

50 MW P3 100 MW

Generation limits are 20 MW P3 100 MW. Fuel Costs = 1.5 R/M Btu fora all units.
Solution
a) Plot the cost function for each unit
For Unit 1
80 + 8P1 + 0.024 P12
H1 (P1) =

196.4 + 3P1 + 0.075 P12

20 MW P1 60 MW

60 MW P1 100 MW

Where:

P1 (20 MW, 40 MW, 60 MW, 80 MW, and 100 MW)

Fuel Costs = 1.5 R/MBtu


1.
2.
3.
4.
5.

Fl(Pl) = Hl(Pl) x 1.5 = 80 + 8 (20) + 0.024 (20)2


Fl(Pl) = Hl(Pl) x 1.5 = 80 + 8 (40) + 0.024 (40)2
Fl(Pl) = Hl(Pl) x 1.5 = 196.4 + 3(60) + 0.075 (60)2
Fl(Pl) = Hl(Pl) x 1.5 = 196.4 + 3(80) + 0.075 (80)2
Fl(Pl) = Hl(Pl) x 1.5 = 196.4 + 3(100) + 0.075 (100)2

Source Code for plot the cost function unit 1 using matlab, is:
%Economic Dispatch Problem unit 1
syms
p1a=20:60;
h1a=80+8*p1a+0.024*p1a.^2;
cf1a=1.5*h1a;
p1b=60:100;
h1b=196.4+3*p1b+0.075*p1b.^2;
cf1b=1.5*h1b;
plot(p1a,cf1a,'b',p1b,cf1b,'r')
grid on;
xlabel('xp (Power Level)');
ylabel('yp (Cost Function)');
title('The cost function for unit 1')

Plot for cost function Unit 1


20MWP160MW
60MWP1100MW

Figure 1. The Cost Function for Unit 1


Unit 2
120 + 6P2 + 0.04P22
H2 (P2) =

157.335 + 3.3333 P2 + 0.08333 P22

20 MW P2 40 MW

40 MW P2 100 MW

Where:

P2 (20 MW, 40 MW, 60 MW, 80 MW, and 100 MW)

Fuel Costs = 1.5 R/MBtu


1.
2.

F2(P2) = H2 (P2) x 1.5 = 120 + 6 (20) + 0.04 (20)2


F2(P2) = H2 (P2) x 1.5 = 120 + 6 (40) + 0.04 (40)2

3.
4.
5.

F2(P2) = H2 (P2)x 1.5 = 157.335 + 3.3333 (60) + 0.08333 (60)2


F2(P2) = H2 (P2) x 1.5 = 157.335 + 3.3333 (80) + 0.08333 (80)2
F2(P2) = H2 (P2)x 1.5 = 157.335 + 3.3333 (100) + 0.08333 (100)2

Source Code for plot the cost function unit 2 using matlab, is:
%Economic Dispatch Problem unit 2
syms
p2a=20:40;
h2a=120+6*p2a+0.04*p2a.^2;
cf2a=1.5*h2a;
p2b=40:100;
h2b=157.335+3.3333*p2b+0.083333*p2b.^2;
cf2b=1.5*h2b;
plot(p2a,cf2a,'g',p2b,cf2b,'y')
grid on;
xlabel('xp (Power Level)');
ylabel('yp (Cost Function)');
title('The cost function for unit 2')

Plot for cost function Unit 2


20MWP140MW
40MWP1100MW

Figure 2. The Cost Function for Unit 2


Unit 3
100 + 4.6666P3 + 0.13333 P32
H3 (P3) =
Where:

316.66 + 2 P3 + 0.1 P32

20 MW P3 50 MW

50 MW P3 100 MW

P1 (20 MW, 40 MW, 60 MW, 80 MW, and 100 MW)

Fuel Costs = 1.5 R/MBtu


1.
2.
3.
4.
5.

F3(P3) = H3 (P3) x 1.5 = 100 + 4.6666 (20) + 0.13333 (20)2


F3(P3) = H3 (P3) x 1.5 = 100 + 4.6666 (40) + 0.13333 (40)2
F3(P3) = H3 (P3) x 1.5 = 316.66 + 2 (60) + 0.1 (60)2
F3(P3) = H3 (P3) x 1.5 = 316.66 + 2 (80) + 0.1 (80)2
F3(P3) = H3 (P3) x 1.5 = 316.66 + 2 (100) + 0.1 (100)2

Source Code for plot the cost function unit 3 using matlab, is:
%Economic Dispatch Problem unit 3
syms
p3a=20:50;
h3a=100+4.6666*p3a+0.13333*p3a.^2;
cf3a=1.5*h3a;
p3b=50:100;
h3b=316.66+2*p3b+0.1*p3b.^2;
cf3b=1.5*h3b;
plot(p3a,cf3a,'r',p3b,cf3b,'y')
grid on;
xlabel('xp (Power Level)');
ylabel('yp (Cost Function)');
title('The cost function for unit 3')

Plot for cost function Unit 3

20MWP150MW
50MWP1100MW

Figure 3. The Cost Function for Unit 3

Table 1. Cost Function for Each Unit


NO.

POWER LEVEL (MW)


P1=P2=P3

COST (R/Hour)

20

F1
374,4

F2
384,00

F3
369,99

2
3

40
60

657,6
969,6

635,99
985,99

749,98
1194,99

4
5

80
100

1374,6
1869,9

1435,96
1402,96

1674,99
2274,99

Plot for cost function Unit 1, Unit 2, and Unit 3.

Figure 5. Plot for cost function for Unit 1, Unit 2, and Unit 3.

b) Plot the incremental cost function for each unit.


These conditions and inequalities may be summarized as shown in the set of equations
making up Eq. 3.5
Unit 1
Generation limits are 20 MW P3 100 MW. Fuel Costs = 1.5 R/M Btu fora all units.
Incremental Cost function is:

dF1 (P1)
P1

80 + 8P1 + 0.024 P12


=

196.4 + 3P1 + 0.075 P12

20 MW P1 60 MW

60 MW P1 100 MW

Source Code for plot the incremental cost function unit 1 using matlab, is:
%Economic Dispatch Problem
%unit 1
p1a=20:60;
h1a=80+8*p1a+0.024*p1a.^2;
f1a=1.5*h1a;
p1b=60:100;
h1b=196.4+3*p1b+0.075*p1b.^2;
f1b=1.5*h1b;
df1a=diff(f1a);
p1a=21:60;
df1b=diff(f1b);
p1b=61:100;
plot(p1a,df1a,p1b,df1b,)
grid on;
xlabel('xp (Power Level, MW)');
ylabel('yp (Incremental Cost)');
title('The Incremental Cost Function for Unit 1')

Plot for incremental cost function Unit 1


21MWP160MW
61MWP1100MW

Figure 4. The Incremental Cost Function for Unit 1


Unit 2

Generation limits are 20 MW P3 100 MW. Fuel Costs = 1.5 R/M Btu fora all units.
Incremental Cost function is:
dF2 (P2)
P2

120 + 6P2 + 0.04P22


=

157.335 + 3.3333 P2 + 0.08333 P22

20 MW P2 40 MW

40 MW P2 100 MW

Source Code for plot the incremental cost function unit 2 using matlab, is:
%Economic Dispatch Problem
%unit 2
p2a=20:40;
h2a=120+6*p2a+0.04*p2a.^2;
cf2a=1.5*h2a;
p2b=40:100;
h2b=157.335+3.3333*p2b+0.083333*p2b.^2;
cf2b=1.5*h2b;
df2a=diff(cf2a);
p2a=21:40;
df2b=diff(cf2b);
p2b=41:100;
plot(p2a,df2a,p2b,df2b)
grid on;
xlabel('xp (Power Level, MW)');
ylabel('yp (Incremental Cost)');
title('The Incremental Cost Function for Unit 2')

Plot for incremental cost function Unit 2


21MWP140MW
41MWP1100MW

Figure 5. The Incremental Cost Function for Unit 2


Unit 3

Generation limits are 20 MW P3 100 MW. Fuel Costs = 1.5 R/M Btu fora all units.
Incremental Cost function is:
dF3 (P3)
P3

100 + 4.6666P3 + 0.13333 P32


=

316.66 + 2 P3 + 0.1 P32

20 MW P3 50 MW

50 MW P3 100 MW

Source Code for plot the incremental cost function unit 3 using matlab, is:
%Economic Dispatch Problem
%unit 3
syms
p3a=20:50;
h3a=100+4.6666*p3a+0.13333*p3a.^2;
cf3a=1.5*h3a;
p3b=50:100;
h3b=316.66+2*p3b+0.1*p3b.^2;
cf3b=1.5*h3b;
df3a=diff(cf3a);
p3a=21:50;
df3b=diff(cf3b);
p3b=51:100;
plot(p3a,df3a,p3b,df3b)
grid on;
xlabel('xp (Power Level, MW)');
ylabel('yp (Incremental Cost)');
title('The Incremental Cost Function for Unit 3')

Plot for incremental cost function Unit 3


21MWP150MW
51MWP1100MW

Figure 6. The Incremental Cost Function for Unit 3


Table 2. Incremental Cost Function for Each Unit
NO.

POWER LEVEL (MW)


P1=P2=P3

F1

1
2

20
40

13.44
14.88

COST (R/Hour)
F2
11.4
14.999955

F3

14.9997
22.9995

3
4

60
80

18
22.5

19.99935
24.99915

21
27

100

27

29.99975

33

Plot for incremental cost function Unit 1, Unit 2, and Unit 3.

Figure 7. Plot for cost function for Unit 1, Unit 2, and Unit 3.

c) Find the most economical dispatch for the following total demands assuming all units
are on-line:
PD
PD
PD
PD
PD

=
=
=
=
=

100 MW
140 MW
180 MW
220 MW
260 MW

Where :
PD = P1 + P2 + P3

Solve using dynamic programming and discrete load steps of 20 MW, starting at 20
MW through 100 MW for each unit.
Scheduling units 1 and 2, we find the minimum cost for the function
f2 = F1 (D P2) + F2 (P2)
The total deman is PD = 100 MW; 140 MW; 180 MW; 220 MW; 260 MW, so we need to
interpolate between the closest values that are available from the data. 260 MW

Table 2. Minimal Function Cost f2


P MW
F P
(R/h)
D
(MW)
20
40
60
80
100
120
140
160
180
200
220
240
260

F D
(R/h)
374,40
657,60
969,60
1374,60
1869,60

20

40

60

80

100

384,00

635,99

985,98

1435,97

1985,95

758,40
1041,60
1353,60
1758,60
2253,60

1010,39
1293,59
1605,59
2010,59
2505,59

1360,38
1643,58
1955,58
2360,58
2855,58

1810,37
2093,57
2405,57
2810,57
3305,57

The result is:


Table 3. Loading of unit 2 at minimal cost level.
D

40
60

758,40
1010,39

80
100

1293,59
1605,59

40
40

120
140

1955,58
2360,58

60
60

160
180

2810,57
3305,57

80
80

200
220

3855,55

100

20

240
260

20
40

Next we minimize
F3= F2 (D P3) + F3 (P3)

2360,35
2643,55
2955,55
3360,55
3855,55

f
(R/h)

758,40
1010,39
1293,59
1605,59
1955,58
2360,58
2810,57
3305,57
3855,55

P*
(MW)

20
40
40
40
60
60
80
80
100

For 20 P 100 MW and PD = 100 MW; 140 MW; 180 MW; 220 MW; 260 MW.
Scheduling the tird unit for the nine different demand levels only requires nine rows of
the next table.
Table 4. Minimal Function Cost f3
P MW
F P
(R/h)
D
(MW)

f
(R/h)

20
40

758,40

60

1010,39

80

1293,59

100

1605,59

120

1955,58

140

2360,58

160

2810,57

180

3305,57

200

3855,55

220
240
260

20

40

60

80

100

370,00

749,99

1194,99

1674,99

2274,99

1128,40

1380,39

1508,39

1663,59

1760,38

1953,39

1975,59

2043,58

2205,38

2325,58

2355,58

2730,58

f
(R/h)

P*
(MW)

1128,40

20

1380,39

20
20

2433,39

1663,59
1975,59

20

2488,58

2685,38

3033,39

2325,58

20

2705,57

2800,58

2968,58

3285,38

2705,57

40

3180,56

3110,57

3150,57

3280,58

3568,58

3110,57

40

3675,56

3560,55

3555,57

3630,57

3880,58

3555,57

60

4225,54

4055,55

4005,56

4035,57

4230,57

4005,56

60

4605,54

4500,56

4485,56

4635,57

4485,56

80

5050,54

4980,56

5085,56

4980,56

80

The result show:


Table 5. The result for a demand level of 100 MW, 140MW, 180MW, 220, and 260 MW

D (MW)

Cost (R/h)

P*

P*

P*

100

1663,59

20

40

40

140

2325,58

20

60

60

180

3110,57

40

60

80

220

4005,56

60

80

80

260

4980,56

80

80

100

So, base on the table 5. We have the results for a demand of 100 MW on minimum cost
in operating unit, are:
P1 = 40, P2 = 40, and unit P3 = 20.

d) Solve dispatch problems without dynamic programming for PD = 100 MW.


We can use Matlab software for search the result fuel cost, and the sourc code are:
%Dispatch problems with Lambda Iteration
disp('###############Dispatch problems with Lambda
Iteration##############')
disp('_________________________________________________________________')
h = 0.001;
ia = [80; 120; 100];
ib = [8; 6; 4.6666];
ic = [0.024; 0.04; 0.13333];
id = [0.04; 0.13333];
ie = [0.024; 0.13333];
ig = [0.024; 0.04];
PD = 100;
delta_P = 0.001;
lambda = input('Input Lambda Value :');
disp('|"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""|')
disp('|Iterasi| Lambda |
P1
|
P2
|
P3
|
|')
disp('|
| R/MWh) | (MW)
| (MW)
| (MW) |
|')
disp('|"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""|')
iterasi = 0;
while abs(delta_P) >= 0.001
iterasi = iterasi +1;
P = (lambda - ib)./(2*ic);
delta_P = PD - sum(P);
J = sum(1./(2*ic));
delta_lambda = (delta_P)/J;
fprintf('| %2.0f
|%8.4f |%9.4f
iterasi, lambda, P(1), P(2), P(3) )
lambda = lambda + delta_lambda;
end
J1 = sum(1./(2*id));
J2 = sum(1./(2*ie));
J3 = sum(1./(2*ig));
iterasi = iterasi +1;
if P(1) < 20
P(1) = 20;
delta_P = PD - (P(1)+P(2)+P(3));
delta_lambda = (delta_P)/J1;
lambda = lambda + delta_lambda;
P(2) = (lambda - ib(2))./(2*ic(2));
P(3) = (lambda - ib(3))./(2*ic(3));
else if P(1) > 60
P(1) = 60;
delta_P = PD - (P(1) +P(2) + P(3));
delta_lambda = (delta_P)/J1;
lambda = lambda + delta_lambda;
P(2) = (lambda - ib(2))./(2*ic(2));
P(3) = (lambda - ib(3))./(2*ic(3));
else if P(2) < 20
P(2) = 20;
delta_P = PD - (P(1)+P(2)+P(3));
delta_lambda = (delta_P)/J2;
lambda = lambda + delta_lambda;
P(1) = (lambda - ib(1))./(2*ic(1));
P(3) = (lambda - ib(3))./(2*ic(3));
else if P(2) > 40
P(2) = 40;

|%9.4f

|%10.4f

|\n',

delta_P = PD - (P(1) +P(2) + P(3));


delta_lambda = (delta_P)/J2;
lambda = lambda + delta_lambda;
P(1) = (lambda - ib(1))./(2*ic(1));
P(3) = (lambda - ib(3))./(2*ic(3));
else if P(3) < 20;
P(3) = 20;
delta_P = PD - (P(1) +P(2) + P(3));
delta_lambda = (delta_P)/J3;
lambda = lambda + delta_lambda;
P(1) = (lambda - ib(1))./(2*ic(1));
P(2) = (lambda - ib(3))./(2*ic(2));
else if P(3) > 50;
P(3) = 50;
delta_P = PD - (P(1) +P(2) + P(3));
delta_lambda = (delta_P)/J3;
lambda = lambda + delta_lambda;
P(1) = (lambda - ib(1))./(2*ic(1));
P(2) = (lambda - ib(3))./(2*ic(2));
end
end
end
end
end
end
fprintf('| %2.0f
|%8.4f |%9.4f |%9.4f |%10.4f
|\n',
iterasi, lambda, P(1), P(2), P(3) )
disp('|===============================================================|')
disp('|===============================================================|')
Ct = sum(ia)+([P(1) P(2) P(3)]*ib)+sum([P(1)^2 P(2)^2 P(3)^2]*ic);
disp('|
|')
disp(['|
','Your Fuel Cost = ' num2str(Ct),' ', 'R/h
|'])
disp('|===============================================================|')
disp('|===============================================================|')

The result from program, is:


###################Dispatch problems with Lambda Iteration################
_______________________________________________________________________
>> lamdaiteration
##############Dispatch problems with Lambda Iteration############
_________________________________________________________________
Input Lambda Value :9
|Iterasi| Lambda | P1
|

| R/MWh) | (MW)

| P2

| P3 |

| (MW) | (MW) |

| 1 | 9.0000 | 20.8333 | 37.5000 | 16.2507

| 2 | 9.6854 | 35.1120 | 46.0672 | 18.8209

| 3 | 9.9322 | 40.2536 | 40.0000 | 19.7464

|===============================================================|
|===============================================================|
|

Your Fuel Cost = 1109.0539 R/h

|===============================================================|
|===============================================================|

We put example , input lambda is 9


Iterasi
1
2
3
Fuel Cost

Lambda
R/MWh
9.0000
9.6854
9.9322
1109.0539 R/h

P1

P2

P3

20.8333
35.1120
40.2536

37.5000
46.0672
40.0000

16.2507
18.8209
19.7464

You might also like