The docs even talk about optimal vs performance, here’s one that’s shorter, but there’s a time penalty.
There’s one setting where you specify “find the best solution in a given amount of time”
FirstSolutionStrategy can probably handle 10,000 to 100,000 points in under a second
LocalSearchMetaheuristic you have to set a time limit.
This library is available to other languages, if there’s a better set of instructions found, I can add them here
Here’s a shorter one, I had to let it run for a few seconds.