# How to transform the optimization function into SOCP

The optimization function is:

maximize {x_1^{p_1}}{x_2^{p_2}}....{x_T^{p_T}}

here, x_t are optimization variables and p_t are rational numbers (constants). I can express this in GP mode with prod, but GP is still in experimental stage. Therefore, is there any possibility to convert these to SOCP? All the constraints in my problem are SOCP.

For example, T=4 and p=[.25 .34 .41 .55];

Now, How to transform this to SOCP form so that CVX can handle it?

You can’t, but you can come reasonably close. This is equivalent to maximizing

$$\left(x_1^{p_1}x_2^{p_2}x_3^{p_3}x_4^{p_4}\right)^{1/(p_1+p_2+p_3+p_4)}$$

which is a weighted geometric mean. Therefore, geo_mean(x,1,p) will accomplish this.

Note however that CVX must round the values in p to nearby rationals in order to represent this as an SOCP. For this particular example, CVX will produce p=[25~34~41~55]/100 which is fortunately exact. However, the complexity of the SOCP model depends roughly on the number of bits needed to represent the values of p. So I recommend rounding down to small integers if possible. For instance, in this case, you might choose p=[5~7~8~11].

1 Like

@mcg: I do not get the meaning of ‘‘CVX will produce p=[25 34 41 55]/100 which is fortunately eact’’

What I mean is that for these particular values of p, CVX will give you a model that is an exact representation of your objective and since the integers are not too large, the model will not be too complex, either.

how to express this with prod?
and did u found any problem in using GP with such objective function?

If you test this transformation and works fine, could you confirm this and post the cvx code