solvemoment
solvemoment computes lower bounds to polynomial programs using Lasserre’s moment-method, i.e., semidefinite relaxations.
Syntax
[sol,xoptimal,momentdata,sos] = solvemoment(F,h,options,order)
Examples
The command is used for finding lower bounds on a polynomial \(h(x)\), subject to constraints \(F(x)\succeq 0\), where \(F(x)\) is a collection of polynomial scalar or matrix inequalities (and equalities).
x1 = sdpvar(1,1);x2 = sdpvar(1,1);x3 = sdpvar(1,1);
h = -2*x1+x2-x3;
F = [x1*(4*x1-4*x2+4*x3-20)+x2*(2*x2-2*x3+9)+x3*(2*x3-13)+24>=0,
4-(x1+x2+x3)>=0,
6-(3*x2+x3)>=0,
2-x1>=0,
3-x3>=0,
x1>=0,
x2>=0,
x3>=0];
solvemoment(F,h);
value(h)
ans =
-6.0000
In the code above, we solved the problem with the lowest possible lifting (decided by YALMIP), and the lower bound turned out to be -6 (this value can be obtained using value since the objective is linear. In the general case, [relaxvalue] is required to retrieve relaxed values on expressions after solving relaxations). A higher order relaxation gives better bounds.
solvemoment(F,h,[],2);
value(h)
ans =
-5.69
solvemoment(F,h,[],3);
value(h)
ans =
-4.0685
solvemoment(F,h,[],4);
value(h)
ans =
-4.0000
For a more complete introduction, please study the moment tutorial, and the quick introduction to semidefinite relaxations in relaxvalue.