SOS is a package to solve sum-of-squares (SOS) problems. The main tool behind this package is
semidefinite programming (SDP).
Introduction
Writing a polynomial as a sum-of-squares proves its nonnegativity for all arguments, but not all nonnegative polynomials are sum-of-squares. While nonnegativity of a polynomial is hard to check, there are efficient methods to find sums-of-squares decompositions and this package makes some of them available in Macaulay2. These methods rely on semidefinite-programming solvers from mathematical optimization. The semidefinite programming package in Macaulay2 ships with the CSDP solver so that everything is set up. Check
Solver for how to configure different solvers.
Usage examples
The most basic application is to (try to) decompose a polynomial as a sum-of-squares using the function
solveSOSi1 : R = QQ[x,y];
|
i2 : f = 2*x^4+5*y^4-2*x^2*y^2+2*x^3*y;
|
i3 : sol = solveSOS f;
Executing CSDP
Input file: /tmp/M2-33307-0/4.dat-s
Output file: /tmp/M2-33307-0/5
Status: SDP solved, primal-dual feasible
Start rational rounding
|
The return value is an object of type
SDPResult which, in the case of success, contains in particular the SOS decomposition. It can be extracted with
sosPoly. This returns an object of type
SOSPoly which supports many operations that polynomials support.
i4 : s = sosPoly sol
o4 = coeffs:
43 231773
{5, --, ------}
20 344000
gens:
83 2 2 20 2 2
{- ---x + y , --x + x*y, x }
200 43
o4 : SOSPoly
|
The command
sumSOS can be used to check that the found decomposition matches the original polynomial:
i5 : sumSOS(s)
4 3 2 2 4
o5 = 2x + 2x y - 2x y + 5y
o5 : R
|
Sums of squares modulo equality constraints
The package supports
SOS decompositions in quotient rings. This can be useful to prove nonnegativity of a polynomial on a variety. The following example is taken from [P05]. Consider the problem of proving that the polynomial
f = 10-x2-y is nonnegative on the circle defined by
g = x2 + y2 - 1. To do this we check if
f is a sum-of-squares in the quotient ring modulo
g. For such a computation, a degree bound must be given by the user
i6 : R = QQ[x,y];
|
i7 : S = R/ideal(x^2 + y^2 - 1);
|
i8 : f = 10-x^2-y;
|
i9 : sol = solveSOS (f, 2);
Executing CSDP
Input file: /tmp/M2-33307-0/8.dat-s
Output file: /tmp/M2-33307-0/9
Status: SDP solved, primal-dual feasible
Start rational rounding
|
i10 : sosPoly sol
o10 = coeffs:
83
{7, 6, --}
28
gens:
1
{y - --, x, 1}
14
o10 : SOSPoly
|
See
TraceObj for how to reduce the number of summands to 2.
Other cool stuff
- The package implements Hilbert's algorithm to decompose a nonnegative ternary form into a sum-of-squares of rational functions: sosdecTernary
- Sums of squares problems can be solved parametrically: solveSOS
- Optimization over varieties can run using lowerBound
On the role of coefficients field
The
SOS package interfaces tries to hide some of the difficulties that arise from using these numerical procedures. See
coefficients field for more information.
Literature
- [BPT12] Semidefinite Optimization and Convex Algebraic Geometry SIAM Textbook, edited by G. Blekherman, P. Parrilo, and R. Thomas, (2012)
- [P05] Exploiting Algebraic Structure in Sum of Squares Programs P. Parrilo in Positive polynomials in control (2005)
- [PP] Computing sum-of-squares decompositions with rational coefficients H. Peyrl and P. Parrilo in Theoretical Computer Science 409 (2008) p. 269–281