Solving economic dispatch problem
17 views (last 30 days)
Show older comments
This code is about solving economic dispatch problem with constraints. (pmax,pmin, ramp rate, reserve power)
But solution dosen't match with demand. how can i fix this?
genp = [500 150 1 5 10 40 60
700 200 2 17 20 40 30
750 250 3 15 5 30 40
550 100 4 20 7 50 50
600 50 5 30 15 10 10
300 0 6 10 17 60 20];
Pmax = genp(:,1).*ones(6,24);
Pmin = genp(:,2).*ones(6,24);
a = genp(:,3).*ones(6,24);
b = genp(:,4).*ones(6,24);
c = genp(:,5).*ones(6,24);
RU = genp(:,6).*ones(6,24);
RD = genp(:,7).*ones(6,24);
Demand = [2000 1753 1521 1318 1159 1051 1003 1016 1091 1222 ...
1402 1618 1859 2108 2351 2572 2757 2895 2978 2999 ...
2959 2859 2706 2508];
Reserve = [263 282 125 283 227 119 155 209 292 293 131 295 ...
292 197 260 128 184 284 259 292 231 107 270 287];
p = optimvar('p',6,24,'LowerBound',0);
x0 = zeros(6*24,1);
opt = optimproblem;
opt.Objective = sum(sum(a.*p.*p) + sum(b.*p) + sum(c));
opt.Constraints.consmax = optimconstr(6,24);
opt.Constraints.consmin = optimconstr(6,24);
for g = 1:6
for t = 1:24
opt.Constraints.consmax(g,t) = Pmin(g,t) <= p(g,t);
opt.Constraints.consmin(g,t) = p(g,t) <= Pmax(g,t);
end
end
opt.Constraints.consG = optimconstr(24);
for t=1:24
opt.Constraints.consG(t) = sum(p(:,t)) == Demand(t) + Reserve(t);
end
opt.Constraints.consRU = optimconstr(6,24);
opt.Constraints.consRD = optimconstr(6,24);
for g = 1:6
for t = 2:24
opt.Constraints.consRU(g,t) = p(g,t) - p(g,t-1) <= RU(g,t);
opt.Constraints.consRD(g,t) = p(g,t-1) - p(g,t) <= RD(g,t);
end
end
problem = prob2struct(opt,'ObjectiveDerivative','finite-differences',...
'Solver','quadprog');
problem.x0 =x0;
[sol,fval,exitflag,output] = quadprog(problem);
fval;
g = zeros(6,24);
for t = 1:24
g(:,t) = sol(6*(t-1)+1:6*t);
end
plot(g');
0 Comments
Accepted Answer
Torsten
on 19 Mar 2023
Moved: Torsten
on 19 Mar 2023
The message from "quadprog" says that no feasible solution can be found. So you will have to reconsider your constraints - it seems they cannot be satisfied.
I think you will have to use
opt.Constraints.consG = optimconstr(24);
for t=1:24
opt.Constraints.consG(t) = sum(p(:,t)) >= Demand(t) + Reserve(t);
end
instead of
opt.Constraints.consG = optimconstr(24);
for t=1:24
opt.Constraints.consG(t) = sum(p(:,t)) == Demand(t) + Reserve(t);
end
0 Comments
More Answers (0)
See Also
Categories
Find more on Get Started with Problem-Based Optimization and Equations 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!