The Planware project developed a domain-specific development environment for the domain of complex planning and scheduling systems. Its design and implementation aim at supporting the entire planning and scheduling process including domain analysis and knowledge acquisition; application development and testing; and mixed-initiative, human-in-the-loop, plan and schedule computation. Based on principles of automatic software synthesis, Planware addressed the problem of maintaining the synchronization between evolving specifications, and the corresponding system implementation. Planware automatically generates optimized and specialized planning and scheduling code from high-level models of complex problems. A typical application might require a scheduler to simultaneously handle aircraft, crews, fuel, and airport load/unload facilities. In one Air Force application Planware generates a scheduler consisting of about 186K lines of code (see figure), in a few minutes. The input is roughly 2500 lines of modeling text (a code expansion factor of about 75x), some of which is itself auto-generated. Its performance is competitive with manually-written codes for the same problem.
Resources and tasks are uniformly modeled using a hierarchical state machine formalism that represents activities as states, and includes constructs for expressing constraints on states and transitions. The generator analyzes the state machine models to instantiate program schemas generating concrete implementations of backtrack search and constraint propagation algorithms. Coordination between resources and tasks is achieved through the use of services: tasks require services, and resources provide services. Planware's scheduler generator component matches providers with requesters, and automatically generates the code necessary to verify and enforce, at schedule computation time, the service constraints imposed in the model. Planware's user interface was based on Sun's NetBeans platform and provided integrated graphic and text editors for modeling complex resource systems, automatically generating batch schedulers, and executing the generated schedulers on test data sets.