issue of instructors/teachers having various names and handling the surveys instructors fill out, especially when they use an old survey to fill out the current one.
Why do we need this? Scheduling is an NP-Hard problem. Depending on the size of the problem, finding an optimal solution is infeasible. Even if the problem is on the smaller side, it is not practical so manually schedule everything. Therefore, the java engine automates this process while adhering to buisness constraints, avoiding conflicts, and giving instructors their preferences.
The java engine uses multiple solving phases to accomplish this. It has three phases. The construction phase, local search, and local search. In that specific order. The first phase uses a construction heuristic build a feasible solution. Then the local search will use the meta heuristic simulated annealing to correct any hard constraints (things that can’t be violated) until we reach a non-negative hard score or time has run out. The third phase will run if and only if the first phase has successfully completed. This last phase use a combination of meta heuristics, mainly simulated annealing and tabu search, to further improve the solution quality by improving the medium and soft scores (basically preferences or schedule characteristics we prefer).
The engine also allows for different configuration the solver can have. Some are mutually exclusive. These configurations boil down to how we treat the prime time business constraint. In certain configurations, the solver engine will attempt to compress time into the given time interval.
To ensure instructors have their preference taken into account, their surveys should be stored in the backend and have the instructor linked teacher DB record marking them as faculty or not. Therefore, if the use of the api is chosen, the engine can read the survey DB records through the API endpoint.
The backend services are the support piece for the java engine. These services include a Django backend, PostgreSQL DB, and pgAdmin. The backend is setup to use JWT Authentication and role based access control (RBAC). Authentication is set globally. Therefore, if an api endpoint doesn’t want auth, it has to explicitly be set. Better for security.