Skip to main content

This Python library provides an implementation of the proximity operator of several functions to solve non-smooth optimization problems.

Project description

Proximity Operator Repository

Proximity operators have become increasingly important tools as basic building blocks of proximal splitting algorithms, a class of algorithms that decompose complex composite convex optimization methods into simple steps involving one of the functions present in the model. This package provides implementations of the proximity operator of various functions (function of scalar variable or multivariate,convex and non-convex functions, indicator functions...).

For more information see the full project containing technical details, a tutorial and code implantation in matlab.

Installation

To install package (require python 3.8.0 or a later version):

pip install proxop

To update, one should add the option "--upgrade":

pip install proxop --upgrade

How to use it ?

To import the package:

import proxop

Please visit our website for more tutorial and more details.

Examples:

Evaluates the function 'AbsValue': >>> import proxop >>> proxop.AbsValue()(-3) 3

Use a scale factor 'gamma': >>> proxop.AbsValue(gamma=2)(-3) 6

When the input is a vector, the result is the sum of the outputs obtained by applying the function to each element :

 >>> from proxop import AbsValue
 >>> import numpy as np
 >>> AbsValue()( np.array([-1, 2, 3., -4.]) )
 10.0

Compute the proximity operator by using the method 'prox' :

>>> AbsValue().prox( 3)
2
>>> AbsValue().prox(np.array([ -3., 1., 6., 3.]))
array([-2.,  0.,  5., 2.])

Use a scale factor 'gamma'>0 to commute the proximity operator of th function "gamma*f" :

>>> AbsValue(gamma=2).prox([ -3., 1., 6.])
 array([-1.,  0.,  4.])

Example 2: Projection onto a set

Since proximity operator is a generalization of the notion of projection onto a (convex) set, one can easily interpret the result with an indicator function. For example, the affine barrier is defined as:

                   / -log(b- a.T*x)    if u.T*x < b
            f(x) =|
                   \   + inf            otherwise


 >>> import numpy as np
 >>> from proxop import AffineBarrier
 >>>
 >>> x=np.array([1,2,3])
 >>> a= np.array([-1, 5, 3])
 >>> b= 3.5
 >>> AffineBarrier(a,b)(x)
 inf  

The result below is infinite, which means 'x' does not belong to the affine set.

Projection of 'x' onto the affine set:

 >>> px= AffineBarrier(x,b).prox(x) 
 >>> px
 >>> AffineBarrier(a,b)(px)
 0.61828190224889

As expected, the result is finite, meaning the projection of 'x' belongs to the affine set.

Example 3: Matrix variable

 >>> x=np.arange(6)
 >>> x=x.reshape((2,3))
 >>> x
 array([[0, 1, 2],
       [3, 4, 5]])
 >>> a =np.ones_like(x)
 >>> a[0,:]=2
 >>> a
 array([[2., 2., 2.],
        [1., 1., 1.]])
 >>> b=np.array([-1, 2, 4])

Set 'axis=0' to process along the rows of the matrix 'x' (note the dimension of 'b' must be compatible with the shape of 'x'):

 >>> AffineBarrier(a,b, axis=0)(x)
 inf

Projection of x onton the affine set:

 >>> px = AffineBarrier(a,b, axis=0).prox(x)  
 >>> AffineBariier(x,b, axis=0)(px)
  0.157704693902156

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

proxop-1.0.4.tar.gz (6.6 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

proxop-1.0.4-py3-none-any.whl (7.6 MB view details)

Uploaded Python 3

File details

Details for the file proxop-1.0.4.tar.gz.

File metadata

  • Download URL: proxop-1.0.4.tar.gz
  • Upload date:
  • Size: 6.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for proxop-1.0.4.tar.gz
Algorithm Hash digest
SHA256 b004a68575379b932ccdd4ac44c72837f7410ae80a0a204c28fa3233a455c450
MD5 bdf81a96cf9d7911814fb2270a79f60c
BLAKE2b-256 208321d53a2ffad8dc8a1198396c103c8ec776dc74ba57ed699e555a819392ab

See more details on using hashes here.

File details

Details for the file proxop-1.0.4-py3-none-any.whl.

File metadata

  • Download URL: proxop-1.0.4-py3-none-any.whl
  • Upload date:
  • Size: 7.6 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.8.10

File hashes

Hashes for proxop-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 11f535029da237da7e1bac2d33b29f747ff725bc0d16a786be091dec714e2967
MD5 ab4977de749486575212076b13dfaafd
BLAKE2b-256 26d9efb221ee7568f70c0ab16a45c1467bb8e462e59ad4d52323fe18b6670454

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page