view ABSexact.py @ 14:f2eb027ed101

test_exact.py working. Added bp_cvxopt(). Commented the code that made the operator Omega more coherent.
author Nic Cleju <nikcleju@gmail.com>
date Fri, 16 Mar 2012 13:42:31 +0200
parents a2d881253324
children 7fdf964f4edd
line wrap: on
line source
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 09 14:06:13 2012

@author: ncleju
"""

import numpy
import pyCSalgos.BP.l1eq_pd
import pyCSalgos.BP.cvxopt_lp
import pyCSalgos.OMP.omp_QR
import pyCSalgos.SL0.SL0
import pyCSalgos.TST.RecommendedTST

def bp(y,M,Omega,x0, pdtol=1e-3, pdmaxiter=50, cgtol=1e-8, cgmaxiter=200, verbose=False):

  N,n = Omega.shape
  D = numpy.linalg.pinv(Omega)
  U,S,Vt = numpy.linalg.svd(D)
  Aextra = Vt[-(N-n):,:]
  
  # Create aggregate problem
  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))

  return numpy.dot(D , pyCSalgos.BP.l1eq_pd.l1eq_pd(x0,Atilde,Atilde.T,ytilde, pdtol, pdmaxiter, cgtol, cgmaxiter, verbose))

def bp_cvxopt(y,M,Omega):

  N,n = Omega.shape
  D = numpy.linalg.pinv(Omega)
  U,S,Vt = numpy.linalg.svd(D)
  Aextra = Vt[-(N-n):,:]
  
  # Create aggregate problem
  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))

  return numpy.dot(D , pyCSalgos.BP.cvxopt_lp.cvxopt_lp(ytilde, Atilde))


def ompeps(y,M,Omega,epsilon):
  
  N,n = Omega.shape
  D = numpy.linalg.pinv(Omega)
  U,S,Vt = numpy.linalg.svd(D)
  Aextra = Vt[-(N-n):,:]
  
  # Create aggregate problem
  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
  
  opts = dict()
  opts['stopCrit'] = 'mse'
  opts['stopTol'] = epsilon
  return numpy.dot(D , pyCSalgos.OMP.omp_QR.greed_omp_qr(ytilde,Atilde,Atilde.shape[1],opts)[0])

def ompk(y,M,Omega,k):
  
  N,n = Omega.shape
  D = numpy.linalg.pinv(Omega)
  U,S,Vt = numpy.linalg.svd(D)
  Aextra = Vt[-(N-n):,:]
  
  # Create aggregate problem
  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
  
  opts = dict()
  opts['stopTol'] = k
  return numpy.dot(D , pyCSalgos.OMP.omp_QR.greed_omp_qr(ytilde,Atilde,Atilde.shape[1],opts)[0])

def sl0(y,M,Omega, sigma_min, sigma_decrease_factor=0.5, mu_0=2, L=3, true_s=None):
  
  N,n = Omega.shape
  D = numpy.linalg.pinv(Omega)
  U,S,Vt = numpy.linalg.svd(D)
  Aextra = Vt[-(N-n):,:]
  
  # Create aggregate problem
  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
  
  return numpy.dot(D, pyCSalgos.SL0.SL0.SL0(Atilde,ytilde,sigma_min,sigma_decrease_factor,mu_0,L,true_s))

def tst_recom(y,M,Omega, nsweep=300, tol=0.00001, xinitial=None, ro=None):
  
  N,n = Omega.shape
  D = numpy.linalg.pinv(Omega)
  U,S,Vt = numpy.linalg.svd(D)
  Aextra = Vt[-(N-n):,:]
  
  # Create aggregate problem
  Atilde = numpy.vstack((numpy.dot(M,D), Aextra))
  ytilde = numpy.concatenate((y,numpy.zeros(N-n)))
  
  return numpy.dot(D, pyCSalgos.TST.RecommendedTST.RecommendedTST(Atilde, ytilde, nsweep, tol, xinitial, ro))