The generalized assignment problem (GAP) determines the minimum cost assignment of n jobs to m agents such that each job is assigned to exactly one agent, subject to an agent’s capacity. Existing solution algorithms have not solved problems with more than 100 decision variables. This paper designs an optimization algorithm for the GAP that effectively solves problems with up to 500 variables. Compared with existing procedures, this algorithm requires fewer enumeration nodes and shorter running times. Improved performance stems from: an enhanced Lagrangian dual ascent procedure that solves a Lagrangian dual at each enumeration node: adding a surrogate constraint to the Lagrangian relaxed model; and an elaborate branch-and-bound scheme. An empirical investigation of various problem structures, not considered in existing literature, is also presented.