Local NLP solvers have often problems with terms z=x × y, x,y ≥ 0. There are some quick and dirty tricks that can help.
- Provide a starting point <> 0. When starting from 0 a solver may not even move because of the zero gradients.
- Replace the lower bound of 0 by a small nonzero value. That will prohibit these dangerous zero values. Alternatively write
- z=(x+ε) × (y+ε), x,y ≥ 0 where ε>0 is a small constant.
There are some more sophisticated reformulations (see e.g. Liberti, Pantelides) but as first line of attack, the above may be helpful.