an objective function(e.g., the latest completion time of any job). Practical considerations introduced numerous extensions to this:  
* The processing time \(p_{i,j}\) of a job \(i\) may be dependent not only on the machine \(j\) where it is executed but also on any number of additional factors (including but not limited to: the previous job performed on machine \(j\) (setup times), degrading machine states or material properties). * Precedence or grouping constraints can restrict possible solutions to jobs being performed only in specific orders, in direct succession, in parallel, on explicitly the same or explicitly different machines. * Jobs sometimes may be terminated pre-emptively and either restarted or resumed at a later point in time with varying degrees of penalties and restrictions. * Machines may be unique or identical, with some machines accepting more or other jobs than others. * Both jobs and machines might require idle time for transportation, machine setups, maintenance or quality control. * Timings might not be fully known in advance, transforming the problem from a deterministic to a _stochastic_ variant. * Jobs may have release or due times, further restricting the space of potential solutions, while machines might be only operational during certain time windows. In the static formulation of the problem, all problem parameters are known a priori, the problem is solved once (often heuristically) and the best-found solution is then implemented. A major extension to the static formulation includes _dynamic_ formulations, where a number of dynamic events can influence the optimization (e.g., the arrival of new jobs, machine delays or breakdowns, corrections of data that are going to influence constraints or predicted processing times, jobs might end in failure and might have to be restarted, etc.). Solution approaches to dynamic scheduling range from exact solvers, construction heuristics, learned or handcrafted dispatching rules and deep (reinforcement) learning to meta-heuristic solvers like neighborhood searches and evolutionary algorithms. [PERSON] et al. [6] provide a recent review of the different classes of such optimization approaches. One main class of approaches for this problem are variations of reinforcement learning [7; 8]. An extensive review of reinforcement learning approaches for dynamic task scheduling has been published by [PERSON] et al. [9]. The other popular field of research is (simulation-based) meta-heuristic algorithms, ranging from simple genetic algorithms [10] to more complex hybrid solutions [11], with a strong trend towards adaptive solutions in the recent years [12]. Another relevant distinction is not in the optimization algorithm but in how the dynamicity of the problem is handled. The purest of reactive approaches simply restarts the optimizer, which, despite its simplicity, can be a powerful strategy, especially when the machine times are very long compared to the time required by the optimizer to converge toward solutions of acceptable quality. Approaches more aware of the dynamic environment adapt existing solutions from previous problem configurations (a specific problem version and the time while it is valid are often referred to as an _epoch_[13]). Even more sophisticated setups use predictive models to anticipate some or all of the potential events produced by the dynamic problem. Anticipated events can then be used to quantify the _robustness_ of solutions, inform the objective function and the expected schedules associated with generated solutions or influence the hyperparameters of the solver itself--especially in self-aware systems. In recent years, the role of machine learning in scheduling applications has become more and more significant. An overview of such approaches can be found in various works published over the last three decades [14; 15; 16; 17; 18; 19]. Approaches using ML models in recent years, including strategies that utilize models in order to evaluate potential schedules, range from [PERSON] et al.