📄 makeay.m
字号:
function [Ay, by] = makeAy(baseMVA, ng, gencost, pgbas, qgbas, ybas)% makeAy: Make the A matrix and RHS for the CCV formulation.%% [Ay, by] = makeAy(baseMVA, ng, gencost, pgbas, qgbas, ybas) constructs% a matrix Ay and vector by such that the "basin constraints" on Pg,% Qg and Y that the CCV cost formulation uses are expressed as% Ay * x <= by% where x are the optimization variables. The starting index within the x% vector for the active, reactive sources and the y variables should be % provided in arguments pgbas, qgbas, ybas. The number of generators is ng.%% Assumptions: all generators are committed. Filter any generators% that are offline from the gencost() matrix before calling makeAy.% Efficiency depends on Qg variables being after Pg variables,% and the Y variables must be the last variables within the vector x for% the dimensions of the resulting Ay to be conformable with x .% MATPOWER% $Id: makeAy.m,v 1.5 2004/09/17 13:42:20 ray Exp $% by Carlos E. Murillo-Sanchez, PSERC Cornell & Universidad Autonoma de Manizales% Copyright (c) 1996-2004 by Power System Engineering Research Center (PSERC)% See http://www.pserc.cornell.edu/matpower/ for more info.[PW_LINEAR, POLYNOMIAL, MODEL, STARTUP, SHUTDOWN, NCOST, COST] = idx_cost;% find all pwl cost rows in gencost, either real or reactiveiycost = find(gencost(:, MODEL) == PW_LINEAR);% this is the number of extra "y" variables needed to model those costsny = size(iycost, 1);if ny == 0 Ay = sparse([], [], [], 0, 0, 0);; by = []; returnend% if p(i),p(i+1),c(i),c(i+1) define one of the cost segments, then% the corresponding constraint on Pg (or Qg) and Y is% c(i+1) - c(i)% Y >= c(i) + m * (Pg - p(i)), m = ---------------% p(i+1) - p(i)%% this becomes m * Pg - Y <= m*p(i) - c(i)% Form A matrix. Use two different loops, one for the PG/Qg coefs,% then another for the y coefs so that everything is filled in the% same order as the compressed column sparse format used by matlab;% this should be the quickest.m = sum(gencost(iycost, NCOST)); % total number of cost pointsAy = sparse([], [], [], m-ny, ybas+ny-1, 2*(m-ny)); by = [];% First fill the Pg or Qg coefficients (since their columns come first)% and the rhsk = 1;for i=iycost' ns = gencost(i, NCOST); % # of cost points; segments = ns-1 p = gencost(i, COST:2:COST+2*ns-1) / baseMVA; c = gencost(i, COST+1:2:COST+2*ns); m = diff(c) ./ diff(p); % slopes for Pg (or Qg) if any(diff(p) == 0) fprintf('\nmakeAy: bad x axis data in row %i of gencost matrix\n',i); end b = m .* p(1:ns-1) - c(1:ns-1); % and rhs by = [by; b']; if i > ng sidx = qgbas + (i-ng) - 1; % this was for a q cost else sidx = pgbas + i - 1; % this was for a p cost end Ay(k:k+ns-2, sidx) = m'; k = k + ns - 1;end% Now fill the y columns with -1'sk = 1;j = 1;for i=iycost' ns = gencost(i, NCOST); Ay(k:k+ns-2, ybas+j-1) = -ones(ns-1,1); k = k + ns - 1; j = j + 1;endreturn;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -