-
Notifications
You must be signed in to change notification settings - Fork 3
HybridConferenceScheduler
This code demonstrates the hybridization of multiple AI techniques by creating a solution that iteratively applies a combinatorial optimization engine. Different results are obtained by varying the methods of applying the constraints in that model. In addition, the iterative process is, in the final demo, used to identify what the shortcomings in the final product are, and why they are necessary.
These demos use the Conference Scheduler AI project to build a valid schedule.
Note: The sample data in these demos is very loosely based on SoCalCodeCamp San Diego from the summer of 2017. While some of the presenters names and presentations come roughly from the publicly available schedule, pretty much everything else has been fictionalized to make for a compelling demo, including the appearances by some Microsoft rock stars, and the "requests" of the various presenters.
Basic Examples (BasicExamplesDemo.cs)
The 1st method in BasicExamplesDemo.cs shows the solution when only the hardest of constraints are excluded. That is, the only features of the schedule that are considered by the scheduler are those that are absolute must-haves.
The 2nd method in BasicExamplesDemo.cs shows the solution when all constraints are considered must-haves. That is, the only schedules that will be considered for our conference are those that meet all of the scheduling criteria. As you might imagine, this can be difficult to do, in this case resulting in No Feasible Solution being found.
The 3rd method in BasicExamplesDemo.cs shows the solution when the true must-haves are considered hard constraints but preferences are not. The AI attempts to optimize the solution by satisfying as many of the soft constraints (preferences) as possible. This results in an imperfect, but possibly best case schedule, but one where we have little insight as to what preferences were not satisfied, and almost no insight as to why.
Iteratively Adding Constraints (AddConstraintsDemo.cs)
The final demo, and the only method in AddConstraintsDemo.cs, builds on the 3rd demo, where the true must-haves are considered hard constraints but preferences are not. Here however, instead of attempting to optimize the soft constraints,the AI iteratively adds the preferences as hard constraints, each time re-executing the solution to make sure the problem has not, with the addition of that constraint, become infeasible. If the solution has become infeasible, that fact is recorded along with what was being attempted. Then that constraint is removed and the process continues with the remaining constraints. This Hybrid process still results in an imperfect, but best-case schedule. This time however, we not only know what preferences could not be satisfied, we have a good idea as to why.
Note: The order in which these constraints are added here is important since constraining the solution in one way may limit the feasibility of the solution for future constraints.