I met a simple-form problem that confused me a lot, the problem is given below:
cvx_begin
variable l_u
minimize sum(sum( 1.0000e-18*pow_pos(l_u,3) ))
subject to
l_u >= 1e6;
l_u <= 2*1e6;
l_u >= 0;
cvx_end
By CVX tool, the result is NAN, and status is Failed. I feel very confused and do not know what the reason is. I will really appreciate it if someone can help me sovle this problem.
The problem is basically overflow due to pow_pos(l_u,3) being too large. The problem in reality is feasible, but the double precision solvers get overwhelmed by pow_pos(l_u,3) of such a large number, and “incorrectly” conclude the problem is infeasible. I am not sure which transformations are being applied by CVX vs. inside the solver, so I am not attributing any blame.
Even without the 1e-18, the difficulty is pow_pos(l_u,3). The minimum value for that is pow_pos(1e6,3), which is 1e18. If the lower bound on l_u were 1e2 (or maybe 1e3 depending on the solver), rather than 1e6, the problem would be marginally solvable,.
So as @Erling says, you will need to rescale the variable(s) in your problem. Presumably, you have in mind a more complicated problem, because the optimal solution of this problem will always be on the lower bound . Note that your constraint l_u >= 0; is superfluous due to the constraint l_u >= 1e6; Also, given that l_u is a scalar variable, the sum(sum( in the objective function is superfluous.