# Composing Multiple Online Exams: The Bees Algorithm Solution
## 4 Experimental Design and Results  
To evaluate the performance of the proposed algorithm, we utilized two datasets obtained from references [2; 15]. These datasets are outlined in Table 1. The first dataset, the small question bank (small QB) consists of 1000 questions with varying difficulty levels, distributed across 14 chapters. The second dataset, the large question bank (large QB) consists of 12,000 questions with diverse difficulty levels across 12 chapters. To run the algorithm, the educator needs to provide several parameters, including the number of desired exams (\(m\)), the difficulty level requirement for each exam (\(DLR\)), the desired chapters (\(Ch1\), \(Ch2\), \(\ldots\)\(Chc\)) for each exam, and the number of questions covering each selected chapter (\(Qn1\), \(Qn2\), \(\ldots\)\(Qnc\)). Additionally, there are other parameters specific to our Bee Algorithm (BA) that need to be specified, such as the number of scout bees (initial population size) (\(s\)), the number of best solutions from the \(m\) exams (\(e\)), the neighborhood (patch) size for both \(e\) and \(m\)-\(e\), and the maximum allowed overlap percentage between generated tests. We conducted a parameterized test, exploring different values for these parameters to determine the optimal configuration for our algorithm. The performance criterion considered was that the quality of each exam, as measured by the fitness function, should have a margin of error no greater than 0.0001 [2]. We also introduced additional measures to handle the trade-off between fitness value and runtime. If the algorithm fails to produce \(m\) exams with a fitness value within the range of [0, 0.0001] within the allocated time, the margin of error is increased to 0.15. The resulting exams should not exceed a maximum overlap percentage of 0.3, as assumed in reference [2]. Initially, the algorithm prioritizes the fitness value, which is based on the difficulty of the exam. The algorithm keeps track of its solutions and saves the overall best solutions. Once an acceptable fitness value is achieved, the algorithm shifts its focus towards improving the overlap percentage. If the overlap percentage does not improve over five iterations, the algorithm terminates and outputs its best solution. We implemented the proposed approach using Python 3.6.12 in the Colab environment, leveraging several libraries that support machine learning algorithms. To evaluate the effectiveness of the proposed approach, we conducted a comparative analysis with four other algorithms: Parallel Migration PSO (PMPSO) [2], sequential PSO (SPSO) [2], the random algorithm (RA) [14], and the Simulated Annealing (SA) [9] algorithm. The results of these four methods were documented in reference [2]. The performance measurements used for evaluation were the quality of the solution and the standard deviation. Multiple runs of each algorithm were performed to obtain robust results. It is important to note that the population size and difficulty level requirement (\(DLR\)) were kept consistent across all algorithms in this comparison. However, the size of the question bank was varied to evaluate the algorithms' performance across different search space sizes (i.e., different datasets). The objective function computed the quality of the solution, with a decreasing fitness function indicating an improved solution. The fitness value of each test was measured to assess the quality of the results. The standard deviation served as a measure of the generated exam's proximity to the desired difficulty level (\(DLR\)). It acted as an indicator of the algorithm's stability or robustness [2]. To evaluate the stability of the algorithm, we measured the standard deviation across multiple \(DLR\)s.  
Table 2 presents the parameters utilized in the conducted experiments. We performed two distinct experiments, each executed twice: once on the large question bank and once on the small question bank.