1 Introduction

The resource-constrained project scheduling problem (RCPSP) is a generalization of the job shop problem and as such belongs to the class of NP-hard problems [2]. In a typical RCPSP there are j = 1, ..., N ( N = |J| ) activities that are usually processed without preemption. Each activity j ∈ J has a fixed duration d j . The execution of activities is governed by the precedence constraints that usually exist between them. Precedence constraints between activities can be represented by minimum time lags λ ij  ≥ 0 between the starts of activities i and j ∈ J. Notice that when λ ij  = d i , the usual finish to start precedence is present between activities i and j ∈ J. Overlapping of activities is possible, for instance when 0 ≤ λ ij  < d i , i.e., activity j can start before activity i finishes, or when λ ij  > d i , i.e., activity j must wait for λ ij  − d i periods after activity i finishes, before it can start.

Processing of activities is subject to the availability of resources with limited capacities. While being processed, activity i ∈ J uses a constant amount of u ir units of resource type r ∈ R, where R = {1, ...,∣R∣}. The availability of resources is constant during the planning horizon t = 1, ...,T, the availability of a type r ∈ R resource is restricted to a constant amount a r . As such, resource constraints are also present. Therefore, activities which may be performed concurrently compete for scarce resources. Hence, whenever the availability of a resource type is not sufficient to satisfy the total requirements, those activities can not be executed simultaneously and resource constraints have to be observed. It can be easily verified that an RCPSP with ∣R∣ renewable resources each of which has an availability of one unit per period corresponds to a job shop problem with M = ∣R∣ machines (see [19]). The most common considered objective of the RCPSP is to schedule (allocation of the given resources to activities in order to determine the start, s i and completion, f i of all activities) the project’s activities such that both their precedence and resource constraints are satisfied and the project’s makespan is minimized.

The structure of a project is usually depicted as an acyclic activity-on-node network (AON) with nodes depicting activities and arcs representing the precedence constraints. The dummy activities 1 and N (d 1 = d N  = 0) in such a network represent the beginning and the end of the project.

The RCPSP which is frequently studied as an optimization problem was originally proposed in [17]. Since then various exact, heuristic and metaheuristic methods have been proposed to solve this problem. Being classified as NP-hard, only small-sized RCPSP instances with up to 100 activities can be solved exactly in a satisfactory manner [23]. Therefore, many heuristic procedures are applied to study large and/or complicated RCPSPs.

Optimal methods for the RCPSP basically involve the use of mathematical programming (e.g. [7]), and implicit enumeration; i.e. dynamic programming (e.g. [16]) and branch and bound (e.g. [4]). As mentioned previously, optimal methods are not really suitable for the real world RCPSPs.

Many heuristics (single-pass, multi-pass and sampling methods) and metaheuristics (e.g. tabu search, genetic algorithm) have been proposed for the RCPSP. In 2006, Kolisch and Hartman categorized a number of heuristic and metaheuristic methods to study and compare their performances based on standardized experimental design [13]. Most of the heuristic methods presented to solve the RCPSP so far can be broadly categorized as being constructive or improvement methods.

In constructive methods schedules are built gradually from scratch. Priority rules and scheduling generation schemes (SGS) are the two main components of constructive methods. SGS determines the way in which a feasible schedule is constructed by assigning starting times to activities. Based on the selected priority rule and the SGS, activities are taken from a list of eligible activities and added to the partial schedule one by one. Eligible activities are those that satisfy both precedence and resource constraints. This is repeated until all activities are considered and the complete schedule is obtained. Many constructive methods have been presented and studied in the literature [9]. However, Kuo-Ching Ying et. al, states: “there is no single constructive heuristic that outperforms all other constructive heuristics given different performance criteria and planning environments” [15].

There are two SGSs, namely the serial scheme and the parallel scheme. Both generate feasible schedules (for more details see [11]). The serial SGS adds eligible activities to the partial schedule one by one. This is repeated until a complete schedule is obtained. In contrast, the parallel SGS adds one or more eligible activities to the partial schedule whenever state changes occur (ongoing activity (ies) terminates or some resources become available). This process is continued until the complete schedule is obtained.

In improvement methods the process of generating a schedule starts by improving the value of the objective function of an initial feasible solution. This solution is somehow transformed to a better one. This is done by applying a number of operations either to an individual or a subset of solutions. Operations that transform one solution into another usually consist of changing the ranking of the activities. In each step, only operations that lead to solutions improving the best known objective function value are allowed. In order to escape local optima, meta-heuristics allow intermediate deterioration of the objective function value. Again in order to generate a solution, activities are ranked and the SGS is applied. Metaheuristic methods include genetic algorithms (e.g. [6, 14], and [18]), simulated annealing (e.g. [3, 5] and [20]), tabu search (e.g. [21]) and the artificial immune system (e.g. [1]).

Constructive methods generate acceptable solutions using moderate processing efforts. However, improvement algorithms usually provide better quality solutions albeit with higher processing efforts [11]. As described, scheduling generation schemes are a fundamental part of both constructive and improvement methods.

In the literature, papers studying the effect of the scheduling direction are relatively scarce. Although forward scheduling is the most common scheme used in schedule generations, some recent studies indicate that backward and bidirectional schemes can improve the performance of the SGSs. The effect of incorporating hybrid-directional scheduling (i.e., to construct schedules by mixing forward, backward, and bidirectional schemes) as compared to incorporating only one planning direction was recently studied and it was shown that the performance of such meta-heuristics is significantly increased by using hybrid-directional planning [15]. In this paper, we describe how the performance of the schedule generation schemes can still be increased by tri-directional scheduling.

The rest of the paper is structured as follows. In Section 2, we present the mathematical model of the RCPSP. In Section 3 we briefly describe the parallel SGS when used within forward or bidirectional scheduling schemes. In Section 4, the new tri-directional (trd.) scheduling scheme is introduced. In order to evaluate different scheduling schemes under various directions (forward, bidirectional and tri-directional) most important priority rules are integrated with scheduling schemes and theoretical as well as computational experiments are presented and discussed in Section 5. Section 6 contains a summary and conclusions.

2 The Problem

A conceptual model for the general RCPSP (overlapping of activities is allowed) as described in Section 1 is given below:

$$ \label{eq1} {\begin{array}[b]{*{20}l} & {Min\;f_N } & & & &\\ {sub\!\!ject\,\,to} & & & & & \\ & {f_1 } & \ge & \mbox{0} & & \\[2pt] & {f_j -f_i } & \ge & {d_j -d_i +\lambda _{ij} } & {\forall \;(i,j)\in {\rm {\bf H}}} & \\[2pt] & {\sum\limits_{i\in {\rm {\bf Q}}_t } {u_{ir} } } & \le & {a_r } &{t=1,\,2,\ldots ,\,f_N ;} & {r=1,\,2,\,\ldots ,\,\vert R\vert } \\ \end{array} } $$
(1)

where H denotes the set of pairs of activities indicating precedence constraints, f i is finish time of activity i (i = 1, ...,N) and Q t denotes the set of activities in progress in time interval ]t − 1,t]: Q t  = { i| f i  − d i  ≤ t < f i }. The underlying assumptions of model (1) are: (a) activities are numbered from 1 to N, where activities 1 and N are dummies; (b) no preemption of activities are allowed; (c) there are ∣ R ∣ renewable resource types with u ir the constant requirement of activity i for resource r, and a r the constant availability of resource type r (1 ≤ i ≤ N, 1 ≤ r ≤ ∣ R ∣). Note that in this paper we have considered the usual RCPSP, i.e. λ ij  = d i .

3 Scheduling Schemes

In this section, we briefly describe the scheduling scheme that we have adopted in our new tri-directional scheduling scheme, namely parallel scheduling scheme (PSS). Information about the other scheduling schemes can be found in [11] among others. As seen in Fig. 1, the parallel scheduling scheme iterates over some decision points that correspond to the completion times of already scheduled activities. Therefore, at most N = ∣J∣ decision points are considered. At each decision point, the unscheduled activities whose predecessors have completed are considered and are scheduled subject to no resource conflict occurring at that time. To illustrate the parallel scheduling scheme, we use the following notations and the algorithm of Fig. 1 which is adopted from Kolisch [11].

R :

Set of available resources

C n :

Set of completed activities at stage n

D n :

Set of eligible activities at stage n

πa r :

Remaining capacity of resource r at any stage

P i :

Set of predecessors of activity i

υ(i):

Priority value of activity i

t n :

Scheduling time at stage n

J :

Set of project activities

A n :

Set of ongoing activities at stage n

Fig. 1
figure 1

Parallel scheduling scheme (PSS)

