Tuesday, October 20, 2009

NLP: bilinear terms

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.