https://en.m.wikipedia.org/wiki/Combinatorial_optimization
Algos to solve those both exact methods and heuristics are super useful in real world applications, and very underappreciated by the HN crowd IMO.
https://en.m.wikipedia.org/wiki/Combinatorial_optimization
Algos to solve those both exact methods and heuristics are super useful in real world applications, and very underappreciated by the HN crowd IMO.
Have you been doing it by hand or using a big program?
- Based on conflict driven nogood learning, it has incredible performance (including good multithreading)
- It has different optimization and enumeration modes
- It has strong built-in heuristics, but also allows manual heuristics
- It allows incremental solving
- It has a nice API to integrate other solving paradigms (like difference logic and constraint programming, for which implementations already exist)
- There is a huge ecosystem around it
And much more, go check it out!So, in a couple projects I was involved we had to resort to manually constructed heuristics such as Simulated Annealing (SA) and Large Neighborhood Search (LNS).
A very cool large scale approach we resorted in some problems (eg. airline scheduling) was Column Generation[1]. Not only it solved in minutes what took hours in the MIP implementation, unlike SA and LNS it's and exact method that provide valid bounds to global optimality.
If you are in the HN crowd, the 'opposite' direction is useful:
Know that effective generic solvers exist for these problems (but don't worry about how they do it), and re-formulate many of the trickier problems you encounter in the languages of these solvers, instead of eg writing your own bespoke algorithm to assign tents at the company picnic.
There just aren't many situations where they're useful. Time scheduling, logistics, operations, there are only a handful of places where these problems are so important that they need to be solved optimally or nearly optimally.
>Time scheduling, logistics, operations...
Add marketing (pricing, assortment, ...) and finance (portfolio, captial budgeting, ...) to those.
And those are huge domains, moving trillions of USD globally each year. Many companies (think most of the Global 2000) benefit from a couple % improvement on their operations that lead to many $$ in savings.
I've used SAT solvers recreationally to try solve some mathematical combinatoricsish-like problems but interesting more down-to-earth applications have eluded me. I would love to dig deeper into this stuff.
https://www.gurobi.com/case_studies/
however, it's mixed-integer programming rather than SAT solvers/constraint programming, but similar in spirit.
Some recent literature reviews:
https://link.springer.com/article/10.1007/s11750-021-00594-1
Eg at Goldman Sachs I used mixed integer linear programming to reshuffle the assignments of particular departments' computing needs to specific data centres. Before I got my hands at this, people used to just do it manually and hadn't even realized this was something were you could optimize systematically and squeeze some efficiency out of.
If you have an eye for it, you can find similar opportunities in many areas of many companies. Assignment / scheduling is actually extremely common, if you can recognise it. It's also relatively easy to show an improvement that you can measure in dollars, which always goes over well with the business folks.