MomentTools

   _       _ _(_)_     |  Documentation: https://docs.julialang.org
  (_)     | (_) (_)    |
   _ _   _| |_  __ _   |  Type "?" for help, "]?" for Pkg help.
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 1.6.0 (2021-03-24)
 _/ |\__'_|_|_|\__'_|  |  Official https://julialang.org/ release
|__/                   |

julia> using DynamicPolynomials, MultivariateSeries, MomentTools, CSDP; optimizer = CSDP.Optimizer;

julia> X=@polyvar x y z; f = (x - y + z)^2 + (x*y + z)^2*z^2;

julia> @time M=minimize(f,[f],[],X,8,optimizer)[2];
CSDP 6.2.0
Iter:  0 Ap: 0.00e+00 Pobj:  0.0000000e+00 Ad: 0.00e+00 Dobj:  0.0000000e+00 
Iter:  1 Ap: 5.70e-01 Pobj: -2.8807304e+01 Ad: 3.84e-01 Dobj:  3.5564608e+00 
Iter:  2 Ap: 6.69e-01 Pobj: -1.6858129e+02 Ad: 5.68e-01 Dobj: -6.3657488e-01 
Iter:  3 Ap: 7.00e-01 Pobj: -2.0815594e+02 Ad: 7.78e-01 Dobj:  6.9461464e-02 
Iter:  4 Ap: 6.24e-01 Pobj: -1.8003880e+02 Ad: 7.44e-01 Dobj:  1.9621905e-02 
Iter:  5 Ap: 7.44e-01 Pobj: -8.9451385e+01 Ad: 6.98e-01 Dobj:  7.6521211e-03 
Iter:  6 Ap: 5.50e-01 Pobj: -5.6777715e+01 Ad: 6.27e-01 Dobj:  3.0835452e-03 
Iter:  7 Ap: 4.99e-01 Pobj: -3.8357170e+01 Ad: 6.95e-01 Dobj:  1.1243439e-03 
Iter:  8 Ap: 3.32e-01 Pobj: -2.8849786e+01 Ad: 5.75e-01 Dobj:  5.2802817e-04 
Iter:  9 Ap: 6.12e-01 Pobj: -1.3830209e+01 Ad: 5.50e-01 Dobj:  2.6789401e-04 
Iter: 10 Ap: 4.52e-01 Pobj: -8.9989526e+00 Ad: 5.26e-01 Dobj:  1.2846141e-04 
Iter: 11 Ap: 3.90e-01 Pobj: -6.3929357e+00 Ad: 6.63e-01 Dobj:  4.1832560e-05 
Iter: 12 Ap: 3.32e-01 Pobj: -4.6413747e+00 Ad: 4.69e-01 Dobj:  2.3404997e-05 
Iter: 13 Ap: 4.76e-01 Pobj: -2.7582583e+00 Ad: 5.44e-01 Dobj:  1.1072798e-05 
Iter: 14 Ap: 4.10e-01 Pobj: -1.8170471e+00 Ad: 6.20e-01 Dobj:  4.1075038e-06 
Iter: 15 Ap: 4.88e-01 Pobj: -1.0510459e+00 Ad: 6.41e-01 Dobj:  1.4327908e-06 
Iter: 16 Ap: 4.02e-01 Pobj: -6.8407656e-01 Ad: 5.13e-01 Dobj:  6.8574504e-07 
Iter: 17 Ap: 2.75e-01 Pobj: -5.2423749e-01 Ad: 6.05e-01 Dobj:  2.5673497e-07 
Iter: 18 Ap: 4.76e-01 Pobj: -2.9920946e-01 Ad: 5.53e-01 Dobj:  1.2237666e-07 
Iter: 19 Ap: 4.07e-01 Pobj: -1.9097099e-01 Ad: 5.77e-01 Dobj:  5.9944913e-08 
Iter: 20 Ap: 4.69e-01 Pobj: -1.1328837e-01 Ad: 7.34e-01 Dobj:  2.6270395e-08 
Iter: 21 Ap: 6.91e-01 Pobj: -4.0718196e-02 Ad: 9.91e-01 Dobj:  1.4905678e-08 
Iter: 22 Ap: 7.98e-01 Pobj: -8.8267883e-03 Ad: 1.00e+00 Dobj:  1.4712661e-08 
Iter: 23 Ap: 9.30e-01 Pobj: -7.2753194e-04 Ad: 1.00e+00 Dobj:  1.4635985e-08 
Iter: 24 Ap: 9.52e-01 Pobj: -4.6444681e-05 Ad: 1.00e+00 Dobj:  1.4511251e-08 
Iter: 25 Ap: 9.77e-01 Pobj: -2.3128726e-06 Ad: 1.00e+00 Dobj:  1.3699810e-08 
Iter: 26 Ap: 1.00e+00 Pobj: -2.9295805e-07 Ad: 1.00e+00 Dobj:  2.6620661e-09 
Iter: 27 Ap: 1.00e+00 Pobj: -1.4503259e-07 Ad: 7.98e-01 Dobj: -4.9856960e-08 
Iter: 28 Ap: 9.79e-01 Pobj: -1.3349889e-08 Ad: 1.00e+00 Dobj: -5.0993826e-08 
Iter: 29 Ap: 1.00e+00 Pobj: -6.0340429e-09 Ad: 8.18e-01 Dobj: -9.8402342e-09 
Iter: 30 Ap: 3.72e-01 Pobj: -4.7992492e-09 Ad: 5.02e-01 Dobj: -4.9055902e-09 
Iter: 31 Ap: 9.01e-01 Pobj: -1.4789741e-09 Ad: 7.05e-01 Dobj: -1.4754469e-09 
Iter: 32 Ap: 8.59e-01 Pobj: -7.0878722e-10 Ad: 7.12e-01 Dobj: -4.1004977e-10 
Iter: 33 Ap: 8.64e-01 Pobj: -3.0782665e-10 Ad: 7.84e-01 Dobj: -7.7378548e-11 
Iter: 34 Ap: 5.05e-01 Pobj: -1.9417526e-10 Ad: 6.39e-01 Dobj: -2.3950619e-11 
Success: SDP solved
Primal objective value: -1.9417526e-10 
Dual objective value: -2.3950619e-11 
Relative primal infeasibility: 9.94e-11 
Relative dual infeasibility: 5.08e-10 
Real Relative Gap: 1.70e-10 
XZ Relative Gap: 6.09e-09 
DIMACS error measures: 1.85e-10 0.00e+00 9.45e-09 0.00e+00 1.70e-10 6.09e-09
 60.145666 seconds (1.00 M allocations: 1.462 GiB, 0.08% gc time)

