- About this Journal ·
- Abstracting and Indexing ·
- Aims and Scope ·
- Article Processing Charges ·
- Articles in Press ·
- Author Guidelines ·
- Bibliographic Information ·
- Contact Information ·
- Editorial Board ·
- Editorial Workflow ·
- Free eTOC Alerts ·
- Publication Ethics ·
- Reviewers Acknowledgment ·
- Submit a Manuscript ·
- Subscription Information ·
- Table of Contents
International Journal of Manufacturing Engineering
Volume 2013 (2013), Article ID 930920, 7 pages
A Branch and Bound Approach to Solve the Preemptive Resource Leveling Problem
Faculty of Industrial and Mechanical Engineering, Islamic Azad University, Qazvin Branch, P.O. Box 34185-14161, Qazvin, Iran
Received 10 March 2013; Accepted 5 September 2013
Academic Editors: A. Che, G. Dessein, A. Lockamy, and G. Onwubolu
Copyright © 2013 Behrouz Afshar-Nadjafi et al. This is an open access article distributed under the Creative Commons Attribution License, which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited.
We study resource constrained project scheduling problem with respect to resource leveling as objective function and allowance of preemption in activities. The branch and bound algorithms proposed in previous researches on resource leveling problem do not consider preemption. So, representing a model for the problem, a branch and bound algorithm is proposed. This algorithm can handle preemption in resource leveling problem. Comparing the resource leveling problem and the preemptive resource leveling problem, it is observed that considering preemption in the problem leads to better results in the objective function. This improvement imposes additional time to solve the problem. Coding the algorithm in MATLAB and checking it on the projects with 8 and 10 activities, results show that the proposed algorithm is efficient.
Increasing international competition enforces utilization of very expensive resources (e.g., heavy machines) by most of the companies. Thus, resource constrained project scheduling problem (RCPSP) has attracted more attention. Several objective functions are studied in RCPSP. Resource leveling is one of them, in which the variation of resource utilization is to be minimized. In addition to resource constraints, minimum and maximum time lags between different activities have to be observed in general.
Several studies have been done for RCPSP. The first mathematical formulation of the RCPSP was given by Pritsker et al. . Then, Kaplan , Olaguíbel and Goerlich , and Klein and Scholl  continued their job. In addition, Blazewicz et al. proved that RCPSP is NP-hard . Kastor and Sirakoulis analyzed the effectiveness of three resource leveling problem tools on RCPSP: Primavera p6.0, Microsoft Project 2007, and Open Workbench 1.1.6 .
For resource leveling problems with minimum time lags, several exact and heuristic solution procedures have been studied.
Exact algorithms contain enumeration, integer programming, or dynamic programming techniques. Tavares represented the effectiveness of resource leveling problem in costs . Ahuja , Easa , Bandelloni et al. , Demeulemeester , and Younis and Saad  presented exact procedures for resource leveling problem. Nübel developed a branch and bound procedure (BB) upon minimal delaying alternative and disjunction precedence constraints . Demeulemeester and Herroelen proposed a model for project scheduling problem with resource constraints and preemption and a model for resource leveling problem and solved it with some methods, such as BB . Gather et al. proposed exact methods for solving the resource leveling problem .
Some studies contain both exact and heuristic methods. Neumann and Zimmermann introduced three groups of objective functions for resource leveling problem [16, 17]. They proved that the issue of resource leveling with each studied objective function is NP-hard and proposed an exact and a heuristic procedure for the problem expressed in the paper. In their paper, BB and truncated BB procedures with and without resource limitations are discussed. Coughlan et al. presented a branch-and-price approach together with a new heuristic to solve resource leveling problem .
There are some works to solve resource leveling problem using heuristics. To solve resource leveling problem with general objective function and maximum time lags, Brinkmann and Neumann  and Neumann and Zimmermann  proposed heuristic methods upon priority rules. Savin et al. used neural network to solve resource leveling problem [21, 22]. Moder and Philips , Moder et al. , Harris [25, 26], and Takamoto et al.  presented heuristic procedures to solve resource leveling problem.
Preemption is an important factor in our daily projects and jobs. Stopping a job when the night comes, interrupting a course as the class time is out, putting the call on hold to answer someone else, drinking coffee while reading newspaper, and so forth are some examples of preemption in our life. By the aspect of preemption, there are three types of activities: activities which will be continued after preemption (preempt-resume type), activities which should be restarted after preemption (preempt-repeat type), and activities for which preemption is not allowed. Because of its role in our life, preemption has attracted some researchers to work on it using both exact methods and heuristics.
Several studies on RCPSP use exact methods to solve the problem. Demeulemeester and Herroelen proposed an optimal solution procedure for the preemptive resource constrained project scheduling problem to minimize the project makespan . The maximum number of preemptions for each activity was considered specific for the activity. A model and a BB algorithm were presented for solving the problem. Patterson et al.  developed a BB algorithm upon precedence tree, which was reviewed by Sprecher . Stinson et al. , Demeulemeester and Herroelen , Igelmund and Radermacher , and Reyck and Herroelen  studied BB procedures for the RCPSP with generalized precedence relations. Afshar-Nadjafi et al. have provided a branch and bound procedure for resource leveling problem in multimode RCPSP .
As an example for heuristics, Ballestín et al. studied preemption in project scheduling with resource constraints [36, 37]. They show that one preemption to be allowed for each activity creates a proper state and more than one preemption just increases computational time with a slight improvement in the final solution. In their model, the number of preemptions allowed for each activity is specific for the activity. Then, an evolutionary algorithm with a coding and a crossover operator for the model has been presented. Vanhoucke et al. investigate the effect of variable activity durations under fixed work content, the possibility of allowing activity preemption, the use of fast tracking on the total lead time, and the total resource utilization of resource constrained projects .
To the best of our knowledge, no research has studied the usefulness of preemption in resource leveling problem. In this paper, we study effectiveness of preemption in resource leveling problem. We consider the preempt-resume type of activities. Here, resources are considered renewable and constrained. We will propose a new model for the problem and a B&B procedure to schedule activities in order to achieve the most leveled project.
The rest of the paper will be as follows. In Section 2 we will introduce the new model for preemptive resource leveling problem. In Section 3, the proposed BB algorithm will be described for the problem. Finally, computational results will be represented in Section 4.
2. Problem Definition
In this paper, we are supposed to schedule activities with maximum preemptions allowed for each activity, with respect to resource leveling as the objective function. If preemption is justified for the activity, we will detect the proper period in which it occurs. In this paragraph, we will study the components of the model. In Section 2.1 we will study objective function. In Section 2.2 problem assumptions are stated. Constraints are described in Section 2.3. Parameters and variables are proposed in Section 2.4. Finally, we will get familiar with the model of the problem in Section 2.5.
2.1. Objective Function
Resource leveling problem determines a sequence for the activities of a project which will minimize the amount of variation. This issue is important in determining the optimal sequence of activities to minimize the level of hiring and firing workers or that of utilization and unemployment of machines. Leveling limited resources or unlimited resources prevents the excessive fluctuations of the resources and reduces their cost. The chosen objective function for this study is to level the cumulative amount of resources used in each moment to the former one. We consider the resource amount used in both the first day and the last day. If the project is finished a day before the deadline, the resource used in the last day is considered by the formula. But if it is finished on the deadline, we must add the consumption to the objective function.
2.2. Problem Assumptions
In the project scheduling problem, activities which use resources are intended. Finish-start relationships (FS) are the most commonly used. The activity on arc network can easily be converted to the activity on node network, so we use the second one. The assumptions of this problem are as follows.(i) The project involves activities, of which the initial and the final ones are dummies.(ii) The project is presented by an activity on node network.(iii) The number of resources is .(iv) General relations of activities are FS0.(v) Each activity can be preempted for at most times.(vi) Preemption is free of time and cost.(vii) Resources are renewable.
In RCPSP, activities should be scheduled so that the time constraints and resource constraints are respected. Obviously, the model should consider precedence relations between activities. Hence, the problem constraints of the model are considered as follows.(i) Maximum resource availability in each period is units.(ii) Project deadline is at the end of the period .(iii) Precedence relations should always be respected.
2.4. Variables and Parameters
In this model, we use these parameters and variables: : number of activities, : maximum availability of resource , : deadline of the project, : number of resources, : maximum number of preemptions, : requirement of activity to the resource type , : duration of activity , : the set of precedence relations between activities, : earliest start time of activity , : latest finish time of activity , : : : the set of activities which can be in progress at period :
Note that when you work on the job at period , gets the value one, but if the job is interrupted before and is not restarted yet, gets the zero one. Again, if the job is preempted just at period , then gets the value one. But if it is still interrupted at the next period, , gets zero. It is seen that and cannot get the value one, simultaneously.
2.5. The Proposed Model
The model proposed in this paper is as follows: subject to
Equation (2) presents an objective function that minimizes the resource utility period to period. Note that the objective function includes the resource used in the first day and the last one too. So, we should add the resource usage of the first day to the objective function. Again, if the project is finished on the deadline, we must add the amount of resources used in the day to the function. By restriction (3), the earliest start time of zero is assigned to the project (at least one activity is scheduled at the first day) and (4) guaranties that each activity is in progress for time units. Restriction (5) considers generalized precedence relations of activities (while the preceding activity is not completely scheduled, the predecessor will not be scheduled), while (6) stipulates the preemption constraints. Restriction (7) specifies the resource constraints and (8) has formulated the period in which preemption occurs for each activity. The variables are defined as integers in (9).
3. Branch and Bound Procedure
Here, a BB algorithm is proposed to solve the preemptive resource leveling problem. In Section 3.1 we will have some definitions used in the algorithm. In Section 3.2 calculation of the function value at each node is stated. Upper bound and dominance rules are considered in Sections 3.3 and 3.4. Finally, we will illustrate the algorithm with a numerical example in Section 3.5.
3.1. Definitions Used in the Algorithm
Some definitions used in the BB algorithm should be cleared. Here, we define “node,” “branch,” and “critical path” in the algorithm.
Node: in this algorithm, each node represents the activities scheduled at the current day.
Branch: here, a branch means a partial scheduling. Indeed, a branch contains activities which are scheduled from the first day up to now.
Here, when an activity has not been started, its critical path contains its duration. But when an activity has been started and is scheduled for a while, the critical path contains its remaining duration.
The algorithm presented in this paper is a depth-first one. The process of branching continues until all of the nodes are checked. In fact, in branching, all the activities which can be scheduled are checked (if the preceding activities are scheduled before and the activity has not been completed yet); nodes contain all combinations of these activities. For each node all the constraints (resource requirement and maximum preemption) are checked. If the constraints are satisfied, we will use the dominance rules. Searching all nodes, the process ends. Components of the algorithm are proposed as follows.
3.2. Calculating the Function Value at Each Node
Function value at each node is the total variance in resource utility from day to day (this amount includes the amount of resources used on the first day). It is notable that the final value of the objective function of a branch, which is returned at the end of the branch, applies the resource used in the last day of the project (the final node of the branch).
3.3. Upper Bound
At the first level, the upper bound is double the total amount of resource requirements of all activities. This amount will be achieved if all the activities are scheduled one by one without parallel execution with at least one-day break between them (Figure 1). So, in any feasible solution without a break, the function value will not be worse. Continuously, the objective function of the first feasible solution achieved is accepted to be the upper bound. Achieving a better solution, it will be considered as the upper bound.
3.4. Dominance Rules
As mentioned before, the dominance rules are needed to close branches without a better solution, but they should not remove a promising solution. Only the branches with nonoptimal or unfeasible solution shall be discontinued at the earliest time possible. For all the nodes, resource and preemption constraints are checked. If the constraints are satisfied, then the dominance rules will be used; if not, we will continue with another node. Now, the rules for this algorithm are as follows.(a) If the cumulative time of the current node and the critical path of activities scheduled in the node (maximum critical path of the activities) exceed the deadline of the project, the node is interrupted. For example, if in second day of a project, an activity with a four-day-long critical path is scheduled and the deadline is five, then the branch is interrupted. Without the rule you will continue branching and it will be finished at the fifth day instead of the second.(b) Obviously, if in the current node there is an activity for which more than preemption occurred, the node is bounded.(c) If the cumulative amount of the objective function at a node and the resource used at the node exceed the upper bound, the node is interrupted. As an example, when the upper bound is six units, a node by objective function amount of four units that uses three units of the resource exceeds the upper bound (), so it is interrupted.(d) It is obviously seen that if the resource utility and the objective function of the current node and a node in a different branch are the same and if the activities scheduled in the current branch are a subset of the others, the current branch will not lead to a better solution. So, the current node will be interrupted and will not be continued. As an example, consider a branch that has scheduled at least a part of activities with objective function of five units and resource utility of 4 units in the node . Now, suppose that the current node () has scheduled at least a part of activities with objective function of five units and resource utility of 4 units. Then the node is not better than node and will not be continued.
3.5. Numerical Example
Here, to better understand the proposed algorithm, an example is given. For this purpose, we choose the project network as depicted in Figure 2. The numbers above the nodes show the activity durations and the numbers below show the amount of resources required for that activity. The first activity and the last one are dummy activities as shown in Figure 2.
Here, we assume that the amount of available resources is 6 units and the project deadline is at the end of the fifth day. The first upper bound is 22: .
The first node of the branch and bound procedure puts up activity 1. In Level 2, activities 2 and 3 have the ability to be scheduled; three nodes are created: put up activity 2 alone, activity 3 alone, or both 2 and 3. The proposed algorithm selects the first node and the branching continues. This process is also repeated for the second day. On day 4 only activity 3 can be scheduled. But then the project will be done in 6 days. So, the first rule closes the branch (node 8). Then node 6 is selected. But using the fourth rule, it is bounded by node 8. Branching continues from node 7. A solution is achieved at node 11. So, the new upper bound is 12 (7 + 5). The last nodes are, respectively, interrupted nodes 6 and 7 by the fourth rule. The only solution achieved is the optimal one (Figure 3).
4. Computational Results
The branch and bound algorithm of Section 3 has been coded in MATLAB version 22.214.171.1249 (R2010a). We have tested the algorithm on a computer with an Intel Core 2 Duo processor 4 GB Ram. We have used PROGEN as the problem generator. The deadline of each project is considered the critical path plus 20% of it. We have tested the algorithm for projects with 8 and 10 activities. For each group 50 examples are tested simultaneously in both problems: resource leveling problem and preemptive resource leveling problem. For easier computation, we have considered one resource and maximum one preemption for each activity. Considering 8 activities, resource leveling problem could not find a solution for 8 examples. And, considering 10 activities, it could not find a solution for 13 examples. So, comparing the results with those of nonpreemptive resource leveling problem, we notice 35% improvement in number of solved problems with 10 activities (a scheduling is returned for 37 projects in resource leveling problem and for 50 projects in preemptive resource leveling problem) and 19% improvement in number of solved problems with 8 activities (a scheduling is returned for 42 projects in resource leveling problem and for 50 projects in preemptive resource leveling problem) (Table 1). By the solved problem, we mean the program has found a solution which is finished on time, or maybe in time, with respect to constraints. In fact, see Table 1.
Table 2 contains computational results. As seen in the table, for projects with 8 activities in resource leveling problem, an average objective function of 26.14 is gained with a deviation of 4.03. These results are reached in an average computational time of 0.52 seconds with a deviation of 1.00 seconds. For projects with 10 activities in resource leveling problem, the average objective function is 29.46 with a deviation of 4.80. Here, the average computational time achieved is 6.09 seconds with a deviation of 7.22 seconds. In preemptive resource leveling problem, for projects with 8 activities, an average objective function of 24.21 with a deviation of 3.16 seconds is gained, with an average computational time of 3.00 seconds with deviation of 4.88 seconds. Finally, in preemptive resource leveling problem, for projects with 10 activities, the average objective function reached is 26.16 with a deviation of 4.77. Computational time has the average of 16.03 seconds with a deviation of 18.27 seconds. Because of recursion limit of 500 in MATLAB, more than 10 activities in a project could not be done for most of the time.
The results verify the improvement of optimal solutions obtained; when preemption is applied into the time it is not allowed. With the increasing number of activities, time to solve the problem dramatically increased. To compare the results, each rule is excluded in all the examples. Comparing the nonpromising branches bounded with rules, their efficiency is checked. Efficiency of the dominance rules is reported in Table 3. Results show that bounding rule is more efficient for problems with 8 activities, whereas bounding rule is more efficient for problems with 10 activities. Also, none of the rules are useless.
The algorithm presented by Neumann and Zimmermann solved resource constrained resource leveling problem instants with 15 activities in less than 10 seconds and 99.2 of them in less than 100 seconds . For 10 activities, it solved 98.0 of the instants in less than 10 seconds. As reported, our algorithm solved the problem in the average of 6.09 seconds. Also, our algorithm, taking into account the preemptions, is preferable.
In this paper, we proposed a model for preemptive resource leveling problem. The objective of the problem is to minimize the variance in resource utilization, as is traditional for the resource leveling problem. We defined a limited maximum number of preemptions per activity, as one of the model constraints. A branch and bound algorithm is represented to solve the problem. Finally, the program is used for solving the problem, with and without allowance of preemption. It is obvious that considering preemption leads to a better value for the objective function but this solution is reached in more time.
The comparison results showed that the proposed branch and bound algorithm is competitive with the algorithm presented by Neumann and Zimmermann to solve resource constrained resource leveling problem without preemption .
For future research, metaheuristic algorithms can be used as a method to solve the problem with large scales problems. Also, one can consider nonrenewable resources and generalized precedence relations (GPRs) to tackle real-life situations. The results of this work have two fundamental usages. First, it can be used as benchmark for comparison with future developed methods, especially metaheuristics. Second, the solutions obtained from proposed method can be used by project managers looking for more leveled schedule using the opportunity of preemption.
- A. A. B. Pritsker, L. J. Watters, and P. M. Wolfe, “Multi-project scheduling with limited resources: a zero-one programming approach,” Management Science, vol. 16, no. 1, pp. 93–108, 1969.
- L. A. Kaplan, Resource-constrained project scheduling with preemption of jobs [Ph.D. thesis], University of Michigan, 1988.
- R. A.-V. Olaguíbel and J. T. Goerlich, “The project scheduling polyhedron: dimension, facets and lifting theorems,” European Journal of Operational Research, vol. 67, no. 2, pp. 204–220, 1993.
- R. Klein and A. Scholl, “Computing lower bounds by destructive improvement: an application to resource-constrained project scheduling,” European Journal of Operational Research, vol. 112, no. 2, pp. 322–346, 1999.
- J. Blazewicz, J. K. Lenstra, and A. H. G. R. Kan, “Scheduling subject to resource constraints: classification and complexity,” Discrete Applied Mathematics, vol. 5, no. 1, pp. 11–24, 1983.
- A. Kastor and K. Sirakoulis, “The effectiveness of resource levelling tools for Resource Constraint Project Scheduling Problem,” International Journal of Project Management, vol. 27, no. 5, pp. 493–500, 2009.
- L. V. Tavares, “A review of the contribution of Operational Research to Project Management,” European Journal of Operational Research, vol. 136, no. 1, pp. 1–18, 2002.
- H. N. Ahuja, Construction Performance Control By Networks, John Wiley & Sons, 1976.
- S. M. Easa, “RL in construction by optimization,” Journal of Construction Engineering and Management, vol. 115, pp. 302–316, 1989.
- M. Bandelloni, M. Tucci, and R. Rinaldi, “Optimal resource leveling using non-serial dyanamic programming,” European Journal of Operational Research, vol. 78, no. 2, pp. 162–177, 1994.
- E. Demeulemeester, “Minimizing resource availability costs in time-limited project networks,” Management Science, vol. 41, pp. 1590–1598, 1995.
- M. A. Younis and B. Saad, “Optimal resource leveling of multi-resource projects,” Computers and Industrial Engineering, vol. 31, no. 1-2, pp. 1–4, 1996.
- H. Nübel, “A branch-and-bound procedure for the resource investment problem with generalized precedence constraints,” Tech. Rep. WIOR-516, 1998.
- E. Demeulemeester and W. Herroelen, Project Scheduling A Research Handbook, 2002.
- T. Gather, J. Zimmermann, and J.-H. Bartels, “Exact methods for the resource levelling problem,” Journal of Scheduling, vol. 14, no. 6, pp. 557–569, 2011.
- K. Neumann and J. Zimmermann, “Heuristic methods for resource-constrained project scheduling with regular and non-regular objective functions and schedule-dependent time windows,” in Project Scheduling: Recent Models, Algorithms, and Applications, J. Weglarz, Ed., pp. 261–287, Kluwer Academic Publishers, Boston, Mass, USA, 1999.
- K. Neumann and J. Zimmermann, “Procedures for resource leveling and net present value problems in project scheduling with general temporal and resource constraints,” European Journal of Operational Research, vol. 127, no. 2, pp. 425–443, 2000.
- E. Coughlan, M. Lübbecke, and J. Schulz, “A branch-and-price algorithm for multi-mode resource leveling,” in Experimental Algorithms, vol. 6049 of Lecture Notes in Computer Science, pp. 226–238, 2010.
- K. Brinkmann and K. Neumann, “Heuristic procedures for resource-constrained project scheduling with minimal and maximal time lags: the resource-leveling and minimum project duration problems,” Journal of Decision Systems, vol. 5, pp. 129–155, 1996.
- K. Neumann and J. Zimmermann, “Resource levelling for projects with schedule-dependent time windows,” European Journal of Operational Research, vol. 117, no. 3, pp. 591–605, 1999.
- D. Savin, S. Alkass, and P. Fazio, “Construction resource leveling using neural networks,” Canadian Journal of Civil Engineering, vol. 23, no. 4, pp. 917–925, 1996.
- D. Savin, S. Alkass, and P. Fazio, “A procedure for calculating the weight-matrix of a neural network for resource leveling,” Advances in Engineering Software, vol. 28, no. 5, pp. 277–283, 1997.
- J. J. Moder and C. R. Phillips, Project Management with CPM and PERT, Van Nostrand Reinhold, 1970.
- J. J. Moder, C. R. Phillips, and E. W. Davis, Project Management With CPM, PERT and Project Diagramming, Van Nostrand Reinhold, 1983.
- R. B. Harris, Precedence and Arrow Networking Techniques for Construction, John Wiley & Sons, 1978.
- R. B. Harris, “Packing method for resource leveling (pack),” Journal of Construction Engineering and Management, vol. 116, no. 2, pp. 331–350, 1990.
- M. Takamoto, N. Yamada, Y. Kobayashi, H. Nonaka, and S. Okoshi, “Zero-one quadratic programming algorithm for resource leveling of manufacturing process schedules,” Systems and Computers in Japan, vol. 26, no. 10, pp. 68–76, 1995.
- E. L. Demeulemeester and W. S. Herroelen, “An efficient optimal solution procedure for the preemptive resource-constrained project scheduling problem,” European Journal of Operational Research, vol. 90, no. 2, pp. 334–348, 1996.
- J. H. Patterson, R. Slowinski, F. B. Talbot, and J. Weglarz, “An algorithm for a general class of precedence and resource constrained scheduling problems,” Advances in Project Scheduling, vol. 187, pp. 3–28, 1989.
- A. Sprecher, Resource-Constrained Project Scheduling—Exact Methods For the Multi-Mode Case, Lecture Notes in Economics and Mathematical Systems, 1994.
- J. P. Stinson, E. W. Davis, and B. M. Khumawala, “Multiple resource-constrained scheduling using branch-and-bound,” AIIE Trans, vol. 10, no. 3, pp. 252–259, 1978.
- E. Demeulemeester and W. S. Herroelen, “A branch-and-bound procedure for the multiple resource-constrained project scheduling problem,” Management Science, vol. 38, pp. 1803–1818, 1992.
- G. Igelmund and F. J. Radermacher, “Preselective strategies for the optimization of stochastic project networks under resource constraints,” Networks, vol. 13, no. 1, pp. 1–28, 1983.
- B. De Reyck and W. Herroelen, “A branch-and-bound procedure for the resource-constrained project scheduling problem with generalized precedence relations,” European Journal of Operational Research, vol. 111, no. 1, pp. 152–174, 1998.
- B. Afshar-Nadjafi, H. Najjarbashi, and E. Mehdizadeh, “A branch-and-bound procedure for RL in multi-mode resource constraint project scheduling problem,” Research Journal of Recent Sciences, vol. 1, no. 7, pp. 33–38, 2012.
- F. Ballestín, V. Valls, and S. Quintanilla, “Pre-emption in resource-constrained project scheduling,” European Journal of Operational Research, vol. 189, no. 3, pp. 1136–1152, 2008.
- F. Ballestín, V. Valls, and S. Quintanilla, “Scheduling projects with limited number of preemptions,” Computers and Operations Research, vol. 36, no. 11, pp. 2913–2925, 2009.
- M. Vanhoucke and D. Debels, “The impact of various activity assumptions on the lead time and resource utilization of resource-constrained projects,” Computers and Industrial Engineering, vol. 54, no. 1, pp. 140–154, 2008.