comparison pyCSalgos/BP/l1eq_pd.py @ 63:2fc28e2ae0a2

Fixed minor naming in l1eq_pd()
author Nic Cleju <nikcleju@gmail.com>
date Mon, 12 Mar 2012 16:42:12 +0200
parents e684f76c1969
children 3d53309236c4
comparison
equal deleted inserted replaced
62:e684f76c1969 63:2fc28e2ae0a2
1 1
2 import numpy 2 import numpy
3 import scipy.linalg 3 import scipy.linalg
4 import math 4 import math
5 5
6 class l1ecNotImplementedError(Exception): 6 class l1eqNotImplementedError(Exception):
7 pass 7 pass
8 8
9 #function xp = l1eq_pd(x0, A, At, b, pdtol, pdmaxiter, cgtol, cgmaxiter) 9 #function xp = l1eq_pd(x0, A, At, b, pdtol, pdmaxiter, cgtol, cgmaxiter)
10 def l1eq_pd(x0, A, At, b, pdtol=1e-3, pdmaxiter=50, cgtol=1e-8, cgmaxiter=200, verbose=False): 10 def l1eq_pd(x0, A, At, b, pdtol=1e-3, pdmaxiter=50, cgtol=1e-8, cgmaxiter=200, verbose=False):
11 11
238 gradf0 = numpy.hstack((numpy.zeros(N), numpy.ones(N))) 238 gradf0 = numpy.hstack((numpy.zeros(N), numpy.ones(N)))
239 239
240 # starting point --- make sure that it is feasible 240 # starting point --- make sure that it is feasible
241 #if (largescale) 241 #if (largescale)
242 if largescale: 242 if largescale:
243 raise l1qcNotImplementedError('Largescale not implemented yet!') 243 raise l1eqNotImplementedError('Largescale not implemented yet!')
244 else: 244 else:
245 #if (norm(A*x0-b)/norm(b) > cgtol) 245 #if (norm(A*x0-b)/norm(b) > cgtol)
246 if numpy.linalg.norm(numpy.dot(A,x0)-b) / numpy.linalg.norm(b) > cgtol: 246 if numpy.linalg.norm(numpy.dot(A,x0)-b) / numpy.linalg.norm(b) > cgtol:
247 #disp('Starting point infeasible; using x0 = At*inv(AAt)*y.'); 247 #disp('Starting point infeasible; using x0 = At*inv(AAt)*y.');
248 if verbose: 248 if verbose:
282 lamu2 = -1/fu2 282 lamu2 = -1/fu2
283 if (largescale): 283 if (largescale):
284 #v = -A(lamu1-lamu2); 284 #v = -A(lamu1-lamu2);
285 #Atv = At(v); 285 #Atv = At(v);
286 #rpri = A(x) - b; 286 #rpri = A(x) - b;
287 raise l1qcNotImplementedError('Largescale not implemented yet!') 287 raise l1eqNotImplementedError('Largescale not implemented yet!')
288 else: 288 else:
289 #v = -A*(lamu1-lamu2); 289 #v = -A*(lamu1-lamu2);
290 #Atv = A'*v; 290 #Atv = A'*v;
291 #rpri = A*x - b; 291 #rpri = A*x - b;
292 v = numpy.dot(-A, lamu1-lamu2) 292 v = numpy.dot(-A, lamu1-lamu2)
334 # return 334 # return
335 #end 335 #end
336 #dx = (w1 - w2.*sig2./sig1 - At(dv))./sigx; 336 #dx = (w1 - w2.*sig2./sig1 - At(dv))./sigx;
337 #Adx = A(dx); 337 #Adx = A(dx);
338 #Atdv = At(dv); 338 #Atdv = At(dv);
339 raise l1qcNotImplementedError('Largescale not implemented yet!') 339 raise l1eqNotImplementedError('Largescale not implemented yet!')
340 else: 340 else:
341 #w1p = -(w3 - A*(w1./sigx - w2.*sig2./(sigx.*sig1))); 341 #w1p = -(w3 - A*(w1./sigx - w2.*sig2./(sigx.*sig1)));
342 w1p = -(w3 - numpy.dot(A,(w1/sigx - w2*sig2/(sigx*sig1)))) 342 w1p = -(w3 - numpy.dot(A,(w1/sigx - w2*sig2/(sigx*sig1))))
343 #H11p = A*(sparse(diag(1./sigx))*A'); 343 #H11p = A*(sparse(diag(1./sigx))*A');
344 H11p = numpy.dot(A, numpy.dot(numpy.diag(1/sigx),A.T)) 344 H11p = numpy.dot(A, numpy.dot(numpy.diag(1/sigx),A.T))
457 457
458 if verbose: 458 if verbose:
459 print 'Iteration =',pditer,', tau =',tau,', Primal =',numpy.sum(u),', PDGap =',sdg,', Dual res =',numpy.linalg.norm(rdual),', Primal res =',numpy.linalg.norm(rpri) 459 print 'Iteration =',pditer,', tau =',tau,', Primal =',numpy.sum(u),', PDGap =',sdg,', Dual res =',numpy.linalg.norm(rdual),', Primal res =',numpy.linalg.norm(rpri)
460 if largescale: 460 if largescale:
461 #disp(sprintf(' CG Res = #8.3e, CG Iter = #d', cgres, cgiter)); 461 #disp(sprintf(' CG Res = #8.3e, CG Iter = #d', cgres, cgiter));
462 raise l1qcNotImplementedError('Largescale not implemented yet!') 462 raise l1eqNotImplementedError('Largescale not implemented yet!')
463 else: 463 else:
464 #disp(sprintf(' H11p condition number = #8.3e', hcond)); 464 #disp(sprintf(' H11p condition number = #8.3e', hcond));
465 if verbose: 465 if verbose:
466 print ' H11p condition number =',hcond 466 print ' H11p condition number =',hcond
467 #end 467 #end