I'm having trouble modeling the Euclidean Norm of a sum of decision variables in my objective function when using OPL/CPLEX. I have tried unsuccessfully a number of methods to simply take the square root of the squares of the variables.
Below is my objective function and corresponding constraint. When I run this I receive the error message that Q is not positive semi-definite. What am I doing wrong?
dvar float+ q;
dvar boolean yi in MISSIONSc in CONFIGSt in TIME;
maximize Pi * q;
sum(i in MISSIONS, c in CONFIGS)(ObsVal_Range[i][c]*sum(t in TIME)y[i][c][t])^2 >= q^2;
Both Pi and ObsVal_Range[i][c] are model parameters.
Any ideas on how I can get this working properly? Thanks.
SystemAdmin 110000D4XK754 Posts
Re: Second Order Cone Programming2012-11-01T11:03:30ZThis is the accepted answer. This is the accepted answer.What happens if you add auxiliary variables to represent the weighted sum of the y variables?
dvar float+ q; dvar boolean y[i in MISSIONS, c in CONFIGS, t in TIME]; dvar float sumy[i in MISSIONS, c in CONFIGS]; maximize Pi * q; st. forall(i in MISSIONS, c in CONFIGS) sumy[i,c] = ObsVal_Range[i][c]*sum(t in TIME)y[i][c][t]; sum(i in MISSIONS, c in CONFIGS) sumy[i,c]^2 >= q^2;
Does this work (modulo the syntax errors that I probably introduced)?
Note also that (if q does not appear anywhere else in the model) you could put the quadratic constraint directly into the objective function without having to introduce the q variable.