12/03/2009

Planning Engine v0.5 Released

Version 0.5 of the Prozima Planning Engine is now available for download. This version focused on making the API more consistent and reducing the complexity of some methods. Example code is also now available which demonstrates how to use the API.
PEngine, the Prozima Planning Engine, is a Java library which facilitates the creation of complex portfolios of projects, containing multiple schedules, activities, milestones and resources. PEngine's algorithms can calculate the optimum allocation of resources across all projects so that time and cost goals are met.
The Planning Engine is highly versatile, adding powerful new functionality to many types of software application, everything from large scale enterprise systems to small mobile applications. A fully featured, evaluation version of the library is now available for download from the Planning Engine page.

11/27/2009

Gantt Chart Components for Java

While the Prozima Planning Engine can do all the heavy lifting of allocating resources, managing calendars, calculating costs and optimizing schedules, if schedule and resource information is to be displayed graphically, it may make sense to use an off-the-shelf component rather than developing from scratch. There are various Java Gantt Chart components available:

Commercial Components

ILOG JViews Gantt from IBM is a full featured Java library which provides Gantt charts, PERT charts, calendar and resource views.

VARCHART JGantt from netronic provides a Gantt Chart which is available as a JavaBean and JavaServer Faces component.

FlexGantt UI Framework from DLSC is a customizable Java Swing component.

Open Source Components

We are not aware of any component which renders Gantt Charts to an acceptably high standard.

If you know of any other components, please let us know.

11/19/2009

UML Diagrams for Planning Engine v0.4

The Prozima Planning Engine v0.4 has a fully documented API, however it's always useful to see the classes described graphically. Below are two UML diagrams describing the public API provided by the Planning Engine library. The first is a class diagram which describes the most important class provided by the API. It does not list every subclass of Command as this would clutter the diagram too much. (click the diagram to enlarge)

Secondly, here is a simple sequence diagram which describes the process of passing a Command to the API using the invoke() method.

11/18/2009

Active Schedules

The Planning Engine can support a large number of individual projects, which share many resources. This allows the creation of project management applications which support project portfolios. Each project consists of one or more schedules but only one of these schedules is the active schedule at any one time.

Whats an active schedule?

As an example, take the situation where we have two projects: Project XX and Project YY. Project XX has a higher priority than Project YY. Project XX has two schedules: Schedule AA and Schedule BB. Project YY has only one schedule: Schedule ZZ. The activities in all three schedules utilise the same resource: Bob. When calculating the work allocated to Bob for the Schedule ZZ, work cannot be allocated during time when work has already been allocated to Project XX, due to its higher priority. Therefore, it must be known when work has been allocated to Project XX. However, Project XX has two schedules, which may have different activities, constraints, relationships and therefore, differently allocated work. Hence, every project should have a schedule whose work allocation is examined when calculating the best solution for other schedules.

If Schedule AA is the active schedule for Project XX, then the work allocated to the resource Bob for Schedule ZZ cannot overlap with the work allocated to Bob for Schedule AA. An active schedule, therefore, is the schedule a project publishes/exports when other projects are being solved. Also, when new work is being logged towards an activity, this work should be allocated to the currently active schedule. Baselines can never be the active schedule as they cannot accept logged work.

The concept of the active schedule allows non-active schedules to be used to evaluate alternative scenarios and create baselines, without influencing the work etc. allocated to schedules across other projects.