/compot

Composite optimization toolbox: python library for fast composite optimization

Primary LanguagePython

compot - COMPosite Optimization Toolbox

Python library for nonsmooth convex composite optimization problems equation


Usage and example

  • Specify problem data for equation and equation using numpy

    import numpy as np
      
    m, n = 300, 400
    np.random.seed(12)
    A = 2 * np.random.rand(m, n) - 1
    b = 2 * np.random.rand(m)
    lamb = 0.015
    
  • Setup composite problem with composite terms and initial point

    import compot.calculus.function as fun
    import compot.optimizer.base as base
    
    f = fun.AffineCompositeLoss(
            fun.NormPower(2, 2),
            fun.LinearTransform(A),
            b
    )
      
    g = fun.FunctionTransform(
            fun.OneNorm(),
            rho=lamb
    )
      
    x0 = np.random.rand(n)
    problem = base.CompositeOptimizationProblem(x0, f, g)
    
  • Setup composite optimizer and run

    import compot.optimizer.lipschitz as lip
      
    params = lip.Parameters()
    params.maxit = 5000
    params.tol = 1e-13
    
    def callback(x, status):
        print("k", status.nit, "objective", problem.eval_objective(x), "residual", status.res)
      
    
    optimizer = lip.LBFGSPanoc(params, problem, callback)
    optimizer.run()
    
  • Access solution

    minimizer = optimizer.x
    print(problem.eval_objective(minimizer))
    

If you intend to use this package for scientific purposes please cite

Adaptive proximal gradient methods are universal without approximation (K. A. Oikonomidis, E. Laude, P. Latafat, A. Themelis, P. Patrinos; ICML 2024) [https://arxiv.org/abs/2402.06271]

A simple and efficient algorithm for nonlinear model predictive control (L. Stella, A. Themelis, P. Sopasakis, P. Patrinos; CDC 2017) [https://arxiv.org/abs/1709.06487]