The problem of assigning locomotives to trains consists of selecting the types and number of engines that minimize the fixed and operational locomotive costs resulting from providing sufficient power to pull trains on fixed schedules. The force required to pull a train is often expressed in terms of horsepower and tonnage requirements rather than in terms of number of engines. This complicates the solution process of the integer programming formulation and usually creates a large integrality gap. Furthermore, the solution of the linearly relaxed problem is strongly fractional. To obtain integer solutions, we propose a novel branch-and-cut approach. The core of the method consists of branching decisions that define on one branch the projecti...