@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));
    }
@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));
    }
@ 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 ) ) ; }
************************************************************************
************************************************************************