I am facing something that does not make sense to me. In my CVX code when I include a constraint I am getting better results (lower value) for the objective comparing to the same problem without that constraint. Is that possible? what could be the possible reasons for that?
My optimization problem is successive linear programming.
Successive Linear Programming sounds like you are calling CVX iteratively to solve a (presumably) non-convex optimization problem. If your algorithm is not enforcing a descent criterion, and I am guessing it does not, and is not otherwise safeguarded, there is no reason to think you are necessarily finding a local minimum, let alone global minimum in all cases.
But even if your algorithm always finds and terminates at a local minimum, it may not be a global minimum. It may be that when a constraint is added, a better local minimum is found vs. the original problem, even though the true global minimum can’t have a lower objective value when a constraint is added.
Thanks, Mark for your answer. I was thinking when the solver status is “solved” it means it has reached the global optimal. So do you have any suggestions to overcome this? I can try different initial points but other than that I don’t know other techniques that could be helpful here.
When solver status is solved, it means CVX/solver have found the global optimum of the problem CVX was provided. However, if you are using CVX in an iterative manner to solve a non-convex problem, the solved status of individual CVX problems does not say anything about whether the non-convex problem has been solved to even a local optimum, let alone a global optimum.
I suggest you use an off-the-shelf non-convex optimization solver rather than building your own Sequential Linear Programming solver which iteratively calls CVX. There is a reason that high quality non-convex optimization solvers are more than 10 lines long.
Thanks for the answer. My application requires real-time results so that is why I am trying to solve it as an iterative convex optimization problem. Is it possible to solve the non-convex problem in a real-time manner? ( I understand that real-time can mean different things regarding the application)