Cone interface and predefined cones

Generic cone interface

Hypatia's Cones module specifies a generic cone interface that allows defining new proper cones as subtypes of Cone. This requires implementing cone oracles as methods for the new cone type; see Cone oracles. The required oracles are:

  • an initial interior point inside the cone; see set_initial_point!,
  • a feasibility test, which checks whether a given point is in the interior of the cone; see is_feas,
  • gradient and Hessian evaluations for a logarithmically homogeneous self-concordant barrier (LHSCB) function for the cone; see grad and hess.

Additional optional oracles can be specified to improve speed and numerical performance. Defining a new cone automatically defines its dual cone (through the use_dual option) also. See Hypatia's predefined cones in the cones folder for examples of how to implement a new cone type and efficient oracles. The implementations of the HypoPowerMean cone (which uses a primal LHSCB) and the WSOSInterpNonnegative cone (which uses a dual LHSCB) are fairly typical.

Predefined cones

Hypatia predefines many proper cones that are practically useful; see Predefined cone types. These cones are used in Hypatia's Examples and native instances. These cones are also wrapped as MathOptInterface.AbstractVectorSet types and exported from Hypatia; see MathOptInterface cones.