In order to find an optimal solution to the problem of scheduling courses, one attempts to find a schedule which satisfies all of the hard constraints and maximizes the number of soft constraints satisfied. To achieve this we use graph coloring to find a complete schedule which satisfied all of the hard constraints. Local search methods such as simulated annealing can be used to satisfy the soft constraints.