An algorithm (GIPC2) for solving integer programming problems with separable nonlinear objective functions