anchor.diff:  Cloning either is too expensive.
   To evaluate a move on a move thread, with incremental score calculation,
   we must reuse the score calculator of the previous evaluation.
  -This implies that the solution state must be in the exact same state to begin with.
  -But because the outer step iterations change the solution state permanently,
  +This implies that the working solution must be in the exact same state to begin with.
  +But because the outer step iterations change the solution state constantly,
   the move threads must sync up with the main solver thread after every step.
   
   It's kinda like a multiplayer game of StarCraft.
  
positive.code: ** Doesn't do horizontal scaling on 1 dataset.
  
  * *Multi bet solving*: Solve one dataset in multiple ways, completely independent of each other. Take the best result.
  ** Works since the first OptaPlanner version
  ** It's usually a waste of resources: use the Benchmarker during development instead to find the best algorithm in advance.
  ** Doesn't scale horizontally: the best result is marginally better than a single-threaded result and takes equally long.
  
  
negative.code: 
  Let's take a look at the requirements for multithreaded incremental solving:
  
  * Horizontally scale an algorithm across CPUs.
  * Don't ruin the speedup of incremental score calculation.
  * Runs must be reproducible.
  
  
  === Horizontally scale an algorithm across CPUs
  
  There are several ways to use multiple threads without doing real multithreaded solving:
  
  