EllAlgo 1.6.13
Loading...
Searching...
No Matches
lmi_old_oracle.hpp
Go to the documentation of this file.
1
6// -*- coding: utf-8 -*-
7#pragma once
8
9#include <utility> // for move
10#include <vector>
11
12#include "lmi_oracle_base.hpp"
13
28template <typename Arr036, typename Mat = Arr036> class LmiOldOracle
29 : public LmiOracleBase<Arr036, Mat> {
31 using Cut = std::pair<Arr036, double>;
32
33 LDLTMgr _mgr;
34 const std::vector<Mat>& m_F;
35 Mat m_F0;
36
37 public:
45 LmiOldOracle(size_t ndim, const std::vector<Mat>& F, Mat B)
46 : _mgr{ndim}, m_F{F}, m_F0{std::move(B)} {}
53 auto assess_feas(const Arr036& x) -> Cut* {
54 const auto n = x.size();
55
56 Mat A{this->m_F0};
57 for (auto k = 0U; k != n; ++k) {
58 for (auto i = 0U; i != this->_mgr._n; ++i) {
59 for (auto j = 0U; j != this->_mgr._n; ++j) {
60 A(i, j) -= this->m_F[k](i, j) * x[k];
61 }
62 }
63 }
64
65 auto getA = [&A](size_t i, size_t j) { return A(i, j); };
66 return this->assess_impl(this->_mgr, this->m_F, +1, x, getA);
67 }
68
75 auto operator()(const Arr036& x) -> Cut* { return assess_feas(x); }
76};
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)