A scheduling problem is described in terms of resources and tasks and is
represented by the abstract class Problem . Specific problems are described
by concrete subclasses of Problem . During the initialization phase, activities
are assigned to resources. The preferred order of execution is indicated by
the activation time of each activity. This order might change during the time
How do we represent the Time Plan?
Since every Activity records its temporal parameters, we do not need to
represent the time plan explicitly. The information that creates the time
plan is distributed among the activities.
Where is the scheduling algorithm implemented?
The scheduling algorithm is distributed among the resources. Each
resource schedules its activities. We introduce class Scheduler to initialize
the scheduling process and to activate the resources. It computes the global
performance and evaluates when the iterative scheduling process of each
resource should terminate.
How do we represent the dependencies between resources?
In the fitness club scenario, each athlete works out on one exercise
(activity) at a time. Similarly, each training machine can be used to perform
only one exercise at a time. According to the analysis, each machine is ded-
icated to a single athlete at a time. This means that, at a given point in time,
an athlete performs an exercise using a machine exclusively.
Thus, we decide to represent both athletes and machines as instances of
class Resource and the exercises as instances of class Activity . Every activity
is simultaneously assigned to a machine and to an athlete. Machines and
athletes schedule their activities according to their temporal preferences
We start the implementation with class Activity since it is the basic compo-
nent of the architecture. The data structure records the name of an activity