1#ifndef ZONOOPT_ADMM_HPP_ 
    2#define ZONOOPT_ADMM_HPP_ 
   27#include "Eigen/Sparse" 
   40namespace ZonoOpt::detail {
 
   45    struct ADMM_data : std::enable_shared_from_this<ADMM_data>
 
   47        Eigen::SparseMatrix<zono_float> P, A, AT;
 
   48        Eigen::SparseMatrix<zono_float, Eigen::RowMajor> A_rm;
 
   50        Eigen::Vector<zono_float, 1> c;
 
   51        LDLT_data ldlt_data_M, ldlt_data_AAT;
 
   54        std::shared_ptr<Box> x_box;
 
   58        ADMM_data() = 
default;
 
   60        ADMM_data(
const Eigen::SparseMatrix<zono_float>& P, 
const Eigen::Vector<zono_float, -1>& q,
 
   61            const Eigen::SparseMatrix<zono_float>& A, 
const Eigen::Vector<zono_float, -1>& b,
 
   62            const Eigen::Vector<zono_float, -1>& x_l, 
const Eigen::Vector<zono_float, -1>& x_u,
 
   63            const zono_float c=0, 
const OptSettings& settings= OptSettings())
 
   65            set(P, q, A, b, x_l, x_u, c, settings);
 
   69        void set(
const Eigen::SparseMatrix<zono_float>& P, 
const Eigen::Vector<zono_float, -1>& q,
 
   70            const Eigen::SparseMatrix<zono_float>& A, 
const Eigen::Vector<zono_float, -1>& b,
 
   71            const Eigen::Vector<zono_float, -1>& x_l, 
const Eigen::Vector<zono_float, -1>& x_u,
 
   72            zono_float c=0, 
const OptSettings& settings= OptSettings());
 
   75        ADMM_data* clone() 
const;
 
   93        explicit ADMM_solver(
const ADMM_data& data);
 
  100        explicit ADMM_solver(
const std::shared_ptr<ADMM_data>& data);
 
  107        ADMM_solver(
const ADMM_solver& other);
 
  113        virtual ~ADMM_solver() = 
default;
 
  121        virtual void warmstart(
const Eigen::Vector<zono_float, -1>& x0,
 
  122            const Eigen::Vector<zono_float, -1>& u0);
 
  128        virtual void factorize();
 
  136        OptSolution solve(std::atomic<bool>* stop);
 
  142        std::shared_ptr<ADMM_data> data;
 
  146        bool startup(Box& x_box, OptSolution& solution, 
const std::set<int>& contract_inds=std::set<int>());
 
  149        virtual void solve_core(
const Box& x_box, OptSolution& solution, std::atomic<bool>* stop);
 
  155        bool is_warmstarted = 
false;
 
  158        void factorize_M() 
const;
 
  160        void factorize_AAT() 
const;
 
  163        bool is_infeasibility_certificate(
const Eigen::Vector<zono_float, -1>& ek,
 
  164            const Eigen::Vector<zono_float, -1>& xk, 
const Box& x_box) 
const;
 
  166        bool check_problem_dimensions() 
const;
 
Internal utilities for Cholesky factorization using Eigen's LDLT solver.
Interval and box classes.
Optimization settings and solution data structures for ZonoOpt library.
Utilities for sparse matrix operations in ZonoOpt library.
#define zono_float
Defines the floating-point type used in ZonoOpt.
Definition ZonoOpt.hpp:45