28template <
typename Arr036,
typename Mat = Arr036>
class LmiOldOracle
31 using Cut = std::pair<Arr036, double>;
34 const std::vector<Mat>& m_F;
46 : _mgr{ndim}, m_F{
F}, m_F0{
std::
move(
B)} {}
54 const auto n =
x.size();
57 for (
auto k = 0
U;
k !=
n; ++
k) {
58 for (
auto i = 0
U;
i != this->_mgr.
_n; ++
i) {
59 for (
auto j = 0
U;
j != this->_mgr.
_n; ++
j) {
60 A(
i,
j) -= this->m_F[
k](
i,
j) *
x[
k];
65 auto getA = [&A](
size_t i,
size_t j) {
return A(
i,
j); };
LDLT factorization.
Definition ldlt_mgr.hpp:33
size_t _n
dimension
Definition ldlt_mgr.hpp:40
Oracle for Linear Matrix Inequality.
Definition lmi_old_oracle.hpp:29
auto assess_feas(const Arr036 &x) -> Cut *
Assess the feasibility of a given point via LDLT factorization.
Definition lmi_old_oracle.hpp:53
LmiOldOracle(size_t ndim, const std::vector< Mat > &F, Mat B)
Construct a new lmi oracle object.
Definition lmi_old_oracle.hpp:45
auto operator()(const Arr036 &x) -> Cut *
Call operator wrapping assess_feas.
Definition lmi_old_oracle.hpp:75
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)