|
EllAlgo 1.6.13
|
Shared skeleton for Linear Matrix Inequality oracles. More...
#include <lmi_oracle_base.hpp>
Protected Types | |
| using | Cut = std::pair< Arr036, double > |
Protected Member Functions | |
| template<typename LDLT , typename Fn > | |
| auto | assess_impl (LDLT &mgr, const std::vector< Mat > &F, const int sign, const Arr036 &x, Fn &&getA) -> Cut * |
| Shared assess_feas skeleton: factor, witness, sym_quad, pack cut. | |
Protected Attributes | |
| std::unique_ptr< Cut > | cut = std::make_unique<Cut>() |
| Storage for the cut returned by assess_feas. | |
Shared skeleton for Linear Matrix Inequality oracles.
The three LMI oracle flavors (LmiOracle, Lmi0Oracle, LmiOldOracle) differ only in how the matrix elements A(i,j) are assembled (lazy lambda vs. eagerly-built matrix), in the sym_quad sign convention, and in the presence of a constant term B. The factorization / witness / cut-packing pipeline is identical and lives here.
assess_impl is the fixed algorithm skeleton (factor -> witness -> sym_quad -> pack cut); each concrete oracle supplies its own getA callable, sign, and manager via the parameter list, keeping every public constructor and member intact.| Arr036 | Array type for the decision variables |
| Mat | Matrix type (defaults to Arr036) |
|
protected |
|
inlineprotected |
Shared assess_feas skeleton: factor, witness, sym_quad, pack cut.
| LDLT | LDL^T manager type (LDLTMgr) |
| Fn | Callable with signature double(size_t, size_t) |
| [in,out] | mgr | LDL^T factorization manager |
| [in] | F | Vector of matrices F_i (fixed problem data) |
| [in] | sign | +1 or -1 convention for sym_quad |
| [in] | x | Evaluation point |
| [in] | getA | Lazy accessor for matrix element A(i, j) |
|
protected |
Storage for the cut returned by assess_feas.