A general purpose algorithm for the solution of nonlinear mathematical programming problems containing integer, discrete, zero-one and continuous design variables is described. The algorithm implements a branch and bound procedure in conjunction with both an exterior penalty function and a quadratic programming method. Variable bounds are handled independently from the design constraints which removes the necessity to reformulate the problem at each branching node. Examples are presented to demonstrate the utility of the algorithm for solving design problems. The use of zero-one variables to represent design decisions in order to allow conceptual level design to be performed is demonstrated.