It was observed that PSS searches in a smaller solution space than serial scheduling scheme (SSS) and with this drawback the solution space of PSS might not contain an optimal schedule in contrast to SSS [11]. However in [11], Kolisch remarked: the parallel scheduling scheme performs better for “hard” problems (with a high resource factor and/or low resource strength) while the serial scheduling scheme is better for “easy” problems (with a low resource factor and/or high resource strength). In addition, Klein showed that using different scheduling directions will overcome the disadvantage of PSS in yielding non-delay schedules that for some instances may not include the optimal schedule (see [8]). As we believe that higher dimensional scheduling schemes demonstrate their capabilities in harder instances, we only adopt PSS in our proposed scheduling scheme.

4 Multiple Scheduling Directions

4.1 Bidirectional Parallel Scheduling Scheme

Schedules are constructed either in a manner in which an activity is scheduled when all its predecessors are scheduled (forward) or in a manner in which an activity is scheduled when all its successors are scheduled (backward). Forward and backward scheduling schemes are combined in bidirectional scheduling in order to construct schedules in both directions simultaneously. There are two lists (forward and backward) of activities, one for each scheduling direction, that are sorted according to some priority rule. Activities that either have no predecessors or their predecessors have already been scheduled are added to the forward list. Activities of the backward list are those that either have no followers or their followers have been scheduled in backward direction. In addition, there are two decision points, one for each direction (forward-τ f and backward-τ b ). Two sets ES f (τ f ) and ES b (τ b ) contain the forward and backward eligible activities at τ f and τ b respectively. Activities from ES f (τ f ) are assigned starting time at τ f and activities from ES b (τ b ) are assigned finishing times at τ b . This process is continued until no more activities can be scheduled at current τ f and τ b . Therefore, decision points are updated and iteration continues. Iterations stop when there are no more activities to schedule. For an activity that can be scheduled in either direction, the following tie-breaking rule is used to determine the direction that the activity is scheduled. If the difference between its start time in forward scheduling and the beginning of the project is smaller than the difference between its finish time in backward scheduling and project completion time, the activity is forward scheduled, otherwise it is backward scheduled. The complete schedule is obtained by left shifting the activities that are backward scheduled in the order of their starting times.

Example 1

Bidirectional PSS was applied to the project network shown in Fig. 2. In this project it is assumed that the per unit time availability of a single resource is 7 (see Figs. 3 and 4). After scheduling the dummy start and end activities, τ f  = 0 and τ b  = 32 (32 is the sum of all activities durations). Eligible sets are ES f (τ f  = 0) = {2,3,4,5}, and ES b (τ b  = 32) = {7,8,9}. Using shortest processing time (SPT), activity 2 is added to the forward partial schedule (FS) after which activity 7 and then activity 8 are added to the backward partial schedule (BS) respectively. No more activities can be scheduled at current τ b , therefore ES b (τ b  = 30) = {9}. Between activities 3, 4, 5 and 9, activities 3 and 4 are forward scheduled. As no more activities can be scheduled at τ f  = 0, we update the eligible set, i.e. ES f (τ f  = 2) = {5}. Among eligible activities, namely activity 5 and 9, activity 9 is backward scheduled. Backward eligible set is updated. Thus ES b (τ b  = 29) = {5}. Using the tie breaking rule, activity 5 is forward scheduled. Forward eligible set is updated, i.e. ES f (τ f  = 4) = {}. As forward eligible set is empty at this time, we extend the time until at least one activity becomes eligible. So ES f (τ f  = 10) = {6} and ES b (τ b  = 24) = {6}. Using the tie breaking rule, activity 6 is forward scheduled. There is no more activity to be scheduled. The partial forward and backward schedules are shown in Fig. 3. In order to link FS and BS, we sort activities in BS in ascending order, by their starting times. We then shift the sorted activities to the left as far as the precedence and the resource constraints are not violated. The complete schedule is shown in Fig. 4 and as it can be seen the makespan is 18.

Fig. 2
figure 2

An example of a project network

Fig. 3
figure 3

Forward and backward schedules

Fig. 4
figure 4

Schedule obtained by bidirectional and forward scheduling scheme

The example was also solved using forward scheduling scheme. The schedule obtained is the same as the schedule obtained by bidirectional scheme, i.e. Fig. 4.

4.2 Tri-directional Parallel Scheduling Scheme

Klein showed that scheduling direction has a considerable influence on the performance of constructive methods [8]. In order to benefit even more from the advantages of scheduling directions, in this paper we propose a new scheduling scheme in which activities are either forward scheduled (FS), backward scheduled (BS) or midway scheduled (MS). The complete schedule is obtained by interlinking FS, BS and MS.

