⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fm_gams.m

📁 基于PSAT 软件的多目标最优潮流计算用于中小型电力系统的分析和管理
💻 M
📖 第 1 页 / 共 4 页
字号:
        if isempty(CPF.lambda)          fm_disp([' * CPF solution: <empty>'])        elseif isnan(CPF.lambda)          fm_disp([' * CPF solution: <NaN>'])        else          fm_disp([' * CPF solution: ',num2str(CPF.lambda-1)])        end        if isnan(CPF.lambda)          stop_opf = 1;          break        end        if isempty(CPF.lambda)          stop_opf = 1;          break        end        if CPF.lambda ~= lambdaci          CPF.lambda = CPF.lambda - 0.995;        end        if CPF.lambda < lambdaci & abs(ml) <= 1e-5          ml = 0;          CPF.lambda = lmin+1e-5;        end        if CPF.lambda < lmin & abs(ml) > 1e-5          fm_disp([' * Decrease Delta Ps and Delta Pd'])          delta = 0.5*delta;          if delta < 5e-8            fm_disp([' * CPF method cannot find a higher lambda'])            stop_opf = 1;            break          end          repeat_cpf = 1;        else          repeat_cpf = 0;        end        % maximum lambda increment        if (CPF.lambda - lmin) > 0.025 % & (abs(ml) > 1e-5 | CPF.lambda > 0.6)          fm_disp(['lambda critical = ',num2str(CPF.lambda)])          fm_disp(['Limit lambda increment to threshold (0.025)'])          CPF.lambda = lmin + 0.025;        end        % stopping criterion        % ------------------------------------------------------        if last_point          fm_disp('Reached maximum lambda.')          if CPF.lambda > lmin            fm_disp('Desired maximum lambda is not critical.')          end          stop_opf = 1;          break        end        if i >= CPF.nump          fm_disp('Reached maximum # of continuation steps.')          stop_opf = 1;          break        end        if CPF.lambda >= GAMS.lmax          CPF.lambda = GAMS.lmax;          last_point = 1;        end        if CPF.lambda == 0          fm_disp('Base case solution is likely unfeasible.')          stop_opf = 1;          break        end        if abs(lmin-CPF.lambda) < 1e-5          %fm_disp(['|lambda(i+1) - lambda(i)| = ', ...          %         num2str(abs(lmin-CPF.lambda))])          fm_disp('Lambda increment is lower than the desired tolerance.')          stop_opf = 1;          break        elseif ~repeat_cpf          if abs(ml) < 1e-5            lmin = CPF.lambda+0.001;            lmax = CPF.lambda+0.001;          else            lmin = CPF.lambda;            lmax = CPF.lambda;          end          break        end      end      %end      if stop_opf, break, end    end    % restore original data and settings    % --------------------------------------------------------    DAE.V = Snapshot(1).V;    DAE.a = Snapshot(1).ang;    Snapshot(1).Pg = snappg;    Bus.Pg = Bus_old.Pg;    Bus.Qg = Bus_old.Qg;    Bus.Pl = Bus_old.Pl;    Bus.Ql = Bus_old.Ql;    DAE.J11 = J11old;    DAE.J12 = J12old;    DAE.J21 = J21old;    DAE.J22 = J22old;    PV = restore(PV);    SW = restore(SW);    PQ = pqreset(PQ,'all');    CPF = CPF_old;    CPF.init = 4;    Varout.t = [];    Varout.vars = [];    fm_disp    % uncomment to plot [dP/d lambda] instead of [P]    %Ps = DPs;    %Pd = DPd;  else    fm_disp('Continuation OPF not implemented yet...')    cd(currentpath)    return  endend% -------------------------------------------------------------------% Output% -------------------------------------------------------------------MVA = Settings.mva;TPQ = MVA*totp(PQ);% character for backslashbslash = char(92);if GAMS.method == 6, type = 3; endif type == 2 | type == 3  switch GAMS.flow   case 0, flow = 'I_';   case 1, flow = 'I_';   case 2, flow = 'P_';   case 3, flow = 'S_';  end  Lf = cellstr(num2str(Line.from));  Lt = cellstr(num2str(Line.to));  TD = MVA*sum(Pd')';  if type == 2    TD = MVA*sum(Pd,2);    TTL = TD + TPQ*Ch.val';    TL = MVA*sum(Ps')' + MVA*sum(Bus.Pg)*Ch.val' - TTL;    TBL = TL - MVA*Snapshot(1).Ploss*Ch.val';    for i = 1:size(Ps,1)      PG(i,:) = full(sparse(1,iBPs,Ps(i,:),1,Bus.n)+Ch.val(i)*Bus.Pg')*MVA;    end    for i = 1:size(Pd,1)      PL(i,:) = full(sparse(1,iBPd,Pd(i,:),1,Bus.n)+Ch.val(i)*Bus.Pl')*MVA;    end  elseif type == 3    TTL = TD + TPQ;    TL = MVA*sum(Ps')' + MVA*sum(Bus.Pg) - TTL;    TBL = TL - MVA*Snapshot(1).Ploss;    for i = 1:size(Ps,1)      PG(i,:) = full(sparse(1,iBPs,Ps(i,:),1,Bus.n)+Bus.Pg')*MVA;    end    for i = 1:size(Pd,1)      PL(i,:) = full(sparse(1,iBPd,Pd(i,:),1,Bus.n)+Bus.Pl')*MVA;    end  end  PayS = -PG.*ro;  PayD = PL.*ro;  ISO = sum(PayS')'+sum(PayD')';  if GAMS.method == 4 | GAMS.method == 6    MLC = TTL.*(1+lambdac);  elseif GAMS.method == 5    MLC = TTL.*lambdac;  end  Varname.uvars = strcat('PS_',{Varname.bus{Supply.bus}}');  Varname.uvars = [Varname.uvars;strcat('PD_',{Varname.bus{Demand.bus}}')];  Varname.uvars = [Varname.uvars;strcat('PG_',{Varname.bus{:}}')];  Varname.uvars = [Varname.uvars;strcat('PL_',{Varname.bus{:}}')];  Varname.uvars = [Varname.uvars;strcat('Pay_S_',{Varname.bus{:}}')];  Varname.uvars = [Varname.uvars;strcat('Pay_D_',{Varname.bus{:}}')];  Varname.uvars = [Varname.uvars;strcat('theta_',{Varname.bus{:}}')];  Varname.uvars = [Varname.uvars;strcat('V_',{Varname.bus{:}}')];  Varname.uvars = [Varname.uvars;strcat('Qg_',{Varname.bus{iBQg}}')];  if GAMS.method > 2 & GAMS.method ~= 5    Varname.uvars = [Varname.uvars;strcat('LMP_',{Varname.bus{:}}')];    Varname.uvars = [Varname.uvars;strcat('NCP_',{Varname.bus{:}}')];  elseif GAMS.method == 2    Varname.uvars = [Varname.uvars;strcat('LMP_',{Varname.bus{:}}')];  elseif GAMS.method == 5    Varname.uvars = [Varname.uvars;strcat(bslash,'rho_',{Varname.bus{:}}')];  else    Varname.uvars = [Varname.uvars;{'MCP'}];  end  Varname.uvars = [Varname.uvars;strcat(flow,Lf,'-',Lt)];  Varname.uvars = [Varname.uvars;strcat(flow,Lt,'-',Lf)];  Varname.uvars = [Varname.uvars;{'Total Demand';'TTL';'Total Losses'; ...                      'Total Bid Losses';'IMO Pay'}];  if GAMS.method >= 4    Varname.uvars = [Varname.uvars;{'MLC'}];    Varname.uvars = [Varname.uvars;{'ALC'}];  end  Varname.fvars = strcat('P_{S',{Varname.bus{Supply.bus}}','}');  Varname.fvars = [Varname.fvars;strcat('P_{D',{Varname.bus{Demand.bus}}','}')];  Varname.fvars = [Varname.fvars;strcat('P_{G',{Varname.bus{:}}','}')];  Varname.fvars = [Varname.fvars;strcat('P_{L',{Varname.bus{:}}','}')];  Varname.fvars = [Varname.fvars;strcat('Pay_{S',{Varname.bus{:}}','}')];  Varname.fvars = [Varname.fvars;strcat('Pay_{D',{Varname.bus{:}}','}')];  Varname.fvars = [Varname.fvars;strcat(bslash,'theta_{',{Varname.bus{:}}','}')];  Varname.fvars = [Varname.fvars;strcat('V_{',{Varname.bus{:}}','}')];  Varname.fvars = [Varname.fvars;strcat('Q_{g',{Varname.bus{iBQg}}','}')];  if GAMS.method > 2  & GAMS.method ~= 5    Varname.fvars = [Varname.fvars;strcat('LMP_{',{Varname.bus{:}}','}')];    Varname.fvars = [Varname.fvars;strcat('NCP_{',{Varname.bus{:}}','}')];  elseif GAMS.method == 2    Varname.fvars = [Varname.fvars;strcat('LMP_{',{Varname.bus{:}}','}')];  elseif GAMS.method == 5    Varname.fvars = [Varname.fvars;strcat(bslash,'rho_',{Varname.bus{:}}')];  else    Varname.fvars = [Varname.fvars;{'MCP'}];  end  Varname.fvars = [Varname.fvars;strcat(flow,'{',Lf,'-',Lt,'}')];  Varname.fvars = [Varname.fvars;strcat(flow,'{',Lt,'-',Lf,'}')];  Varname.fvars = [Varname.fvars;{'Total Demand';'TTL';'Total Losses'; ...                   'Total Bid Losses';'IMO Pay'}];  if GAMS.method >= 4    Varname.fvars = [Varname.fvars;{'MLC'}];    Varname.fvars = [Varname.fvars;{'ALC'}];  end  switch GAMS.method   case 3 % OPF    Varout.vars = [Ps*MVA,Pd*MVA,PG,PL,PayS,PayD,a,V,Qg(:,iBQg)*MVA, ...                  ro,NCP,Pij,Pji,TD,TTL,TL,TBL,ISO];   case {4,6} % VSC-OPF    Varname.uvars = [Varname.uvars;{'lambda_c';'kg_c'}];    Varname.uvars = [Varname.uvars;strcat('thetac_',{Varname.bus{:}}')];    Varname.uvars = [Varname.uvars;strcat('Vc_',{Varname.bus{:}}')];    Varname.uvars = [Varname.uvars;strcat('Qgc_',{Varname.bus{iBQg}}')];    Varname.uvars = [Varname.uvars;strcat(flow,'c',Lf,'-',Lt)];    Varname.uvars = [Varname.uvars;strcat(flow,'c',Lt,'-',Lf)];    Varname.fvars = [Varname.fvars;{[bslash,'lambda_c'];'k_g_c'}];    Varname.fvars = [Varname.fvars;strcat(bslash,'theta_{c',{Varname.bus{:}}','}')];    Varname.fvars = [Varname.fvars;strcat('V_{c',{Varname.bus{:}}','}')];    Varname.fvars = [Varname.fvars;strcat('Q_{gc',{Varname.bus{iBQg}}','}')];    Varname.fvars = [Varname.fvars;strcat(flow,'{c',Lf,'-',Lt,'}')];    Varname.fvars = [Varname.fvars;strcat(flow,'{c',Lt,'-',Lf,'}')];    Varout.vars = [Ps*MVA,Pd*MVA,PG,PL,PayS,PayD,a,V,Qg(:,iBQg)*MVA, ...                  ro,NCP,Pij,Pji,TD,TTL,TL,TBL,ISO,MLC,MLC-TTL,lambdac,kg, ...                  ac,Vc,Qgc(:,iBQg)*MVA,Pijc,Pjic];   case 5 % MLC    Varname.uvars = [Varname.uvars;{'lambda_c';'kg_c'}];    Varname.fvars = [Varname.fvars;{bslash,'lambda_c';'k_g_c'}];    Varout.vars = [Ps*MVA,Pd*MVA,PG,PL,PayS,PayD,a,V,Qg(:,iBQg)*MVA, ...                  ro,Pij,Pji,TD,TTL,TL,TBL,ISO,MLC,lambdac,kg];   otherwise % SA and MCM    Varout.vars = [Ps*MVA,Pd*MVA,PG,PL,PayS,PayD,a,V,Qg(:,iBQg)*MVA, ...                  MCP,Pij,Pji,TD,TTL,TL,TBL,ISO];  end  if GAMS.method == 6 % Continuation OPF    Settings.xlabel = [bslash,'lambda (loading parameter)'];    Varout.t = Lambda';  elseif type == 2 % Multi Period Auction    Varout.vars = Varout.vars([2:end],:);    Settings.xlabel = 'hour [h]';    Varout.t = [1:Ypdp.len]';  elseif type == 3 % Pareto Set Single Period Auction    Settings.xlabel = [bslash,'omega (weighting factor)'];    Varout.t = GAMS.omega';  end    Varout.idx = [1:length(Varout.vars(1,:))];  fm_disp(' ---------------------------------------------------------------')  fm_disp([' Check file ',Path.psat,'fm_gams.lst for GAMS report.'])  if strcmp(control,'6')    fm_disp([' PSAT-GAMS Optimization Routine completed in ', ...             num2str(etime(clock,initial_time)),' s'])  else    fm_disp([' PSAT-GAMS Optimization Routine completed in ',num2str(toc),' s'])  end  Demand = restore(Demand);  if ~GAMS.basepl    Bus.Pl = buspl;    Bus.Ql = busql;    PQ = pqreset(PQ,'all');  end  if ~GAMS.basepg    Snapshot(1).Ploss = ploss;    Bus.Pg = buspg;    Bus.Qg = busqg;    PV = pvreset(PV,'all');  end  % restore original bus power injections  Bus.Pg = Snapshot(1).Pg;  Bus.Qg = Snapshot(1).Qg;  Bus.Pl = Snapshot(1).Pl;  Bus.Ql = Snapshot(1).Ql;  returnendif type == 4  Ps = Ps(2,:)';  Pd = Pd(2,:)';  V = V(2,:)';  a = a(2,:)';  Qg = Qg(2,iBQg)';  Pij = Pij(2,:)';  Pji = Pji(2,:)';  if GAMS.method <= 2    MCP = MCP(2,:);  end  if GAMS.method >= 3    ro = ro(2,:)';    if GAMS.method ~= 5      NCP = NCP(2,:)';    end  end  if GAMS.method == 4 | GAMS.method == 6    Vc = Vc(2,:)';    ac = ac(2,:)';    Qgc = Qgc(2,iBQg)';    Pijc = Pijc(2,:)';    Pjic = Pjic(2,:)';  end  if GAMS.method >= 4    lambdac = lambdac(2);    kg = kg(2);  endendDemand = pset(Demand,Pd);Supply = pset(Supply,Ps);if GAMS.method == 4 | GAMS.method == 6  DAE.V = Vc;  DAE.a = ac;  fm_lf(1)  glfpc = DAE.glfp;  glfqc = DAE.glfq;endif GAMS.method >= 3  DAE.V = V;  DAE.a = a;  fm_lf(1)  Qg = Qg(iBQg);endif GAMS.method == 1  ro = MCP*ones(Bus.n,1);endif GAMS.method == 2  [rows,cols] = size(MCP);  if rows == 1,    ro = MCP';  else    ro = MCP;  endendQgmin = Qgmin(iBQg);Qgmax = Qgmax(iBQg);if GAMS.basepl  PG = full((sparse(iBPs,1,Ps,Bus.n,1)+Bus.Pg)*MVA);  PL = full((sparse(iBPd,1,Pd,Bus.n,1)+Bus.Pl)*MVA);else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -