A method for scheduling a complex activity that is governed by a set of pre-defined constraints including consumable resource constraints, wherein an unacceptable schedule exists for the activity, the method comprising the steps of:
- establishing the unacceptable schedule as a current schedule;
- calculating a score for the current schedule;
- repairing one or more constraint violations of the current schedule by modifying the current schedule without relaxing the set of pre-defined constraints;
- determining a revised schedule from the schedule modification or modifications made by the constraint violation repair or repairs;
- calculating a score for the revised schedule;
- selecting one of the revised schedule or the current schedule as a new current schedule based upon a comparison of the score of the revised schedule and the score of the current schedule;
- repeating, until a predetermined condition is met, the steps of repairing one or more constraint violations of the current schedule, determining a revised schedule, calculating a score for the revised schedule, and selecting one of the revised schedule or the current schedule as the new current schedule;
- and
- selecting one of the revised schedules as the final schedule.