Research Article

# A Double Evolutionary Pool Memetic Algorithm for Examination Timetabling Problems

## Algorithm 1

The details of our proposed algorithm.
 Input: PopM: The population in the main evolutionary pool NM: The scale of population in the main evolutionary pool PopS: The population in the secondary evolutionary pool NS: The scale of population in the secondary evolutionary pool : The crossover probability in the main evolutionary pool : The mutation probability in the main evolutionary pool : The mutation probability for one single individual in the main evolutionary pool : The crossover probability for one single individual in the main evolutionary pool : The number of exchanged timeslots in the secondary evolutionary pool : The mutation probability for one single individual in the secondary evolutionary Pool IterMax: The maximum iteration number Itermax: The maximum iteration number for the local search operators Output: The best individual PopBest in the secondary evolutionary pool Step  1.  Initialization. Randomly create NM individuals in the main evolutionary pool according to what is described in Part B, which is denoted as PopM. Meanwhile, and . Step  2.  Crossover. Randomly select individuals in the main evolutionary pool and perform crossover operation described in Part 3.3. Step  3.  Mutate. Randomly select individuals in the main evolutionary pool and perform mutation operation PopM described in Part 3.4. Step  4.  Local optimization. For each individual through crossover and mutation operation, the special local search operator is performed according to what is described in Part 3.5. Step  5.  Selection. Select individuals from the main evolutionary pool to the secondary evolutionary pool. Once the individuals in the main evolutionary pool satisfy all hard constraints, all feasible individuals are put into the secondary evolutionary pool. Meanwhile, create some new individuals replacing those feasible ones in the population for the main evolutionary pool. Step  6.  Clone. Assume that the number of feasible individuals is NF. If , randomly select NS individuals from all feasible individuals. Otherwise, each feasible individual obtained from the main evolutionary pool is copied according to the following rules. The number of each feasible individual after clone is . And then combine original individuals in the secondary evolutionary pool with the cloned individuals. Select the best NS individuals as the population in the secondary evolutionary pool. Step  7.  Local optimization. After clone, the local search operator described in Part 3.6 is performed to make the feasible individuals satisfy more and more soft constraints. Step  8.  Selection. Select potential individuals in the secondary evolutionary pool according to (4). Keep the best individual in the current generation constant in the population in the secondary evolutionary pool. And then combine other individuals in the original secondary evolutionary pool with the best individual to form the population in the secondary evolutionary pool. Step  9.  , and go to Step  2. Step  10.  If Iter reaches IterMax output the best individual PopBest in the secondary evolutionary pool.