template<typename Arr036>
QmiOracle class

Oracle for Quadratic Matrix Inequality.

This oracle solves the following feasibility problem:

find  x
s.t.  t * I - F(x)' F(x) >= 0

where

F(x) = F0 - (F1 * x1 + F2 * x2 + ...)

Constructors, destructors, conversion operators

QmiOracle(const std::vector<Arr036>& F, Arr036 F0)
Construct a new QmiOracle object.

Public functions

auto update(double t) -> void -> auto
Update the best-so-far optimal value.
auto assess_feas(const Arr036& x) -> std::optional< Cut > -> auto
Assess feasibility and generate cutting plane.

Public variables

const size_t _m
Number of columns (matrix dimension)
LDLTMgr _mq
LDLT matrix manager for factorization.

Function documentation

template<typename Arr036>
QmiOracle<Arr036>::QmiOracle(const std::vector<Arr036>& F, Arr036 F0)

Construct a new QmiOracle object.

Parameters
in Vector of coefficient matrices F_k for k = 1, 2, ...
F0 in Base matrix F0 in the quadratic matrix inequality

template<typename Arr036>
auto QmiOracle<Arr036>::update(double t) -> void

Update the best-so-far optimal value.

Parameters
in The current best feasible objective value

template<typename Arr036>
auto QmiOracle<Arr036>::assess_feas(const Arr036& x) -> std::optional< Cut >

Assess feasibility and generate cutting plane.

Parameters
in Current point to evaluate
Returns Optional cut (gradient and violation) if infeasible, nullopt if feasible