I'm using Optaplanner as the engine under the covers, which is open source and off the shelf.
https://www.optaplanner.org/