The main idea of tri-directional scheduling is to allow more activities to be able to get left shifted in order to benefit from the possibility of filling the existing gaps of the forward schedule by the shifted activities. Scheduling activities in tri-directional scheme is similar to bidirectional scheme with the difference that those activities that can be scheduled in either direction are now scheduled in midway direction. To illustrate, if activity j is only available in either forward or backward direction, it is scheduled in the direction that is available. On the other hand, if it is available in both directions, it is scheduled in midway. Now, having obtained a forward, backward, and a midway schedule, for interlinking these three schedules into a single one, activities from midway schedule and backward schedule are respectively considered for left shifting. For so doing, at first midway activities are considered in non-increasing order of their scheduled starting times and then the backward activities are considered in non-decreasing order of their scheduled starting times. Left shifting the midway schedule, using an ascending order of the starting times would be similar to the bidirectional scheme. However, it is not exactly equivalent to the bidirectional scheme, because in many cases in tri-directional scheme more activities get the opportunity to be moved (note that the number of activities that are being moved in tri-directional scheme is at least equal to the number of activities that are being moved in bidirectional scheme). If there is more than one activity with identical starting times, then the first activity that is left shifted is the one that was scheduled last. Following these orders the activities are successively left shifted into FS such that no violation of precedence and resource constraints occurs.

In the following lemmas and theorem we try to state the sufficient conditions for the proposed tri-directional scheduling scheme in order to perform better than unidirectional and/or bidirectional scheduling schemes. However, the computational experiments carried out in this study clearly demonstrate the superiority of tri-directional scheme in almost all the problem instances that were solved.

Remark 1

In contrast to the bidirectional scheduling scheme in tri-directional scheme there is no need to use tie-breaking rules.

Lemma 1

Let P be an instance of the RCPSP with N activities. Let S be a feasible schedule with respect to both precedence and resource constraints of P where preemption is not allowed. Let T be the makespan of schedule S. Let S be the schedule obtained by applying preemption of activities to S. If T is the makespan of S, then T ≤ T.

Proof

See Appendix.

Lemma 2

Let P be a project as described in Lemma 1 with no preemption. Let T1 and T2 be the makespans of the schedules by using forward and bidirectional scheme, respectively. Let PS f and PS b are left and right sub-schedules of bidirectional scheme respectively. In order to obtain a complete schedule, suppose we shift PS b as a block to left such that the largest finish time of activities in PS f coincide with the smallest start time of activities in PS b . If the makespan of such a complete schedule is T1, then T2 ≤ T1.

Proof

See Appendix.

Lemma 3

Let T2 be as defined in Lemma 2. Let T3 be the makespan of tri-directional scheduling scheme and PS f , PS m and PS b be the sets of left, middle and right sub-schedules in the tri-directional scheduling scheme, respectively. If PS m and PS b are linked to the PS f as independent blocks of activities and if the resulting makespan is equal to T2, then T3 ≤ T2.

Lemmas 2 and 3 yield the following theorem.

Theorem 1

Let T1, T2 and T3 are the makespans of the schedules obtained by using forward, bidirectional and tri-directional scheduling scheme, respectively. If the conditions of Lemma 2 and 3 are satisfied then T3 ≤ T2 ≤ T1.

Example 2

By applying the tri-directional PSS in combination with the SPT rule, we obtain forward, backward and midway schedules. In the first two iterations, the dummy activities are scheduled and we obtain ES f (τ f  = 0) = {2,3,4,5}, ES m (τ m  = 0) = {} and ES b (τ b  = 32) = {7,8,9}. For the sake of orderliness, we schedule the midway activities in a separate horizontal coordinates. Activity 2 is forward scheduled, while activities 7 and 8 are backward scheduled. Subsequently, activities 3 and 4 are also forward scheduled. As no more activities can be scheduled at current time, by forwarding the scheduling time, we update the eligible sets. Therefore, we have: ES b (τ b  = 30) = {9} and ES f (τ f  = 2) = {5}. In the next step, activity 9 is backward scheduled. Now ES b (τ b  = 30) = {}, so τ b  = 29 and ES b (τ b  = 29) = {5}. Since activity 5 can be scheduled in either direction we have ES m (τ m  = 0) = {5}. Therefore, activity 5 is midway scheduled. In the last iteration, the only remaining eligible activity 6 must be scheduled. It is available in either direction, so ES m (τ m  = 8) = {6}. All the activities are scheduled, and the corresponding schedules are shown in Fig. 5. We now must link the three schedules together. At first, midway scheduled activities are considered in decreasing order of their scheduled starting times and then left shifted to link with the forward scheduled activities. In so doing activity 6 is left shifted to start at 4 and activity 5 is left shifted to start at 6. Now the backward scheduled activities are considered in non-decreasing order of their scheduled starting times, and then left shifted. As the result activities 7, 8 and 9 are left shifted to start at 2, 14 and 6 respectively. As it can be seen from Fig. 6, the complete schedule makespan is 17.

