template<typename Graph, typename Mapping, typename Fn>
OptScalingOracle class

Oracle for Optimal Matrix Scaling.

Template parameters
Graph Type of the directed graph representing matrix sparsity
Mapping Type of vertex potential mapping (scaling factors)
Fn Type of the cost function (edge -> matrix entry)

This class implements a separation oracle for the optimal matrix scaling problem. It uses a network oracle internally to handle the feasibility constraints and provides cutting planes for optimization.

The oracle maintains:

  • A reference to the underlying graph structure
  • A cost function for matrix entries
  • A Ratio helper class for constraint evaluation
  • Network oracle for feasibility checking

Constructors, destructors, conversion operators

OptScalingOracle(const Graph& gra, Mapping& utx, Fn get_cost)
Construct a new optscaling oracle object.
OptScalingOracle(const OptScalingOracle&) defaulted explicit
Construct a new optscaling oracle object.

Public functions

auto assess_optim(const Vec& x, double& t) -> std::tuple< Cut, bool > -> auto
Make object callable for cutting_plane_optim()
auto operator()(const Vec& x, double& t) -> std::tuple< Cut, bool > -> auto
Make object callable for cutting_plane_optim()

Function documentation

template<typename Graph, typename Mapping, typename Fn>
OptScalingOracle<Graph, Mapping, Fn>::OptScalingOracle(const Graph& gra, Mapping& utx, Fn get_cost)

Construct a new optscaling oracle object.

Parameters
gra in
utx in/out
get_cost in

template<typename Graph, typename Mapping, typename Fn>
auto OptScalingOracle<Graph, Mapping, Fn>::assess_optim(const Vec& x, double& t) -> std::tuple< Cut, bool >

Make object callable for cutting_plane_optim()

Parameters
in (pi, phi) in log scale
in/out the best-so-far optimal value
Returns std::tuple<Cut, bool>

template<typename Graph, typename Mapping, typename Fn>
auto OptScalingOracle<Graph, Mapping, Fn>::operator()(const Vec& x, double& t) -> std::tuple< Cut, bool >

Make object callable for cutting_plane_optim()

Parameters
in (pi, phi) in log scale
in/out the best-so-far optimal value
Returns std::tuple<Cut, bool>