# Is there a way to reformulate 1/(v1*v2) so it can be maximized?

I am working in formulations to find optimal design of experiments. Specifically, compound designs, where the objective function is the product of the efficiencies of two criteria, say v1 and v2. For combinations of concave criteria (det_rootn and lambda_min) it works fine; I use the geometric mean to express the objective function.

For combinations of convex criteria (say trace_inv and lambda_max) the problem is more complex. Indeed I am stack. we need to maximize 1/(v1*v2). We can use prod_inv, which is a convex function, so it can only be used for minimization. I know, the problem is not convex. But the question, can it be reformulated. I already tried various alternatives (det_inv, etc.) without success.

This latest formulation includes 3 constraints (c1 and c2 are constants):

trace_inv(fim1)/c1 <= v1;
lambda_max(fim1)/c2 <= v2;
lambda_min(fim1) >= 1.0;

My question is, does anybody see a way to circumvent the problem? Or, is it a problem out of convex programming?

CVX is not suited for all problems.

If I understand correctly in this case you really need to minimize \sum_i \frac{\lambda_1}{\lambda_i} where \lambda_1\geq\cdots are the eigenvalues of some matrix A. You may have to use some convex proxy that approximates your target, for example minimize \lambda_1-\lambda_n or minimize inverse trace with \lambda_1 bounded by a constant or something else of this kind. Maybe 6 Semidefinite optimization — MOSEK Modeling Cookbook 3.3.0 has something inspiring. Other multi-criteria combinations may be just as bad.

Thank Michal. That is a trick to find the condition number. While the A-criterion minimizes the trace of the inverse of the FIM, the K-criterion minimizes the condition number. What I want is to combine both. In the meantime I noticed that both criteria are convex, but since they appear in the denominator of the efficiency terms, those become concave. So, I believe that if everything is correct I should be able to use geo_mean. The problem could be finding 1/trace_inv(FIM)…