julia> annihilator(get_series(M)[1],monomials(X,seq(0:3)))[1]
2-element Vector{Any}:
 -0.9999999618699011z - 0.9999999886637668x + y + 2.552293999411037e-9
 -3.7243455708324547e-7z³ + 0.9999999882834394z²x + zx² + 0.9999994193028456z² + 3.24561595377304e-8zx + 4.157295047590385e-8x² - 2.6718977824777973e-7z + 6.5951240996176e-11x - 5.6543031689507833e-8

julia> X=@polyvar a x y z; f = -10*z^4 + x^3 - 3*x^2*z + 3*x*z^2 + 20*y*z^2 - z^3 - 10*x^2 + 20*x*z - 10*y^2 - 10*z^2;  g = 3*a - (x^2 + y^2 + z^2); h = y - a;

julia> @time M=minimize(f,[f,g,h],[],X,6,optimizer)[2];
CSDP 6.2.0
Iter:  0 Ap: 0.00e+00 Pobj:  0.0000000e+00 Ad: 0.00e+00 Dobj:  0.0000000e+00 
Iter:  1 Ap: 5.96e-01 Pobj: -1.1005207e+02 Ad: 2.76e-01 Dobj: -7.7938223e+00 
Iter:  2 Ap: 7.51e-01 Pobj: -9.1085191e+02 Ad: 5.65e-01 Dobj: -2.2979271e-01 
Iter:  3 Ap: 7.38e-01 Pobj: -7.3384276e+02 Ad: 8.16e-01 Dobj: -4.4983724e-02 
Iter:  4 Ap: 9.15e-01 Pobj: -5.2094408e+02 Ad: 8.58e-01 Dobj: -1.3200751e-02 
Iter:  5 Ap: 8.58e-01 Pobj: -1.1582448e+02 Ad: 8.61e-01 Dobj: -3.1098072e-03 
Iter:  6 Ap: 7.84e-01 Pobj: -1.6209634e+01 Ad: 8.62e-01 Dobj: -7.3452353e-04 
Iter:  7 Ap: 8.67e-01 Pobj: -1.6067709e+00 Ad: 7.97e-01 Dobj: -2.0667674e-04 
Iter:  8 Ap: 9.37e-01 Pobj: -1.7693850e-01 Ad: 8.96e-01 Dobj: -1.4946856e-05 
Iter:  9 Ap: 9.59e-01 Pobj: -2.3387913e-02 Ad: 9.02e-01 Dobj: -9.8436481e-07 
Iter: 10 Ap: 9.64e-01 Pobj: -3.6200040e-03 Ad: 8.17e-01 Dobj: -1.5670489e-07 
Iter: 11 Ap: 1.00e+00 Pobj: -1.0970131e-03 Ad: 8.11e-01 Dobj: -3.8383125e-08 
Iter: 12 Ap: 8.04e-01 Pobj: -1.8961449e-04 Ad: 9.26e-01 Dobj: -8.2434930e-09 
Iter: 13 Ap: 1.00e+00 Pobj: -4.4730362e-05 Ad: 1.00e+00 Dobj: -1.6209079e-10 
Iter: 14 Ap: 9.85e-01 Pobj: -1.8338375e-06 Ad: 1.00e+00 Dobj: -2.3743585e-10 
Iter: 15 Ap: 1.00e+00 Pobj: -8.6203045e-08 Ad: 1.00e+00 Dobj: -7.8350304e-10 
Iter: 16 Ap: 1.00e+00 Pobj: -1.8546492e-08 Ad: 1.00e+00 Dobj: -9.0815888e-09 
Iter: 17 Ap: 1.00e+00 Pobj: -4.3556816e-09 Ad: 1.00e+00 Dobj: -1.7330145e-08 
Iter: 18 Ap: 1.00e+00 Pobj: -2.8109923e-10 Ad: 1.00e+00 Dobj: -1.8244192e-08 
Iter: 19 Ap: 9.85e-01 Pobj: -3.8411063e-11 Ad: 8.90e-01 Dobj: -2.3176021e-09 
Iter: 20 Ap: 1.00e+00 Pobj: -1.5746583e-11 Ad: 8.21e-01 Dobj: -4.2504311e-10 
Iter: 21 Ap: 3.71e-01 Pobj: -9.2716806e-13 Ad: 7.83e-01 Dobj: -9.1993080e-11 
Success: SDP solved
Primal objective value: -9.2716806e-13 
Dual objective value: -9.1993080e-11 
Relative primal infeasibility: 7.92e-09 
Relative dual infeasibility: 3.07e-09 
Real Relative Gap: -9.11e-11 
XZ Relative Gap: 6.84e-09 
DIMACS error measures: 1.36e-08 0.00e+00 1.95e-07 0.00e+00 -9.11e-11 6.84e-09
 33.597916 seconds (2.16 M allocations: 3.818 GiB, 0.47% gc time)

