Dear Alvaro,

Ok, I think i see what you're trying to do, but there are a few mistakes. I 
assume you are trying to minimize the square of the difference between the 
dispatch and a precomputed loss-minimizing dispatch, correct?

So, equation (5.27) does have quadratic and linear terms for w, but if d=2, 
then w is already a quadratic function of x (or at least of r, which is a 
linear function of x). I suggest that you set H to zero and Cw to all ones and 
stick with d=2. The other option would be to set d=1 and leave H and Cw as they 
are.

The only other issue I see, and probably the one this is causing the real 
problems, is that you want m=1, not m=0 (see equation 5.30).

Hope this helps,

--
Ray Zimmerman
Senior Research Associate
211 Warren Hall, Cornell University, Ithaca, NY 14853
phone: (607) 255-9645



On Jan 7, 2011, at 3:49 PM, Álvaro Jaramillo Duque wrote:

Dear Professor Zimmerman and all members

I still have problems with the "User-defined Cost" function in MATPOWER. In the 
end I always got a convergence problem.

First, I want understand the meaning of the all variables. In the equation 
(5.27) of the manual, the first term is for the quadratic part, and the second 
one is for the lineal part, I am right?

For this reason if H is a zero matrix, the first term is not included in the 
function. Like is in the test files in the folder t/t_opf_mips.m.

What I want to do is implement only  the quadratic part of the function,  
applied to all the generators in the system.

I will need just to set N, rhat, d=2, k=0, m=0 and H.

H defined as symmetric matrix with dimension nw x nw. If I want to use all the 
generators, then nw = ng, and I can define H as:

H = 2 * sparse( 1:ng,1:ng, ones(1,ng), ng, ng);

I will enclose the rest of the code to be more understandable.

Thanks,

Alvaro Jaramillo Duque

% matpower must be in the path
casefile = 'case30.m';
mpc = loadcase(casefile);

%% data dimensions
nb   = size(mpc.bus, 1);    %% number of buses
na   = max(mpc.bus(:,7));    %% number of areas
nl   = size(mpc.branch, 1); %% number of branches
ng   = size(mpc.gen, 1);    %% number of dispatchable injections

% minimizing losses in the system
% p_0 f_0  ... p_n f_n
mpc.gencost = ones(ng,1)* [1, 0, 0, 2, 0, 100, 10000, 200];

mpc_losses = runopf(mpc);
%[baseMVA, bus_soln, gen_soln, gencost, branch_soln, f_soln, success, et] = 
runopf(mpc);

A = sparse(0,0);
l = [];
u = [];

% positions of x = [theta |V| Pg Qg]'
thbas = 1;                thend    = thbas+nb-1; % theta
vbas     = thend+1;       vend     = vbas+nb-1;  % |V|
pgbas    = vend+1;        pgend    = pgbas+ng-1; % Pg
qgbas    = pgend+1;       qgend    = qgbas+ng-1; % Qg
nxyz = 2*nb + 2*ng;
N = sparse((1:ng)', (pgbas:pgend)', mpc.baseMVA * ones(ng,1), ng, nxyz); % only 
Pg
fparm = ones(ng,1) * [ 2 0 0 0 ];
fparm(:,2) =  mpc_losses.gen(:,2); % start point, the result must be zero
[junk, ix] = sort(mpc.gen(:, 1));

H = 2 * sparse( 1:ng,1:ng, ones(1,ng), ng, ng);
Cw = zeros(ng,1);
mpc.gencost(:, 6:8) = 0; % erase the original objective function

%% run OPF with user-defined cost, quadratic term
mpopt = mpoption;
[r, success] = opf(mpc, A, l, u, mpopt, N, fparm, H, Cw);


Reply via email to