In this paper, the expression "production systems" refers to flow shops, job shops, assembly systems, Kanban systems, and, in general, to any discrete event system which transforms raw material and/or components into products and/or components. Such a system is said to be cyclic if it provides the same sequence of products indefinitely. A schedule of a cyclic production system is defined as soon as the starting time of each operation on the related resource is known. It has been shown that, whatever the feasible schedule applied to the cyclic production system, it is always possible to fully utilize the bottleneck resource. In other words, it is always possible to maximize the throughput of such a system. As a consequence, we aim at finding the schedule which permits to maximize the throughput with a work in process as small as possible. We propose a heuristic approach based on Petri nets to find a near-optimal, if not optimal, solution. We also give a sufficient condition for a solution to be optimal.