Fig. 5
figure 5

Forward, midway and backward schedules

Fig. 6
figure 6

Complete schedule obtained by tri-directional parallel scheduling scheme

The outline of the proposed method is given in Fig. 7. The notations used are as in Fig. 1 and Example 2, but indices f, b, m refer to forward and backward and midway directions, respectively.

Fig. 7
figure 7

Outline of tri-directional scheduling scheme

5 Computational Experiments

5.1 Priority Rules

The performance of the tri-directional parallel scheduling scheme is evaluated using different priority rules. Priority rules are used for selecting the activity which has to be scheduled next. Many priority rules have been designed by researchers and used in their studies of the RCPSP and related problems. These have been classified differently. One such classification categorizes rules according to the information that priority rules use [10]. As such, they have been categorized as network-based rules (e.g. most total successors), critical path-based rules (e.g. latest starting time), resource-based rules (e.g. greatest resource demand) and composite rules (e.g. activity resource controls). In this paper, we have adopted the complete list of priority rules used in [8]. We refer the interested reader to the aforementioned paper for a detailed description of these priority rules.

5.2 Combinations of Scheduling Schemes and Priority Rules

In order to demonstrate the superiority of the tri-directional parallel planning scheme, we compare the effectiveness of the forward, bidirectional and tri-directional scheduling schemes in combination with the different priority rules. The result obtained by each combination is an upper bound (UB) on the optimal project duration. In our evaluations of different planning schemes, we have used the number of instances solved to optimality; the best results obtained; average relative deviation from the optimal solution \(( {\sum\limits_{i=1}^q {( {\frac{UB_i -OPT_i }{OPT_i }} )} \times 100/q} )\) in which OPT i is the optimal project completion time for instance i, and q is the number of instances to be evaluated; and the maximum relative deviation from the optimum solution (\(\mathop {Max}\limits_{i=1}^q ( {\frac{UB_i -OPT_i }{OPT_i }} )\times 100\)) as evaluation criterion.

All the experiments that are reported in this paper are performed on a PC Pentium 4 with CPU 1.8 Intel and 512 MB. All procedures are coded by means of MATLAB R2008a. The benchmark SMFF of Kolisch’s benchmarks are used in the evaluation processes. This set contains 480 instances with 30 activities and with RS = 0.2, 0.5, 0.7, 1. As in [8] we excluded 120 easy instances (i.e. those with RS = 1). We also used the set j60 of Kolisch’s benchmarks with RS = 0.2. Instances with 101 activities are taken from Alvarez-Valdes & Tamarit benchmarks [12].

Table 1 displays the performance of forward (fwd.), backward (bwd.), bidirectional (bid.) and tri-directional (trd.) scheduling schemes using six categories of different priority rules. It can be seen that under different priority rules in both criterions: number of instances solved to optimality and the best results obtained the new tri-directional scheduling scheme outperforms the other scheduling schemes. Columns 5 and 10 of the Table display the percentage improvement of the proposed scheme when compared to the best available scheme. For instance when MTS is used as the priority rule, tri-directional scheme solves 16.98% more instances to optimality. In fact, performance improvement ranges from 1.33% to 16.98%.

Table 1 No. of instances solved to optimality and the best solution obtained

Bold numbers in the Tables depict the best result obtained by the corresponding scheme under each category of priority rules. The asterisks indicate the best result in each category. In comparison to bidirectional scheme, the proposed scheme solves 7 more instances (140 vs. 133) albeit under different priority rule. For the instances that are not solved to optimality, the results obtained are also improved. For instance, under ACROS as priority rule, tri-directional scheduling scheme improves the best results obtained by 15.21%. With regards to the best results obtained, performance improvement ranges from 0.4% to 17.9%

Table 2 reveals that tri-directional scheduling scheme almost outperforms the bidirectional scheme with respect to all measures. With respect to average relative deviation, tri-directional scheme always yields smaller values when compared to forward and backward schemes. Furthermore, it solves more problem instances to optimality than unidirectional and bidirectional schemes.

