Task Scheduling Simulator

by James Hamblin

In the applet below, the directed graph represents a big job that can be broken down into several tasks. Each task has a certain amount of time it takes to complete (in minutes). An arrow pointing from one task to another means that the first task is a prerequisite for the second. Our goal is to try to determine how to assign these tasks to "processors" (which may be people, teams, machines, etc.). We want to do this as efficiently as possible according to the following rules:

  1. Each task can only be worked on by a single processor.
  2. Processors complete any tasks they are given, and do nothing else until the task is complete.
  3. Tasks cannot be worked on until their prerequisites are completed.
  4. No processor will be voluntarily idle; if there is a task that is ready to be worked on and an available processor, the processor will work on that task.

To make our job easier, we will use a timeline to keep track of the current time. The program will not allow you to advance the timeline if there are tasks that can be assigned.