public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = RoomsCanTouch.GetHashCode();
         hashCode = (hashCode * 397) ^ EarlyStopIfIterationsExceeded.GetHashCode();
         hashCode = (hashCode * 397) ^ EarlyStopIfTimeExceeded.GetHashCode();
         hashCode = (hashCode * 397) ^ RepeatModeOverride.GetHashCode();
         hashCode = (hashCode * 397) ^ ThrowIfRepeatModeNotSatisfied.GetHashCode();
         hashCode = (hashCode * 397) ^ (ChainDecompositionConfiguration != null ? ChainDecompositionConfiguration.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (SimulatedAnnealingConfiguration != null ? SimulatedAnnealingConfiguration.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ SimulatedAnnealingMaxBranching;
         return(hashCode);
     }
 }
        public static RepeatMode?GetRepeatMode(RepeatModeOverride repeatModeOverride)
        {
            switch (repeatModeOverride)
            {
            case RepeatModeOverride.NoOverride:
                return(null);

            case RepeatModeOverride.AllowRepeat:
                return(RepeatMode.AllowRepeat);

            case RepeatModeOverride.NoImmediate:
                return(RepeatMode.NoImmediate);

            case RepeatModeOverride.NoRepeat:
                return(RepeatMode.NoRepeat);

            default:
                throw new ArgumentOutOfRangeException();
            }
        }