Swarm Intelligence in Engineering 2014View this Special Issue
Research Article | Open Access
Minmei Huang, Jijun Yuan, Jing Xiao, "An Adapted Firefly Algorithm for Product Development Project Scheduling with Fuzzy Activity Duration", Mathematical Problems in Engineering, vol. 2015, Article ID 973291, 11 pages, 2015. https://doi.org/10.1155/2015/973291
An Adapted Firefly Algorithm for Product Development Project Scheduling with Fuzzy Activity Duration
Efficient scheduling plays an important role in product development project management, especially for the product development project with fuzzy activity times. In this research a trapezoidal fuzzy number is used to represent fuzzy activity duration, and an improved magnitude of the trapezoidal fuzzy number is adopted for fuzzy time comparison. Firstly, a mathematical model for the scheduling problem with minimizing the project completion time for the product development project is established. Then, an adapted fuzzy firefly algorithm is developed to solve the model. The priority value based coding method is used; the fuzzy parallel schedule generation scheme is adopted to generate feasible solutions, and the brightness comparisons are made before updating fireflies’ locations in the proposed algorithm. Finally, the performance of the proposed algorithm is presented by computational experiments based on PSPLIB benchmarks. An example of resource allocation of an electronic product development project is also used to illustrate the effectiveness and efficiency of the proposed algorithm.
Product development has become a source of competitive advantage for many industries in recent years . In order to bring the new product to the market as early as possible, it is essential to schedule product development project efficiently with the constraints of time, resources, and cost. Because of the uniqueness of new product development project and the influence of uncertainty, the precise prediction of activity duration is difficult. Thus the activity duration is always estimated by experts’ experiences and is usually imprecise. In resource constrained project scheduling problems (RCPSP), time parameters are considered to be deterministic. Thus traditional approaches for RCPSP cannot accommodate product development project in uncertain environment.
Some research has been performed on fuzzy resource constrained project scheduling problems. The methods in the literature can be grouped into two categories: the heuristic methods and the artificial intelligence based methods. For heuristic methods, traditional critical path method (CPM), plan evaluation, and review technique (PERT) were adopted to solve project scheduling problems with uncertain times without resource constraints [2, 3]. Hapke and Slowinski  extended the known priority heuristic method for solving RCPSP with fuzzy time parameters. Bhaskar et al.  proposed a heuristic method for resource constrained project scheduling problem with fuzzy activity times. The heuristic method was based on priority rule for parallel schedule generation scheme, and the proposed priority rule was called Schedule Performance Index (SPI). For artificial intelligence based methods, Wang  proposed the fuzzy beam search algorithm to determine a schedule with the minimum schedule risk, and the start time of each activity was selected to maximize the minimum satisfaction degrees of all temporal constraints. Wang  developed a genetic algorithm based on fuzzy set theory for uncertain product development projects. Ke and Liu  built three types of fuzzy models to solve the project scheduling problem with fuzzy activity duration and developed a hybrid intelligent algorithm to solve the fuzzy models.
The metaheuristics firefly algorithm (FA) inspired from intelligent social behavior of fireflies was recently presented by Yang . Firefly algorithm is one of the biology-derived algorithms and it was proved by Yang  that FA is more efficient than particle swarm algorithms when dealing with multimodal functions. The FA has also been applied successfully to nonlinear design problems , constrained continuous optimization tasks , permutation flowshop scheduling problems , and resource constrained project scheduling problems [13, 14]. Yuan  proposed a modified firefly algorithm to solve multiobjective constraint optimization problem, and the proposed method was applied to the optimization design of motor product family. Yang  developed a multiobjective firefly algorithm (MOFA) for continuous optimization, and Luna et al.  applied MOFA to the software project scheduling problem.
The objective of this research is to develop an effective method by adapting firefly algorithm to handle product development project scheduling problem with fuzzy activity duration times. The paper is organized as follows. In Section 2 fuzzy set theory is used to represent uncertain activity duration; the magnitude of trapezoidal fuzzy number is employed to rank the fuzzy time parameters, and then the mathematical model for the problem is described. Section 3 proposes the fuzzy firefly algorithm, which is based on priority value coding and parallel schedule generation scheme, and an example is used to illustrate the algorithm. Computational experiments on 30 benchmark datasets and an electronic product development project are conducted in Section 4. Finally, Section 5 concludes the paper, and the future research directions are proposed.
2. Problem Description
2.1. Definition on Fuzzy Activity Duration
For most product development projects, it is difficult to precisely give activity durations. Activity durations are often estimated by human experts and confronted with vague and imprecise judgmental statements . Therefore, fuzzy set theory can be used for estimating the activity times. A trapezoidal membership function can represent the most general form of a fuzzy number. We represent the activity duration with a trapezoidal fuzzy number in this paper.
Various definitions for the concept of fuzzy numbers are presented in literature. In this paper two of them are used for fuzzy activity duration.
Definition 1 (see ). A fuzzy activity duration is a fuzzy set like satisfying the following properties:(1) is upper semicontinuous;(2) if is outside of interval ;(3)there are real numbers , , , and such that and(i) is monotonic increasing on ;(ii) is monotonic decreasing on ;(iii), ;
and the membership function can be expressed as
A fuzzy activity duration represented by four real parameters , , , and can be written as and denoted by a trapezoidal (see Figure 1).
If two fuzzy activity durations are defined as and , respectively, then the following operations can be expressed as Addition: Subtraction: Maximum: Minimum:
Ma et al.  proposed another definition called fuzzy number in the parametric form.
Definition 2 (see ). A fuzzy activity duration is a pair of functions , which satisfy the following requirements:(1) is a bounded monotonic increasing left continuous function;(2) is a bounded monotonic decreasing left continuous function;(3).
The fuzzy trapezoidal number can be represented as , with left fuzziness and right fuzziness , and the membership function is presented as follows:and its parametric form is described as follows:and if then is a triangular fuzzy number, denoted by .
In this paper, Definition 1 is used to express fuzzy activity duration, while in scheduling procedure the fuzzy activity duration is transformed into parametric form by Definition 2 in order to compare the fuzzy times.
2.2. Comparison of Fuzzy Times
While solving product development project scheduling problems, it is required to compare fuzzy times to generate a feasible solution. For example, the start time of an activity must be greater than or equal to the maximum finish time of its predecessors. Many methods have been developed to rank fuzzy numbers. For example, Asady and Zendehnam  developed a method based on distance minimization. Abbasbandy and Hajjari  proposed a method for ranking the trapezoidal fuzzy numbers that can overcome some drawbacks of distance minimization, while there still exit shortcomings in their methods. In this paper an improved magnitude of the trapezoidal fuzzy number proposed by Ezzati et al.  is adopted, which is easy to handle and will overcome the above drawbacks.
Definition 3 (see ). For a trapezoidal fuzzy time with parametric form , we definewhere the weight function is nonnegative and increasing on with , , and . Function can be chosen according to the actual situation. In this paper we use .For any two trapezoidal fuzzy times and , the improved magnitude of the trapezoidal fuzzy time compared with is defined aswhereAnd the improved magnitude of the trapezoidal fuzzy time compared with is defined as . It is obvious that .
The ranking of these two fuzzy numbers can be defined as(1), if and only if ;(2), if and only if ;(3), if and only if .
Then we formulate: , if and only if or ; , if and only if or .
2.3. Problem Formulation
The product development project scheduling problem can be described as follows. A project can be split into activities. Because of the technological constraints, there are precedence constraints in activities. Different kinds of resources are required when performing activities. The resources are limited, so the project is resource constrained. We assume in this paper that activities in product development project are single modes; activity durations are represented by trapezoidal fuzzy numbers; preemption is not allowed; only renewable resources are considered. The objective is to minimize the project completion time (makespan). Notation section gives some notations which are used in this paper.
The product development project scheduling problem with fuzzy activity duration can be described as follows:
In the formulation, the objective function (11) minimizes the project fuzzy makespan. Equation (12) shows that the first activity must start at the project fuzzy ready time. Equation (13) calculates the fuzzy finish time for each activity . Constraint (14) represents that activity must follow the precedence relationships; that is, the fuzzy start time of activity should be greater than or equal to the fuzzy finish times of all its predecessors. Constraint (15) forces the total units of resource utilized to be no greater than the available resource capacity for every time period. Equation (16) represents that the fuzzy completion time (makespan) of product development project is the fuzzy start time of the dummy end activity.
3. Fuzzy Firefly Algorithm for Product Development Project Scheduling with Fuzzy Activity Duration
In the paper a firefly algorithm is adapted to solve the project scheduling problem. The classic firefly algorithm was developed by Yang [8–10], and it was based on the idealized behavior of the flashing characteristics of fireflies. The flashing characteristics can be idealized as follows.(1)All fireflies are unisex so that one firefly is attracted to other fireflies regardless of their sex.(2)Attractiveness is proportional to their brightness; thus for any two flashing fireflies, the less bright one will move towards the brighter one. The attractiveness and brightness of two fireflies decrease as distance between them increases. If no one is brighter than a particular firefly, it moves randomly.(3)The brightness or light intensity of a firefly is affected or determined by the landscape of the objective function to be optimized.
Let denote fireflies in the searching space. Vector denotes the location of firefly () in the population, and can be translated to a possible solution of the scheduling problem. In order to provide an activity sequence satisfying precedence relationships, priority value based real number coding method is employed to represent the firefly location. A firefly location is a priority value list with entries written as , where is the priority of activity . An example of priority value representation is shown in Table 1. Consider a project with six activities numbered from 1 to 6; the number in the position of the list represents the priority of activity . For example, the priority of activity 4 is 0.2. When decoding, the activity with greater priority value will be considered first.
Many researchers have concluded that the parallel schedule generation scheme gives generally better results than the serial schedule generation scheme . So in this paper parallel schedule generation scheme is adopted to generate feasible schedule from priority value list. For each firefly at location , the fuzzy parallel schedule generation scheme is described as follows.
Step 1 (initialization). The current fuzzy moment is set to , the set of activities scheduled by time is set to , and the temporal set that stores fuzzy time is set to .
Step 2. Compose a set of activities which have not been scheduled yet and whose immediate predecessors have been completed by time .
Step 3. Find activity who has the greatest priority value in the priority list , and for each time period from to , if the available renewable resources satisfy the requirements of activity , activity ’s fuzzy start time: , activity ’s fuzzy finish time: ; allocate required resources to activity , update resource availabilities; insert into set ; remove from ; insert into ; else, if resource availabilities cannot satisfy the requirements of , remove from .
Step 5. If the number of activities in set , go to Step 2; else a feasible schedule is obtained and fuzzy completion time for the project , stop.
Note that because the finish times of activities in are all fuzzy numbers, the fuzzy ranking method called improved magnitude of the trapezoidal fuzzy number described in Section 2.2 is used to select the smallest activity finish time in Step 4.
3.3. Brightness and Attractiveness
There are two important issues in the firefly algorithm about brightness and attractiveness. The attractiveness of a firefly is determined by its brightness. As for project scheduling, the objective is to minimize the project completion time. For a firefly at a particular location , if the objective function for the project decoded by fuzzy parallel schedule generation scheme described in Section 3.2 is greater than others, then the firefly is less bright. The brightness of a firefly at a particular location can be chosen as . Because the completion time is a fuzzy number, the magnitude of trapezoidal fuzzy number is used to represent the light intensity of firefly compared with firefly ; that is
The attractiveness varies depending on the distance between firefly and firefly . Light intensity decreases when the distance increases from its source, and light is also absorbed in the media. As a firefly’s attractiveness is proportional to the light intensity seen by adjacent fireflies, attractiveness function of a firefly can be a monotonically decreasing function presented aswhere is the distance between firefly and firefly , is the light absorption coefficient, and is the attractiveness at . We take , .
3.4. Distance and Movement
Two fireflies and at and can be decoded to two schedules with two fuzzy project completion times. The distance between these two fireflies cannot be represented directly by the Cartesian distance. We use the difference between the improved magnitudes of these two fuzzy completion times as the distance ; that is
If , firefly will be attracted by , the movement is determined bywhere vector is the new location after moving, the second term is determined by the attractiveness, the third term is randomization with the randomization parameter and a random number drawn uniformly from (0, 1).
If firefly at is the brightest in the population, then it will move randomly by
3.5. Algorithm Procedure
The procedure of fuzzy firefly algorithm for product development project with fuzzy activity duration is given in Figure 2, and described as follows.
Step 1 (initialization). Set ; generate initial population with the population size and the location of firefly is , .
Step 2 (decoding). For each firefly at location , use fuzzy parallel schedule generation scheme to generate a feasible schedule.
Step 4 (choosing the optimal solution). For the brightest firefly in the th generation, move randomly by (21).
Select the brighter position from and as the optimal solution of the present generation.
Step 6 (firefly moving). Every firefly is compared with all the other fireflies in the population except itself. That is, compare firefly with firefly , and , if , move firefly towards firefly by (20); update location of firefly after each movement.
Go to Step 2.
Step 7. The optimal solution is found; output the result and stop.
3.6. An Example
An example is used to illustrate the method developed in this paper. We consider a project which consists of nine activities and is represented by AON shown in Figure 3. The first and the last activities are dummy start and dummy end activities, respectively. Only one kind of renewable resource is considered in this example. The total availability of the resource is 5 units in every moment. The fuzzy project ready time is set to . The corresponding activity information is listed in Table 2.
There are three possible paths from the dummy start to the dummy end node. The paths and their lengths without resource constraints, respectively, are Path 1: 1-2-3-6-8-9, fuzzy path length: (22, 30, 39, 48); Path 2: 1-2-4-7-8-9, fuzzy path length: (24, 33, 41, 50); Path 3: 1-2-5-7-8-9, fuzzy path length: (25, 33, 41, 49).
Figure 4 shows the lengths of the paths. It is clear that Path 1 is the shortest. By the fuzzy ranking method proposed by Abbasbandy and Hajjari , the lengths of Path 2 and Path 3 are equal. However, it is evident from Figure 4 that the result is not reasonable. We use the improved magnitude of the trapezoidal fuzzy number, the magnitude of the two paths are the improved magnitude of path 2: ; the improved magnitude to path 3: .
As , , we know that path 2 is the critical path, and the project completion time without resource constraints is .
When resource constraints are considered, the fuzzy firefly algorithm is used to solve this problem. The population of fireflies is , set , the randomization parameter in (20) and (21) is set to . The fuzzy start times and finish times of each activity are listed in Table 3. It shows the project completion time is (31, 42, 52, 64). Figure 5 presents the fuzzy Gantt chart without dummy start and end activities. The resource usage profile for all lower bounds (optimistic case) of -level activity durations at is calculated and presented in Figure 6.
4. Computational Experiments
Two experiments are conducted. In the first experiment, we use the proposed method to solve benchmark problems and discuss the results. In the second experiment an electronic product development project scheduling problem proposed by Wang  is studied. The algorithm is coded in MATLAB7.8.
4.1. Numerical Experiments and Results
In order to test the proposed fuzzy firefly algorithm, we have taken 30 datasets from PSPLIB  and generated instances with fuzzy activity duration. The 10 instances are chosen from benchmark j301, 10 from j302, and 10 from j601, respectively. As the activity duration of benchmarks in PSPLIB is deterministic, we use the following method to generate fuzzy activity duration. The deterministic duration can be denoted by , the fuzzy activity duration is denoted by , the method to generate fuzzy activity times is as follows:
Equation (22) sets , that is the pessimistic case of -level activity duration when . Equations (23) and (24) show that and are randomly generated from the interval . The floor function is used to generate an integer for , and the lower value is bounded by 1. The ceiling function is used to generate an integer for , and . is randomly generated from the interval and the ceiling function is used to generate an integer for the pessimistic estimation as shown in (25).
Though the optimal solutions for problem datasets j301 and j302 are known and the lower bounds of j601 problems are also given in PSPLIB, they are solutions for problems with deterministic activity duration. We calculate the critical path lower bounds for problems with fuzzy activity duration without considering resource constraints, denoted by . The solution obtained by our proposed method is compared with , the difference from lower bound is denoted by and computed as follows:where and are the improved magnitudes of the project makespan and the critical path lower bound, respectively.
In this paper the parameters for performing fuzzy firefly algorithm were set as follows: population size , maximum iteration , and the randomization parameter . The computational results are shown in Table 4.
The numbers in column two show the optimal solutions for j30 problems and lower bounds for j60 problems with deterministic activity duration. The third column represents the critical path lower bounds for the problems with trapezoidal fuzzy activity duration. The fourth column represents the best solutions obtained by the proposed fuzzy firefly algorithm. It shows that the third number of the best solution for eleven problems (1, 4, 10, 11, 12, 13, 14, 15, 16, 17, 26) is the same as the optimal solution. For problems 7, 8, 13, 15, 16, 17, and 21, the third number of the critical path lower bounds is the same as optimal solution, which means the resource constraints for these problems are not binding . Our method gains the optimal solutions for problems 13, 15, 16, 17. The fifth column represents the deviations of the best solution from the critical path lower bound. The deviations of the 4 problems discussed above are zeros. The deviations for other problems vary between 1.0833 and 17.3333. It also indicates that the deviation is greater when there are more activities in a project, because the difficulty of solving j60 is greater than that of j30.
4.2. The Experiment on Electronic Product Development Project
Wang  provides an electronic product development project, which consists of 7 phases and is divided into 51 activities. We add dummy start and end activities to the project, and the information of this project is shown in Table 5. The project ready time is . There are 4 types of resources: system engineers, software engineers, hardware engineers, and supporting engineers. The resource availability of each type of resource is 5, 4, 5, 4, respectively.
The proposed fuzzy firefly algorithm is used to solve the electronic product development project. The project makespan obtained by the proposed method is (178, 235, 235, 288), and the fuzzy finish times for the solutions are shown in Table 6. Figure 7 shows the resource usage for every type of resource. The utilization rates for system engineers, software engineers, hardware engineers, and supporting engineers are 69.4%, 41.1%, 56.3%, and 51.7%, respectively. Wang’s results show that the project makespan is (180, 239, 239, 294), and the resource utilization rates are 0.69, 0.33, 0.56, and 0.51 . The comparison shows that our method can improve the resource utilization rate of software engineers and finish the project earlier. When considering the allocation of more resources to help complete the project earlier, Wang  provides 12 schedules under distinct resource availability. Table 7 shows that our results have the same effect with 3 of the schedules proposed by Wang, which illustrates that our method can allocate resource more effectively, and shorten the makespan without adding more resources to the project.
(a) Resource usage for system engineers
(b) Resource usage for software engineers
(c) Resource usage for hardware engineers
(d) Resource usage for supporting engineers
This paper concentrates on the problem of product development project scheduling with fuzzy activity duration. Trapezoidal fuzzy numbers are used to represent the uncertain time parameters; mathematical model for the problem is established, and the fuzzy firefly algorithm is proposed. For the proposed method the improved magnitude of the trapezoidal fuzzy number is adopted in 4 circumstances: deciding the fuzzy start times of activities, representing firefly brightness, calculating the distances between fireflies, and comparing optimal solutions. Computational experiment results indicate that the proposed fuzzy firefly algorithm is helpful for managers to effectively allocate resources with the objective of minimizing project makespan. The future research will extend the fuzzy firefly algorithm to handle multiobjective product development project scheduling problems in an uncertain environment.
|:||Activity number of the product development project, , where the first activity and the last activity are the dummy start and dummy end activities, respectively|
|:||The set of successors of activity|
|:||The set of predecessors of activity|
|:||Fuzzy duration of activity represented by a trapezoidal fuzzy number|
|:||Types of renewable resources|
|The total number of available renewable resources of type ,|
|The number of renewable resources of typerequired per unit time over the duration of the activity , ,|
|:||The fuzzy ready time of project|
|:||The fuzzy start time of activity|
|:||The fuzzy finish time of activity|
|The set of activities which are performed at current fuzzy time moment|
|:||The fuzzy completion time of the product development project.|
Conflict of Interests
The authors declare that there is no conflict of interests regarding the publication of this paper.
Aids from the National Natural Science Foundation of China under Grant nos. 71102146, 71272084, and 61202296, and the Humanities and Social Science Foundation of Ministry of Education of the People’s Republic of China under Grant no. 12YJC630278 are gratefully acknowledged. The authors thank the reviewers for their helpful advices to improve this paper.
- J. Wang, “A fuzzy project scheduling approach to minimize schedule risk for product development,” Fuzzy Sets and Systems, vol. 127, no. 2, pp. 99–116, 2002.
- S. H. Nasution, “Fuzzy critical path method,” IEEE Transactions on Systems, Man and Cybernetics, vol. 24, no. 1, pp. 48–57, 1994.
- F. A. Lootsma, “Stochastic and fuzzy Pert,” European Journal of Operational Research, vol. 43, no. 2, pp. 174–183, 1989.
- M. Hapke and R. Slowinski, “Fuzzy priority heuristics for project scheduling,” Fuzzy Sets and Systems, vol. 83, no. 3, pp. 291–299, 1996.
- T. Bhaskar, M. N. Pal, and A. K. Pal, “A heuristic method for RCPSP with fuzzy activity times,” European Journal of Operational Research, vol. 208, no. 1, pp. 57–66, 2011.
- J. Wang, “A fuzzy robust scheduling approach for product development projects,” European Journal of Operational Research, vol. 152, no. 1, pp. 180–194, 2004.
- H. Ke and B. Liu, “Fuzzy project scheduling problem and its hybrid intelligent algorithm,” Applied Mathematical Modelling, vol. 34, no. 2, pp. 301–308, 2010.
- X. S. Yang, Nature-Inspired Metaheuristic Algorithms, Luniver Press, Frome, UK, 2008.
- X. S. Yang, “Firefly algorithm for multimodal optimization,” in Stochastic Algorithms: Foundations and Applications, vol. 5792 of Lecture Notes in Computer Science, pp. 169–178, Springer, Berlin, Germany, 2009.
- X.-S. Yang, “Firefly algorithm, stochastic test functions and design optimization,” International Journal of Bio-Inspired Computation, vol. 2, no. 2, pp. 78–84, 2010.
- S. Łukasik and S. Zak, “Firefly algorithm for continuous constrained optimization tasks,” Lecture Notes in Computer Science (including subseries Lecture Notes in Artificial Intelligence and Lecture Notes in Bioinformatics), vol. 5796, pp. 97–106, 2009.
- M. K. Sayadi, R. Ramezanian, and N. Ghaffari-Nasab, “A discrete firefly meta-heuristic with local search for makespan minimization in permutation flow shop scheduling problems,” International Journal of Industrial Engineering Computations, vol. 1, no. 1, pp. 1–10, 2010.
- P. Sanaei, R. Akbari, V. Zeighami, and S. Shams, “Using firefly algorithm to solve resource constrained project scheduling problem,” Advances in Intelligent Systems and Computing, vol. 201, no. 1, pp. 417–428, 2013.
- M. M. Huang, J. J. Yuan, and Y. Xue, “A hybrid firefly algorithm for resource-constrained project scheduling problem,” in Proceedings of International Conference on Computer and Management (CAMMAN '12), Wuhan, China, March 2012.
- J.-J. Yuan, “Optimal design for scale-based product family based on multi-objective firefly algorithm,” Computer Integrated Manufacturing Systems, vol. 18, no. 8, pp. 1801–1809, 2012 (Chinese).
- X. S. Yang, “Multiobjective firefly algorithm for continuous optimization,” Engineering with Computers, vol. 29, no. 2, pp. 175–184, 2013.
- F. Luna, D. L. González-Álvarez, F. Chicano, and M. A. Vega-Rodríguez, “The software project scheduling problem: a scalability analysis of multi-objective metaheuristics,” Applied Soft Computing Journal, vol. 15, pp. 136–148, 2014.
- D. Dubois and H. Prade, “Towards fuzzy differential calculus part 3: differentiation,” Fuzzy Sets and Systems, vol. 8, no. 3, pp. 225–233, 1982.
- M. Ma, M. Friedman, and A. Kandel, “A new fuzzy arithmetic,” Fuzzy Sets and Systems, vol. 108, no. 1, pp. 83–90, 1999.
- B. Asady and A. Zendehnam, “Ranking fuzzy numbers by distance minimization,” Applied Mathematical Modelling, vol. 31, no. 11, pp. 2589–2598, 2007.
- S. Abbasbandy and T. Hajjari, “A new approach for ranking of trapezoidal fuzzy numbers,” Computers & Mathematics with Applications, vol. 57, no. 3, pp. 413–419, 2009.
- R. Ezzati, T. Allahviranloo, S. Khezerloo, and M. Khezerloo, “An approach for ranking of fuzzy numbers,” Expert Systems with Applications, vol. 39, no. 1, pp. 690–695, 2012.
- R. Kolisch and A. Sprecher, “PSPLIB—a project scheduling problem library,” European Journal of Operational Research, vol. 96, no. 1, pp. 205–216, 1997.
Copyright © 2015 Minmei Huang 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.