@Override
    public QueuedEntityPlacer buildEntityPlacer(HeuristicConfigPolicy configPolicy) {
        EntitySelectorConfig entitySelectorConfig_ = buildEntitySelectorConfig(configPolicy);
        EntitySelector entitySelector = entitySelectorConfig_.buildEntitySelector(configPolicy,
                SelectionCacheType.PHASE, SelectionOrder.ORIGINAL);

        List<MoveSelectorConfig> moveSelectorConfigList_;
        if (ConfigUtils.isEmptyCollection(moveSelectorConfigList)) {
            EntityDescriptor entityDescriptor = entitySelector.getEntityDescriptor();
            Collection<GenuineVariableDescriptor> variableDescriptors = entityDescriptor.getGenuineVariableDescriptors();
            List<MoveSelectorConfig> subMoveSelectorConfigList = new ArrayList<>(
                    variableDescriptors.size());
            for (GenuineVariableDescriptor variableDescriptor : variableDescriptors) {
                subMoveSelectorConfigList.add(buildChangeMoveSelectorConfig(
                        configPolicy, entitySelectorConfig_.getId(), variableDescriptor));
            }
            MoveSelectorConfig subMoveSelectorConfig;
            if (subMoveSelectorConfigList.size() > 1) {
                // Default to cartesian product (not a queue) of planning variables.
                subMoveSelectorConfig = new CartesianProductMoveSelectorConfig(subMoveSelectorConfigList);
            } else {
                subMoveSelectorConfig = subMoveSelectorConfigList.get(0);
            }
            moveSelectorConfigList_ = Collections.singletonList(subMoveSelectorConfig);
        } else {
            moveSelectorConfigList_ = moveSelectorConfigList;
        }
        List<MoveSelector> moveSelectorList = new ArrayList<>(moveSelectorConfigList_.size());
        for (MoveSelectorConfig moveSelectorConfig : moveSelectorConfigList_) {
            moveSelectorList.add(moveSelectorConfig.buildMoveSelector(
                    configPolicy, SelectionCacheType.JUST_IN_TIME, SelectionOrder.ORIGINAL));
        }
        return new QueuedEntityPlacer(entitySelector, moveSelectorList);
    }
@Override
    public QueuedEntityPlacer buildEntityPlacer(HeuristicConfigPolicy configPolicy) {
        EntitySelectorConfig entitySelectorConfig_ = buildEntitySelectorConfig(configPolicy);
        EntitySelector entitySelector = entitySelectorConfig_.buildEntitySelector(configPolicy,
                SelectionCacheType.PHASE, SelectionOrder.ORIGINAL);

        List<MoveSelectorConfig> moveSelectorConfigList_;
        if (ConfigUtils.isEmptyCollection(moveSelectorConfigList)) {
            EntityDescriptor entityDescriptor = entitySelector.getEntityDescriptor();
            Collection<GenuineVariableDescriptor> variableDescriptors = entityDescriptor.getGenuineVariableDescriptors();
            List<MoveSelectorConfig> subMoveSelectorConfigList = new ArrayList<>(
                    variableDescriptors.size());
            for (GenuineVariableDescriptor variableDescriptor : variableDescriptors) {
                subMoveSelectorConfigList.add(buildChangeMoveSelectorConfig(
                        configPolicy, entitySelectorConfig_.getId(), variableDescriptor));
            }
            MoveSelectorConfig subMoveSelectorConfig;
            if (subMoveSelectorConfigList.size() > 1) {
                
                subMoveSelectorConfig = new CartesianProductMoveSelectorConfig(subMoveSelectorConfigList);
            } else {
                subMoveSelectorConfig = subMoveSelectorConfigList.get(0);
            }
            moveSelectorConfigList_ = Collections.singletonList(subMoveSelectorConfig);
        } else {
            moveSelectorConfigList_ = moveSelectorConfigList;
        }
        List<MoveSelector> moveSelectorList = new ArrayList<>(moveSelectorConfigList_.size());
        for (MoveSelectorConfig moveSelectorConfig : moveSelectorConfigList_) {
            moveSelectorList.add(moveSelectorConfig.buildMoveSelector(
                    configPolicy, SelectionCacheType.JUST_IN_TIME, SelectionOrder.ORIGINAL));
        }
        return new QueuedEntityPlacer(entitySelector, moveSelectorList);
    }
@ Override public QueuedEntityPlacer buildEntityPlacer ( HeuristicConfigPolicy configPolicy ) { EntitySelectorConfig entitySelectorConfig_ = buildEntitySelectorConfig ( configPolicy ) ; EntitySelector entitySelector = entitySelectorConfig_ . buildEntitySelector ( configPolicy , SelectionCacheType . PHASE , SelectionOrder . ORIGINAL ) ; List < MoveSelectorConfig > moveSelectorConfigList_ ; if ( ConfigUtils . isEmptyCollection ( moveSelectorConfigList ) ) { EntityDescriptor entityDescriptor = entitySelector . getEntityDescriptor ( ) ; Collection < GenuineVariableDescriptor > variableDescriptors = entityDescriptor . getGenuineVariableDescriptors ( ) ; List < MoveSelectorConfig > subMoveSelectorConfigList = new ArrayList <> ( variableDescriptors . size ( ) ) ; for ( GenuineVariableDescriptor variableDescriptor : variableDescriptors ) { subMoveSelectorConfigList . add ( buildChangeMoveSelectorConfig ( configPolicy , entitySelectorConfig_ . getId ( ) , variableDescriptor ) ) ; } MoveSelectorConfig subMoveSelectorConfig ; if ( subMoveSelectorConfigList . size ( ) > 1 ) { // Default to cartesian product (not a queue) of planning variables. subMoveSelectorConfig = new CartesianProductMoveSelectorConfig ( subMoveSelectorConfigList ) ; } else { subMoveSelectorConfig = subMoveSelectorConfigList . get ( 0 ) ; } moveSelectorConfigList_ = Collections . singletonList ( subMoveSelectorConfig ) ; } else { moveSelectorConfigList_ = moveSelectorConfigList ; } List < MoveSelector > moveSelectorList = new ArrayList <> ( moveSelectorConfigList_ . size ( ) ) ; for ( MoveSelectorConfig moveSelectorConfig : moveSelectorConfigList_ ) { moveSelectorList . add ( moveSelectorConfig . buildMoveSelector ( configPolicy , SelectionCacheType . JUST_IN_TIME , SelectionOrder . ORIGINAL ) ) ; } return new QueuedEntityPlacer ( entitySelector , moveSelectorList ) ; }
************************************************************************
************************************************************************