# Many rotated_lorentz(1) constrains - Very slow

I have an optimization problem with a lot of rotated_lorentz(1) constrains:

cvx_begin

maximize(lambda)
Hx == lambdar
for i = 0:N
{x(1+i3),a(i+1)-x(2+i3),b(i+1)-x(3+i3)} == rotated_lorentz(1);
{x(1+i
3),c(i+1)+x(2+i3),d(i+1)+x(3+i3)} == rotated_lorentz(1);
end
cvx_end

CVX is using about 95% of the total computation time and Mosek is using about 2%.

Is there a way to improve the performance of CVX for this problem?

I have tried to formulated the constrains as, many semidefinite(2) and as one semidefinite.

Yes, the for loops are absolutely going to kill you here.

Can you describe what it is you’re really trying to solve? That is to say: what is the original nonlinear constraint that you’re converting to rotated_lorentz? Perhaps it can be expressed more efficiently using standard inequalities.

This is the original constraints.
I am working with structural optimization where every material point (consisting of three stresses) need to be within the yield criteria, which is two rotated second order cones.

The reason why I am asking is that when I don’t use CVX, but use a lot of slack variables to formulate my problem in the Mosek format, the program work much faster. But it is very time consuming to implement it!

Can you point us to a paper or documentation that shows how these yield criteria are formulated? I’ll be honest, it would be the first time I have ever seen any direct use of rotated Lorentz cones in a derivation of a physical application. I’ve certainly seen cases where someone showed that their nonlinear constraints can be expressed using second-order cones, but the original expressions involved nonlinear functions like norms, geometric means, etc.

I would have genuine academic interest to see such a formulation here.

I’m sure there’s a way to build all of the second-order cones in one single command—or perhaps two, one for the a/b constraint and one for the c/d constraint. See the help section here for more information.

The yield criteria is for reinforced concrete slabs in bending and was first proposed by (Nielsen 1964 “Limit analysis of reinforced concrete slabs”). The yield criteria (two second order cones) is basically the same as for reinforced concrete disk with in plane loads (Nielsen 2009 “Limit Analysis and Concrete Plasticity” eq. 2.104 and 2.105)
It is widely used in finite element limit analysis of reinforced concrete. For slabs see (Krabbenhøft 2002 “Lower bound limit analysis of slabs with nonlinear yield criteria”)

Thank you! I haven’t yet been able to look at all of these resources. But at risk of sounding pedantic, in the resources that I am seeing, they are not using Lorentz cone set membership expressions. Rather, they created expressions like x_3^2-(x_1-a)(x_2-b)\leq 0.

Yes, they talked about these as conic forms, but that’s not the same as saying that (x_1-a,x_2-a,x_3) lie in some sort of cone. In fact, not all conic forms are convex! It’s a slightly different context.

So this is actually important, because what it tells me, really, is that it might be better or at least easier to express these constraints using the geo_mean function. And I’m pretty sure that if you do, you’ll be able to use a single geo_mean-based constraint to handle an entire swath of your individual constraints.

Regardless, this is extremely cool. I’m always thrilled to see applications of convex optimization in fields that I am unfamiliar with.

Thank you for your response! It was very helpful. I have implemented the constrains with the function:
geo_mean([a-x(:,1), b-x(:,2)],2) >= abs(x(:,3));
geo_mean([c+x(:,1), d+x(:,2)],2) >= abs(x(:,3));

This is much faster!