code: @Override
      public MoveSelector buildBaseMoveSelector(HeuristicConfigPolicy configPolicy,
              SelectionCacheType minimumCacheType, boolean randomSelection) {
          EntityDescriptor entityDescriptor = deduceEntityDescriptor(
                  configPolicy.getSolutionDescriptor(), entityClass);
          SubChainSelectorConfig subChainSelectorConfig_ = subChainSelectorConfig == null ? new SubChainSelectorConfig()
                  : subChainSelectorConfig;
          SubChainSelector leftSubChainSelector = subChainSelectorConfig_.buildSubChainSelector(configPolicy,
                  entityDescriptor,
                  minimumCacheType, SelectionOrder.fromRandomSelectionBoolean(randomSelection));
          SubChainSelectorConfig rightSubChainSelectorConfig = defaultIfNull(secondarySubChainSelectorConfig,
                  subChainSelectorConfig_);
          SubChainSelector rightSubChainSelector = rightSubChainSelectorConfig.buildSubChainSelector(configPolicy,
                  entityDescriptor,
                  minimumCacheType, SelectionOrder.fromRandomSelectionBoolean(randomSelection));
          return new SubChainSwapMoveSelector(leftSubChainSelector, rightSubChainSelector, randomSelection,
                  defaultIfNull(selectReversingMoveToo, true));
      }
docs: ************************************************************************