// TODO: should configuration be null by default?
 public SimulatedAnnealingEvolver(IChainBasedLayoutOperations <TLayout, TNode> layoutOperations, SimulatedAnnealingConfiguration configuration = null, bool addNodesGreedilyBeforeEvolve = false)
 {
     LayoutOperations = layoutOperations ?? throw new ArgumentNullException(nameof(layoutOperations));
     Configuration    = configuration ?? SimulatedAnnealingConfiguration.GetDefaultConfiguration();
     this.addNodesGreedilyBeforeEvolve = addNodesGreedilyBeforeEvolve;
 }
 public SimulatedAnnealingConfigurationProvider(SimulatedAnnealingConfiguration fixedConfiguration)
 {
     this.fixedConfiguration = fixedConfiguration ?? throw new ArgumentNullException(nameof(fixedConfiguration));
     useFixedConfiguration   = true;
 }