## 4 Scheduling Algorithms  
In the following chapter, we introduce a novel multi-objective scheduling algorithm based on the skyline query for SMEs. To the best of our knowledge, this is the first study to formulate a scheduling algorithm using skyline queries. It should be noted that the proposed scheduling algorithm was developed under the assumption that most of the jobs in smaller enterprises are implemented by single machinery, and that the operation of the machinery is seldom interrupted. Furthermore, for the sake of simplicity, we assumed that each machine in the enterprise is equal with regard to operating efficiency. Figure 6 presents a flow chart of the proposed scheduling algorithm. For the sake of explanation, let us assume that there are \(n\) jobs and m machines (\(n>m\)) in this problem, and the maximum delay and the maximum flow time are our only concerns. The algorithm included a heap-based combination pool or the storage of all temporary schedules in the process and a skyline schedule list to store the results of the algorithm. The first step involves obtaining all possible schedules that each machine will be assigned the first job, to be evaluated based on the maximum delay time and maximum flow time. The example in Table 3 includes four jobs (a, b, c, and d) and three machines (A, B, and C). Figure 6: Chart of the proposed scheduling algorithm. The second step involves the creation of a heap-based combination pool, wherein all of the schedules obtained in step 2 are sorted in ascending order based on the summation of the maximum delay time and the maximum flow time. This sorting process is used to accelerate the execution speed of the algorithm, based on the fact that objects with a smaller summation value are more likely to be selected as the final result in a skyline query, and should therefore be examined first [14]. Using Table 3 as an example, we obtained the results in Table 4 with all of the schedules arranged according to the summation values of the maximum delay time and the maximum flow time. The third step of this algorithm involves a comparison of the first schedule in the combination pool with the schedules in the skyline schedule list. Each comparison can lead to five possible results. **(1) The schedule in question includes all of the jobs and is not dominated by any schedule in the skyline schedule list. ** In this case, the schedule is deemed a skyline schedule, as it is dominated by no other schedule. It is therefore added to the skyline schedule list, whereupon we return to the third step for further comparisons. **(2) The schedule in question includes all of the jobs and is dominated by a schedule in the skyline schedule list. ** In this case, the schedule is deemed not to be a skyline schedule, as it is dominated by other schedules. It is therefore immediately deleted from the combination pool, whereupon we return to the third step for further comparisons. **(3) The schedule in question does not include all of the jobs and is not dominated by any schedule in the skyline schedule list**. In this case, an extension of the schedule still could still be a skyline schedule. We therefore extend this schedule by adding new jobs and reinsert the extended schedule back into the combination pool, whereupon we return to the third step for further comparisons. Table 5 presents an example to illustrate this case. If the first schedule {A(a), B(b), C(c)} in the heap is not dominated by any schedule in the skyline list, then we should extend it as{A(a, d), B(b), C(c)}, {A(a), B(b, d), C(c)}, and {A(a), B(b), C(c, d)}. We then evaluate the summation of the maximum delay time and maximum flow time of each schedule and reinsert them back into the heap. Table 4 presents one possible result.