Simple weight-based solution to the rehearsal scheduling problem.
The current algorithm creates a schedule sequentially. A weight is calculated based on the sum of the separation time of each member of that group to the nearest other occurence, as well as the inconvenience time generated by splitting two sequential groups apart. This weight is used to find the optimal slot to place each new group within the schedule, until all groups are processed and the schedule is complete.