In this paper we describe a method that combines simulation and cutting plane methods to solve resource allocation and scheduling problems. We solve a relaxed linear (integer) program iteratively and pass the solution of each iteration to a simulation. The results of the simulation are used to generate constraints in the linear (integer) program. We provide conditions under which the solution of the linear (integer) program converges to an optimal solution of the unrelaxed problem. The concavity of the underlying service level function is critical for the method and we present a linear programming method to numerically check the concavity of a function.