Dispatch.m
上传用户:eighthdate
上传日期:2014-05-24
资源大小:270k
文件大小:4k
源码类别:

其他行业

开发平台:

Matlab

  1. % This program solves the coordination equation for economic scheduling
  2. % of generation.  The program requires the total load demand (Pdt), the
  3. % cost function matrix (cost) and the gen. mwlimits.  If mwlimits is not
  4. % defined the scheduling is obtained with no generation limits. If the
  5. % basemva and any of the loss coefficients B, B0 and B00 are specified
  6. % optimum dispatch is obtained including the system losses.
  7. %
  8. % copyright (c) 1998 by H. Saadat
  9. clear Pgg
  10. if exist('Pdt')~=1
  11. Pdt = input('Enter total demand Pdt = ');
  12. else, end
  13. if exist('cost')~=1
  14. cost = input('Enter the cost matrix, cost = ');
  15. else, end
  16. ngg = length(cost(:,1));
  17. if exist('mwlimits')~=1
  18. mwlimits= [zeros(ngg, 1), inf*ones(ngg,1)];
  19. else, end
  20. if exist('B')~=1
  21. B = zeros(ngg, ngg);
  22. else, end
  23. if exist('B0')~=1
  24. B0=zeros(1, ngg);
  25. else, end
  26. if exist('B00')~=1
  27. B00=0;
  28. else, end
  29. if exist('basemva')~=1
  30. basemva=100;
  31. else, end
  32. clear Pgg
  33. Bu=B/basemva; B00u=basemva*B00;
  34. alpha=cost(:,1); beta=cost(:,2); gama = cost(:,3);
  35. Pmin=mwlimits(:,1); Pmax=mwlimits(:,2);
  36. wgt=ones(1, ngg);
  37. if Pdt > sum(Pmax)
  38. Error1 = ['Total demand is greater than the total sum of maximum generation.'
  39.           'No feasible solution.  Reduce demand or correct generator limits.'];
  40. disp(Error1), return
  41. elseif Pdt < sum(Pmin)
  42. Error2 = ['Total demand is less than the total sum of minimum generation.    '
  43.           'No feasible solution. Increase demand or correct generator limits.'];
  44. disp(Error2), return
  45. else, end
  46. iterp = 0;                                  % Iteration counter
  47. DelP = 10;              % Error in DelP is set to a high value
  48. E=Bu;
  49. if exist('lambda')~=1
  50. lambda=max(beta);
  51. end
  52. while abs(DelP)  >= 0.0001  & iterp < 200     % Test for convergence
  53. iterp = iterp + 1;                           % No. of iterations
  54. for k=1:ngg
  55.     if wgt(k) == 1
  56.        E(k,k) = gama(k)/lambda + Bu(k,k);
  57.        Dx(k) = 1/2*(1 - B0(k)- beta(k)/lambda);
  58.        else, E(k,k)=1;  Dx(k) = 0;
  59.             for m=1:ngg
  60.                if m~=k
  61.                E(k,m)=0;
  62.                else,end
  63.              end
  64.        end
  65. end
  66. PP=EDx';
  67. for k=1:ngg
  68. if wgt(k)==1
  69.    Pgg(k) = PP(k);
  70.    else,end
  71. end
  72. Pgtt = sum(Pgg);
  73. PL=Pgg*Bu*Pgg'+B0*Pgg'+B00u;
  74. DelP =Pdt+PL -Pgtt ;                                  %Residual
  75. for k = 1:ngg
  76.    if Pgg(k) > Pmax(k) & abs(DelP) <=0.001,
  77.    Pgg(k) = Pmax(k); wgt(k) = 0;
  78.    elseif Pgg(k) < Pmin(k) & abs(DelP) <= 0.001
  79.    Pgg(k) = Pmin(k); wgt(k) = 0;
  80.    else, end
  81. end
  82. PL=Pgg*Bu*Pgg'+B0*Pgg'+B00u;
  83. DelP =Pdt +PL - sum(Pgg);                              %Residual
  84.   for k=1:ngg
  85.   BP = 0;
  86.      for m=1:ngg
  87.          if m~=k
  88.             BP = BP + Bu(k,m)*Pgg(m);
  89.             else, end
  90.      end
  91.   grad(k)=(gama(k)*(1-B0(k))+Bu(k,k)*beta(k)-2*gama(k)*BP)/(2*(gama(k)+lambda*Bu(k,k))^2);
  92.   end
  93. sumgrad=wgt*grad';
  94. Delambda = DelP/sumgrad;                 % Change in variable
  95. lambda = lambda + Delambda;              % Successive solution
  96. end
  97. fprintf('Incremental cost of delivered power (system lambda) = %9.6f $/MWh n', lambda);
  98. fprintf('Optimal Dispatch of Generation:nn')
  99. disp(Pgg')
  100. %fprintf('Total system loss = %g MW nn', PL)
  101. ng=length(Pgg);
  102. n=0;
  103. if exist('nbus')==1 | exist('busdata')==1
  104.   for k=1:nbus
  105.      if kb(k)~=0
  106.         n=n+1;
  107.         if n <= ng
  108.         busdata(k,7)=Pgg(n); else, end
  109.      else , end
  110.   end
  111.   if n == ng
  112.      for k=1:nbus
  113.          if kb(k)==1
  114.          dpslack = abs(Pg(k)-busdata(k,7))/basemva;
  115.          fprintf('Absolute value of the slack bus real power mismatch, dpslack = %8.4f pu n', dpslack)
  116.          else, end
  117.      end
  118.    else, end 
  119.  else, end
  120. clear BP Dx DelP Delambda E PP grad sumgrad wgt Bu B00u B B0 B00