julia> annihilator(get_series(M)[1],monomials(X,seq(0:3)))[1]
5-element Vector{Any}:
 -1.0000000000102727a - 2.1609837237432704e-13x + y + 3.4714428691621264e-12
 -1.6534928112712892e-7a - 1.000001169818265x + z + 2.916073255320562e-8
 a² - 1.0000076240241975a - 5.130771092653218e-7x + 2.3525318446283505e-6
 ax + 1.0707232983808452e-5a - 0.9999983573879418x - 1.12304474871292e-5
 x² - 0.9999950150761634a + 3.9272360301160237e-7x - 1.1773485627254423e-6

julia> X=@polyvar x y; f = (x^2-2)^2+(x-y^2)^2;

julia> @time M=minimize(f,[f],[],X,8,optimizer)[2];
CSDP 6.2.0
Iter:  0 Ap: 0.00e+00 Pobj:  0.0000000e+00 Ad: 0.00e+00 Dobj:  0.0000000e+00 
Iter:  1 Ap: 8.30e-01 Pobj: -6.4429837e+00 Ad: 5.84e-01 Dobj:  2.1188634e+00 
Iter:  2 Ap: 8.86e-01 Pobj:  8.6485244e+00 Ad: 7.52e-01 Dobj: -1.0092169e-01 
Iter:  3 Ap: 5.73e-01 Pobj:  6.3082468e+02 Ad: 2.85e-01 Dobj:  6.7429840e-01 
Iter:  4 Ap: 1.18e-01 Pobj:  1.0196791e+03 Ad: 4.55e-01 Dobj:  2.6642941e-01 
Iter:  5 Ap: 7.26e-01 Pobj:  2.0191291e+01 Ad: 4.66e-01 Dobj:  5.9874760e-02 
Iter:  6 Ap: 7.75e-01 Pobj:  3.9340988e+01 Ad: 7.50e-01 Dobj: -2.3326518e-03 
Iter:  7 Ap: 5.60e-01 Pobj:  2.7275880e+01 Ad: 8.59e-01 Dobj:  5.1133315e-03 
Iter:  8 Ap: 9.32e-01 Pobj:  1.6027470e+00 Ad: 8.66e-01 Dobj: -2.6751064e-04 
Iter:  9 Ap: 9.47e-01 Pobj:  7.4490606e-02 Ad: 9.23e-01 Dobj:  1.5463716e-05 
Iter: 10 Ap: 9.54e-01 Pobj:  2.4705712e-03 Ad: 9.44e-01 Dobj:  3.1920954e-07 
Iter: 11 Ap: 9.62e-01 Pobj:  3.1228085e-05 Ad: 9.70e-01 Dobj:  3.3330596e-08 
Iter: 12 Ap: 1.00e+00 Pobj: -2.3272240e-05 Ad: 1.00e+00 Dobj:  1.0627952e-08 
Iter: 13 Ap: 9.91e-01 Pobj: -1.2872806e-06 Ad: 1.00e+00 Dobj:  9.8126343e-09 
Iter: 14 Ap: 1.00e+00 Pobj: -1.4435182e-07 Ad: 1.00e+00 Dobj: -3.6250984e-09 
Iter: 15 Ap: 1.00e+00 Pobj:  5.5437355e-08 Ad: 9.48e-01 Dobj: -8.9896287e-08 
Iter: 16 Ap: 1.00e+00 Pobj:  5.9516053e-08 Ad: 1.00e+00 Dobj: -4.4506443e-08 
Iter: 17 Ap: 1.00e+00 Pobj:  1.5428438e-08 Ad: 1.00e+00 Dobj: -5.5963527e-09 
Iter: 18 Ap: 1.00e+00 Pobj:  2.4170027e-08 Ad: 9.98e-01 Dobj: -2.1061730e-10 
Success: SDP solved
Primal objective value: 2.4170027e-08 
Dual objective value: -2.1061730e-10 
Relative primal infeasibility: 9.65e-12 
Relative dual infeasibility: 1.69e-09 
Real Relative Gap: -2.44e-08 
XZ Relative Gap: 8.13e-09 
DIMACS error measures: 1.27e-11 0.00e+00 1.85e-08 0.00e+00 -2.44e-08 8.13e-09
  5.170052 seconds (97.46 k allocations: 14.575 MiB, 0.26% gc time)

julia> annihilator(get_series(M)[1],monomials(X,seq(0:3)))[1]
2-element Vector{Any}:
 x - 1.4142135219640146
 y² - 1.41421349394504

https://arxiv.org/pdf/2102.09367.pdf
https://gitlab.inria.fr/AlgebraicGeometricModeling/MomentTools.jl