1. A computer system for optimizing the scheduling of a plurality of tasks to be executed on a plurality of nodes, the system comprising: a memory storing computer executable instructions; and a processor operatively coupled to said memory and configured to execute the instructions to perform the following steps: receive a plurality of tasks to be scheduled across a plurality of nodes; and select the plurality of nodes for each task by implementing an optimization function using minimum cost flow.