Types of Broken
Engines, like any system, may have bugs. This is normal and natural. But engines, especially heuristics that approximate optimal, have a difficult time around subjective complaints. The engine produces a 99.9% good solution. Yes, it’s missing the 0.1%, so it’s not perfect. Is this a reason to disregard the result, stop using the engine, or cancel a contract? Really?
For engines, we have a scale for broken.
Broken
No Solution
Crash
Infinite Run Time
Infeasible
Violates real-world constraints
Cannot drive a truck to two different locations at the same time
Undesirable
Obviously Suboptimal
Users of moderate experience can immediately see issues with no research
Suboptimal
Experienced users can export results, conduct deep analysis, and derive problems with solutions
Slow
Results are acceptable, but it takes longer than desired to get results
Desirable
Near perfect in a reasonable time
Within this scale, all users (and developers, quite frankly) want desirable results and only desirable results. But the reality of most optimizations is that this is not achievable in all scenarios. A Mixed Integer Program can get bottled up in the Branch and Bound algorithm. Dykstra’s algorithm can fail to find the optimal route.
The results from Slow are still good. The results from Suboptimal are not ridiculous. These are real and useful systems. If the user is experienced and knows how to work around the performance issue or knows what to look for in the suboptimal solution, the user can gain significant benefit from the system.
So while NEO strives for 100% Desirable results from all engines all the time, the truth is that slow and suboptimal are the reality for a wide range of scenarios.