27template <
typename Arr036,
typename Mat = Arr036>
class LmiOracle
30 using Cut = std::pair<Arr036, double>;
33 const std::vector<Mat>& m_F;
45 : _mgr{ndim}, m_F{
F}, m_F0{
std::
move(
B)} {}
54 const auto n =
x.size();
56 auto getA = [&
n, &
x,
this](
size_t i,
size_t j) ->
double {
57 auto a = this->m_F0(
i,
j);
58 for (
auto k = 0
U;
k !=
n; ++
k) {
59 a -= this->m_F[
k](
i,
j) *
x[
k];
LDLT factorization.
Definition ldlt_mgr.hpp:33
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
Oracle for Linear Matrix Inequality.
Definition lmi_oracle.hpp:28
auto assess_feas(const Arr036 &x) -> Cut *
Definition lmi_oracle.hpp:53
auto operator()(const Arr036 &x) -> Cut *
Call operator wrapping assess_feas.
Definition lmi_oracle.hpp:73
LmiOracle(size_t ndim, const std::vector< Mat > &F, Mat B)
Construct a new lmi oracle object.
Definition lmi_oracle.hpp:44
auto invalid_value() -> T
Return an invalid/sentinel value for type T.
Definition cutting_plane.hpp:27
Shared LMI oracle skeleton (Template Method)