Table 2 Average and maximum relative deviation from optimality

In Table 2 when average and maximum relative deviations from optimality are displayed, once again tri-directional scheme performs better. It improves the average relative deviation by 10.02% (under LFT) and maximum deviation by 5.03% (under GRPW*). Apparently, tri-directional scheme with respect to two priority rules namely GRPW* and EFT, has not performed as well as bidirectional scheme. However, the difference in performance of the given schemes under the two priority rules does not seem to be significant.

The research on the constructive methods shows that their performances to some extent depend on the structure of the problem instances. To study the performance of scheduling schemes including the new tri-directional scheme in more detail, we adopt as Klein [8] the complexity measure introduced in [10], i.e. the resource strength. For each resource, it is defined as \(( {a_r -u_r^{\max } } )/( {k_r^{peak} -u_r^{\max } } )\), in which a r is per unit of time availability of resource r, \(u_r^{\max } \) is the maximum requirement of a single activity of resource r, and \(k_r^{peak}\) is the peak requirements for resource r when activities are scheduled at their earliest start time. From now on, we exclude from further investigation the inferior backward scheduling scheme and focus only on forward, bidirectional and tri-directional schemes.

High (RS = 0.7), medium (RS = 0.5) and low (RS = 0.2) resource strengths are examined. As the resource strength decreases, the average and maximum relative deviations from the optimal solution increase. Average relative deviation with tri-directional scheduling scheme and under different priority rules ranges from −5.35 to +9.13 when RS = 0.2 (see column 5 of Table 3), ranges from −16.75 to +6.25 when RS = 0.5 (see column 4 of Table 4) and finally ranges from −29.51 to −0.99 when RS = 0.7 (see column 4 of Table 5). This confirms the expectation that by increasing the complexity of the problem instances (low resource strength) the deviation from the optimal solution increases.

Table 3 Average and maximum relative deviation from optimality (RS = 0.2, 30 activities)
Table 4 Average and maximum relative deviation from optimality (RS = 0.5, 30 activities)
Table 5 Average and maximum relative deviation from optimality (RS = 0.7, 30 activities)

If low resource strength is combined with higher number of activities in a project, will the tri-directional scheduling scheme behaves similarly? Tables 6 and 7 present an answer to this question.

Table 6 Average and maximum relative deviation from optimality (RS = 0.2, 60 activities)
Table 7 Average and maximum relative deviation from optimality (RS ≤ 0.4, 101 activities)

With reference to Tables 6 and 7, it is evident that the performance of tri-directional scheme improves as the hardness of the problem instances increases. For example, when the number of activities increases to 60, the average relative deviation from the optimal solution obtained by tri-directional schemes is always less than that obtained by bidirectional scheme (see column 5 of Table 6). The same behavior can be seen from the results of the Table 7 where the number of activities has increased to 101 (see column 5 of Table 7).

One more question remains to be answered. Is “tri-directional scheduling scheme equivalent to bidirectional scheduling scheme with tie-breaking rule such as always schedule the activities of BSFS in BS”? We addressed this question empirically as follows. We ran the previous test problems using bid., trd. and bidirectional scheduling scheme coupled with the given tie-breaking rule (bid.2). The resource strength ranges from 0.2 to 0.7. As it can be seen from Table 8, tri-directional scheduling scheme gives better results in almost all the test problems when compared to bid.2. The better performance of tri-directional is again more evident in projects with larger number of activities. It seems that the better performance of trd. is due to shifting more activities to left as well as dividing the activities into different directions.

Table 8 Average relative deviation from optimality

6 Conclusions

In this paper, we have introduced tri-directional scheduling scheme in order to improve the performance of constructive scheduling schemes when applied to the RCPSP. We have studied and compared the performance of forward, backward, bidirectional and tri-directional planning schemes in the context of different priority rules. Computational experiments and some analytical remarks revealed that the tri-directional scheduling scheme outperforms the other mentioned scheduling schemes in almost all the standard benchmark instances used. It was also shown that in problem instances with higher degree of complexity, the tri-directional scheme performs better than existing schemes. Furthermore, in contrast to the bidirectional scheduling scheme in tri-directional scheduling scheme there is no need to use tie-breaking rules. It seems that incorporating double justification as proposed in [22] into multi-dimensional scheduling schemes, may improve the quality of the solution even more. The authors are investigating this question at present.