The analysis and design of engineering and industrial systems has come to rely heavily on the use of optimization techniques. The theory developed over the last 40 years, coupled with an increasing number of powerful computational procedures, has made it possible to routinely solve problems arising in such diverse fields as aircraft design, material flow, curve fitting, capital expansion, and oil refining just to name a few. Mathematical programming plays a central role in each of these areas and can be considered the primary tool for systems optimization. Limits have been placed on the types of problems that can be solved, though, by the difficulty of handling functions that are t everywhere differentiable. To deal with real applications, it is often necessary to be able to optimize functions that while continuous are t differentiable in the classical sense. As the title of the book indicates, our chief concern is with (i) ndifferentiable mathematical programs, and (ii) two-level optimization problems. In the first half of the book, we study basic theory for general smooth and nsmooth functions of many variables. After providing some background, we extend traditional (differentiable) nlinear programming to the ndifferentiable case. The term used for the resultant problem is ndifferentiable mathematical programming. The major focus is on the derivation of optimality conditions for general ndifferentiable nlinear programs. We introduce the concept of the generalized gradient and derive Kuhn-Tucker-type optimality conditions for the corresponding formulations.