is a package to solve sums-of-squares (SOS) problems via semidefinite programming
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, an area from mathematical optimization. Several solvers (or tools) for semidefinite programming are available. The package SemidefiniteProgramming
allows us to use some of these solvers in Macaulay2. The solver CSDP
is included in Macaulay2 and can be used without any configuration. See Solver
for how to use other solvers.
The most basic application is to (try to) decompose a polynomial as a sum of squares using the function solveSOS
i1 : R = QQ[x,y];
i2 : f = 2*x^4 + 2*x^3*y - 2*x^2*y^2 + 5*y^4;
i3 : sol = solveSOS f;
The return value is an object of type SDPResult
which, in the case of success, contains the sum-of-squares 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
83 2 2 2 43 20 2 2 231773 2 2
o4 = (5)(- ---x + y ) + (--)(--x + x*y) + (------)(x )
200 20 43 344000
o4 : SOSPoly
The command value(SOSPoly)
can be used to check that the decomposition found matches the original polynomial.
i5 : value(s)
4 3 2 2 4
o5 = 2x + 2x y - 2x y + 5y
o5 : R
Sums of squares modulo equality constraints
The package supports sum-of-squares problems 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-x^2-y
is nonnegative on the circle defined by g = x^2 + y^2 - 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);
i10 : sosPoly sol
79 4 2 71 2 63 2
o10 = (--)(y - --) + (--)(x) + (---)(1)
8 79 8 632
o10 : SOSPoly
The previous computation gives decomposition with three sums of squares. See TraceObj
for how to obtain a decomposition with only two squares.
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 the coefficient field
package interfaces tries to hide some of the difficulties that arise from using these numerical procedures. See coefficient field
for more information.
[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.