32template <
typename Arr036,
typename Mat = Arr036>
class Lmi0Oracle
35 using Cut = std::pair<Arr036, double>;
41 const std::vector<Mat>& m_F;
63 const auto n =
x.size();
65 auto getA = [&
n, &
x,
this](
size_t i,
size_t j) ->
double {
67 for (
auto k = 0
U;
k !=
n; ++
k) {
68 a += this->m_F[
k](
i,
j) *
x[
k];
LDLT factorization.
Definition ldlt_mgr.hpp:33
Oracle for Linear Matrix Inequality (LMI) feasibility problems.
Definition lmi0_oracle.hpp:33
auto assess_feas(const Arr036 &x) -> Cut *
Assess the feasibility of a given point.
Definition lmi0_oracle.hpp:62
auto operator()(const Arr036 &x) -> Cut *
Call operator wrapping assess_feas.
Definition lmi0_oracle.hpp:82
LDLTMgr _mq
LDLT manager for matrix factorization.
Definition lmi0_oracle.hpp:38
Lmi0Oracle(size_t ndim, const std::vector< Mat > &F)
Construct a new LMI Oracle object.
Definition lmi0_oracle.hpp:50
Shared skeleton for Linear Matrix Inequality oracles.
Definition lmi_oracle_base.hpp:31
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.
Definition lmi_oracle_base.hpp:50
auto invalid_value() -> T
Return an invalid/sentinel value for type T.
Definition cutting_plane.hpp:27
Shared LMI oracle skeleton (Template Method)