public Acceptor buildAcceptor(HeuristicConfigPolicy configPolicy) {
        EnvironmentMode environmentMode = configPolicy.getEnvironmentMode();
        List<Acceptor> acceptorList = new ArrayList<>();
        if (acceptorClassList != null) {
            for (Class<? extends Acceptor> acceptorClass : acceptorClassList) {
                Acceptor acceptor = ConfigUtils.newInstance(this, "acceptorClass", acceptorClass);
                acceptorList.add(acceptor);
            }
        }
        if (acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.HILL_CLIMBING)) {
            HillClimbingAcceptor acceptor = new HillClimbingAcceptor();
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.ENTITY_TABU))
                || entityTabuSize != null || entityTabuRatio != null
                || fadingEntityTabuSize != null || fadingEntityTabuRatio != null) {
            EntityTabuAcceptor acceptor = new EntityTabuAcceptor(configPolicy.getLogIndentation());
            if (entityTabuSize != null) {
                if (entityTabuRatio != null) {
                    throw new IllegalArgumentException("The acceptor cannot have both entityTabuSize ("
                            + entityTabuSize + ") and entityTabuRatio (" + entityTabuRatio + ").");
                }
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(entityTabuSize));
            } else if (entityTabuRatio != null) {
                acceptor.setTabuSizeStrategy(new EntityRatioTabuSizeStrategy(entityTabuRatio));
            } else if (fadingEntityTabuSize == null && fadingEntityTabuRatio == null) {
                acceptor.setTabuSizeStrategy(new EntityRatioTabuSizeStrategy(0.1));
            }
            if (fadingEntityTabuSize != null) {
                if (fadingEntityTabuRatio != null) {
                    throw new IllegalArgumentException("The acceptor cannot have both fadingEntityTabuSize ("
                            + fadingEntityTabuSize + ") and fadingEntityTabuRatio ("
                            + fadingEntityTabuRatio + ").");
                }
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingEntityTabuSize));
            } else if (fadingEntityTabuRatio != null) {
                acceptor.setFadingTabuSizeStrategy(new EntityRatioTabuSizeStrategy(fadingEntityTabuRatio));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.VALUE_TABU))
                || valueTabuSize != null || valueTabuRatio != null
                || fadingValueTabuSize != null  || fadingValueTabuRatio != null) {
            ValueTabuAcceptor acceptor = new ValueTabuAcceptor(configPolicy.getLogIndentation());
            if (valueTabuSize != null) {
                if (valueTabuRatio != null) {
                    throw new IllegalArgumentException("The acceptor cannot have both valueTabuSize ("
                            + valueTabuSize + ") and valueTabuRatio (" + valueTabuRatio + ").");
                }
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(valueTabuSize));
            } else if (valueTabuRatio != null) {
                acceptor.setTabuSizeStrategy(new ValueRatioTabuSizeStrategy(valueTabuRatio));
            }
            if (fadingValueTabuSize != null) {
                if (fadingValueTabuRatio != null) {
                    throw new IllegalArgumentException("The acceptor cannot have both fadingValueTabuSize ("
                            + fadingValueTabuSize + ") and fadingValueTabuRatio ("
                            + fadingValueTabuRatio + ").");
                }
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingValueTabuSize));
            } else if (fadingValueTabuRatio != null) {
                acceptor.setFadingTabuSizeStrategy(new ValueRatioTabuSizeStrategy(fadingValueTabuRatio));
            }

            if (valueTabuSize != null) {
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(valueTabuSize));
            }
            if (fadingValueTabuSize != null) {
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingValueTabuSize));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.MOVE_TABU))
                || moveTabuSize != null || fadingMoveTabuSize != null) {
            MoveTabuAcceptor acceptor = new MoveTabuAcceptor(configPolicy.getLogIndentation());
            acceptor.setUseUndoMoveAsTabuMove(false);
            if (moveTabuSize != null) {
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(moveTabuSize));
            }
            if (fadingMoveTabuSize != null) {
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingMoveTabuSize));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.UNDO_MOVE_TABU))
                || undoMoveTabuSize != null || fadingUndoMoveTabuSize != null) {
            MoveTabuAcceptor acceptor = new MoveTabuAcceptor(configPolicy.getLogIndentation());
            acceptor.setUseUndoMoveAsTabuMove(true);
            if (undoMoveTabuSize != null) {
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(undoMoveTabuSize));
            }
            if (fadingUndoMoveTabuSize != null) {
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingUndoMoveTabuSize));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SOLUTION_TABU))
                || solutionTabuSize != null || fadingSolutionTabuSize != null) {
            SolutionTabuAcceptor acceptor = new SolutionTabuAcceptor(configPolicy.getLogIndentation());
            if (solutionTabuSize != null) {
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(solutionTabuSize));
            }
            if (fadingSolutionTabuSize != null) {
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingSolutionTabuSize));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SIMULATED_ANNEALING))
                || simulatedAnnealingStartingTemperature != null) {
            SimulatedAnnealingAcceptor acceptor = new SimulatedAnnealingAcceptor();
            if (simulatedAnnealingStartingTemperature == null) {
                // TODO Support SA without a parameter
                throw new IllegalArgumentException("The acceptorType (" + AcceptorType.SIMULATED_ANNEALING
                        + ") currently requires a simulatedAnnealingStartingTemperature ("
                        + simulatedAnnealingStartingTemperature + ").");
            }
            acceptor.setStartingTemperature(configPolicy.getScoreDefinition()
                    .parseScore(simulatedAnnealingStartingTemperature));
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.LATE_ACCEPTANCE))
                || lateAcceptanceSize != null) {
            LateAcceptanceAcceptor acceptor = new LateAcceptanceAcceptor();
            acceptor.setLateAcceptanceSize(defaultIfNull(lateAcceptanceSize, 400));
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.STEP_COUNTING_HILL_CLIMBING))
                || stepCountingHillClimbingSize != null) {
            int stepCountingHillClimbingSize_ = defaultIfNull(stepCountingHillClimbingSize, 400);
            StepCountingHillClimbingType stepCountingHillClimbingType_
                    = defaultIfNull(stepCountingHillClimbingType, StepCountingHillClimbingType.STEP);
            StepCountingHillClimbingAcceptor acceptor = new StepCountingHillClimbingAcceptor(
                    stepCountingHillClimbingSize_, stepCountingHillClimbingType_);
            acceptorList.add(acceptor);
        }
        if (acceptorList.size() == 1) {
            return acceptorList.get(0);
        } else if (acceptorList.size() > 1) {
            return new CompositeAcceptor(acceptorList);
        } else {
            throw new IllegalArgumentException("The acceptor does not specify any acceptorType (" + acceptorTypeList
                    + ") or other acceptor property.\n"
                    + "For a good starting values,"
                    + " see the docs section \"Which optimization algorithms should I use?\".");
        }
    }
public Acceptor buildAcceptor(HeuristicConfigPolicy configPolicy) {
        EnvironmentMode environmentMode = configPolicy.getEnvironmentMode();
        List<Acceptor> acceptorList = new ArrayList<>();
        if (acceptorClassList != null) {
            for (Class<? extends Acceptor> acceptorClass : acceptorClassList) {
                Acceptor acceptor = ConfigUtils.newInstance(this, "acceptorClass", acceptorClass);
                acceptorList.add(acceptor);
            }
        }
        if (acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.HILL_CLIMBING)) {
            HillClimbingAcceptor acceptor = new HillClimbingAcceptor();
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.ENTITY_TABU))
                || entityTabuSize != null || entityTabuRatio != null
                || fadingEntityTabuSize != null || fadingEntityTabuRatio != null) {
            EntityTabuAcceptor acceptor = new EntityTabuAcceptor(configPolicy.getLogIndentation());
            if (entityTabuSize != null) {
                if (entityTabuRatio != null) {
                    throw new IllegalArgumentException("The acceptor cannot have both entityTabuSize ("
                            + entityTabuSize + ") and entityTabuRatio (" + entityTabuRatio + ").");
                }
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(entityTabuSize));
            } else if (entityTabuRatio != null) {
                acceptor.setTabuSizeStrategy(new EntityRatioTabuSizeStrategy(entityTabuRatio));
            } else if (fadingEntityTabuSize == null && fadingEntityTabuRatio == null) {
                acceptor.setTabuSizeStrategy(new EntityRatioTabuSizeStrategy(0.1));
            }
            if (fadingEntityTabuSize != null) {
                if (fadingEntityTabuRatio != null) {
                    throw new IllegalArgumentException("The acceptor cannot have both fadingEntityTabuSize ("
                            + fadingEntityTabuSize + ") and fadingEntityTabuRatio ("
                            + fadingEntityTabuRatio + ").");
                }
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingEntityTabuSize));
            } else if (fadingEntityTabuRatio != null) {
                acceptor.setFadingTabuSizeStrategy(new EntityRatioTabuSizeStrategy(fadingEntityTabuRatio));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.VALUE_TABU))
                || valueTabuSize != null || valueTabuRatio != null
                || fadingValueTabuSize != null  || fadingValueTabuRatio != null) {
            ValueTabuAcceptor acceptor = new ValueTabuAcceptor(configPolicy.getLogIndentation());
            if (valueTabuSize != null) {
                if (valueTabuRatio != null) {
                    throw new IllegalArgumentException("The acceptor cannot have both valueTabuSize ("
                            + valueTabuSize + ") and valueTabuRatio (" + valueTabuRatio + ").");
                }
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(valueTabuSize));
            } else if (valueTabuRatio != null) {
                acceptor.setTabuSizeStrategy(new ValueRatioTabuSizeStrategy(valueTabuRatio));
            }
            if (fadingValueTabuSize != null) {
                if (fadingValueTabuRatio != null) {
                    throw new IllegalArgumentException("The acceptor cannot have both fadingValueTabuSize ("
                            + fadingValueTabuSize + ") and fadingValueTabuRatio ("
                            + fadingValueTabuRatio + ").");
                }
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingValueTabuSize));
            } else if (fadingValueTabuRatio != null) {
                acceptor.setFadingTabuSizeStrategy(new ValueRatioTabuSizeStrategy(fadingValueTabuRatio));
            }

            if (valueTabuSize != null) {
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(valueTabuSize));
            }
            if (fadingValueTabuSize != null) {
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingValueTabuSize));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.MOVE_TABU))
                || moveTabuSize != null || fadingMoveTabuSize != null) {
            MoveTabuAcceptor acceptor = new MoveTabuAcceptor(configPolicy.getLogIndentation());
            acceptor.setUseUndoMoveAsTabuMove(false);
            if (moveTabuSize != null) {
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(moveTabuSize));
            }
            if (fadingMoveTabuSize != null) {
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingMoveTabuSize));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.UNDO_MOVE_TABU))
                || undoMoveTabuSize != null || fadingUndoMoveTabuSize != null) {
            MoveTabuAcceptor acceptor = new MoveTabuAcceptor(configPolicy.getLogIndentation());
            acceptor.setUseUndoMoveAsTabuMove(true);
            if (undoMoveTabuSize != null) {
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(undoMoveTabuSize));
            }
            if (fadingUndoMoveTabuSize != null) {
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingUndoMoveTabuSize));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SOLUTION_TABU))
                || solutionTabuSize != null || fadingSolutionTabuSize != null) {
            SolutionTabuAcceptor acceptor = new SolutionTabuAcceptor(configPolicy.getLogIndentation());
            if (solutionTabuSize != null) {
                acceptor.setTabuSizeStrategy(new FixedTabuSizeStrategy(solutionTabuSize));
            }
            if (fadingSolutionTabuSize != null) {
                acceptor.setFadingTabuSizeStrategy(new FixedTabuSizeStrategy(fadingSolutionTabuSize));
            }
            if (environmentMode.isNonIntrusiveFullAsserted()) {
                acceptor.setAssertTabuHashCodeCorrectness(true);
            }
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SIMULATED_ANNEALING))
                || simulatedAnnealingStartingTemperature != null) {
            SimulatedAnnealingAcceptor acceptor = new SimulatedAnnealingAcceptor();
            if (simulatedAnnealingStartingTemperature == null) {
                
                throw new IllegalArgumentException("The acceptorType (" + AcceptorType.SIMULATED_ANNEALING
                        + ") currently requires a simulatedAnnealingStartingTemperature ("
                        + simulatedAnnealingStartingTemperature + ").");
            }
            acceptor.setStartingTemperature(configPolicy.getScoreDefinition()
                    .parseScore(simulatedAnnealingStartingTemperature));
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.LATE_ACCEPTANCE))
                || lateAcceptanceSize != null) {
            LateAcceptanceAcceptor acceptor = new LateAcceptanceAcceptor();
            acceptor.setLateAcceptanceSize(defaultIfNull(lateAcceptanceSize, 400));
            acceptorList.add(acceptor);
        }
        if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.STEP_COUNTING_HILL_CLIMBING))
                || stepCountingHillClimbingSize != null) {
            int stepCountingHillClimbingSize_ = defaultIfNull(stepCountingHillClimbingSize, 400);
            StepCountingHillClimbingType stepCountingHillClimbingType_
                    = defaultIfNull(stepCountingHillClimbingType, StepCountingHillClimbingType.STEP);
            StepCountingHillClimbingAcceptor acceptor = new StepCountingHillClimbingAcceptor(
                    stepCountingHillClimbingSize_, stepCountingHillClimbingType_);
            acceptorList.add(acceptor);
        }
        if (acceptorList.size() == 1) {
            return acceptorList.get(0);
        } else if (acceptorList.size() > 1) {
            return new CompositeAcceptor(acceptorList);
        } else {
            throw new IllegalArgumentException("The acceptor does not specify any acceptorType (" + acceptorTypeList
                    + ") or other acceptor property.\n"
                    + "For a good starting values,"
                    + " see the docs section \"Which optimization algorithms should I use?\".");
        }
    }
public Acceptor buildAcceptor ( HeuristicConfigPolicy configPolicy ) { EnvironmentMode environmentMode = configPolicy . getEnvironmentMode ( ) ; List < Acceptor > acceptorList = new ArrayList <> ( ) ; if ( acceptorClassList != null ) { for ( Class < ? extends Acceptor > acceptorClass : acceptorClassList ) { Acceptor acceptor = ConfigUtils . newInstance ( this , "acceptorClass" , acceptorClass ) ; acceptorList . add ( acceptor ) ; } } if ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . HILL_CLIMBING ) ) { HillClimbingAcceptor acceptor = new HillClimbingAcceptor ( ) ; acceptorList . add ( acceptor ) ; } if ( ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . ENTITY_TABU ) ) || entityTabuSize != null || entityTabuRatio != null || fadingEntityTabuSize != null || fadingEntityTabuRatio != null ) { EntityTabuAcceptor acceptor = new EntityTabuAcceptor ( configPolicy . getLogIndentation ( ) ) ; if ( entityTabuSize != null ) { if ( entityTabuRatio != null ) { throw new IllegalArgumentException ( "The acceptor cannot have both entityTabuSize (" + entityTabuSize + ") and entityTabuRatio (" + entityTabuRatio + ")." ) ; } acceptor . setTabuSizeStrategy ( new FixedTabuSizeStrategy ( entityTabuSize ) ) ; } else if ( entityTabuRatio != null ) { acceptor . setTabuSizeStrategy ( new EntityRatioTabuSizeStrategy ( entityTabuRatio ) ) ; } else if ( fadingEntityTabuSize == null && fadingEntityTabuRatio == null ) { acceptor . setTabuSizeStrategy ( new EntityRatioTabuSizeStrategy ( 0.1 ) ) ; } if ( fadingEntityTabuSize != null ) { if ( fadingEntityTabuRatio != null ) { throw new IllegalArgumentException ( "The acceptor cannot have both fadingEntityTabuSize (" + fadingEntityTabuSize + ") and fadingEntityTabuRatio (" + fadingEntityTabuRatio + ")." ) ; } acceptor . setFadingTabuSizeStrategy ( new FixedTabuSizeStrategy ( fadingEntityTabuSize ) ) ; } else if ( fadingEntityTabuRatio != null ) { acceptor . setFadingTabuSizeStrategy ( new EntityRatioTabuSizeStrategy ( fadingEntityTabuRatio ) ) ; } if ( environmentMode . isNonIntrusiveFullAsserted ( ) ) { acceptor . setAssertTabuHashCodeCorrectness ( true ) ; } acceptorList . add ( acceptor ) ; } if ( ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . VALUE_TABU ) ) || valueTabuSize != null || valueTabuRatio != null || fadingValueTabuSize != null || fadingValueTabuRatio != null ) { ValueTabuAcceptor acceptor = new ValueTabuAcceptor ( configPolicy . getLogIndentation ( ) ) ; if ( valueTabuSize != null ) { if ( valueTabuRatio != null ) { throw new IllegalArgumentException ( "The acceptor cannot have both valueTabuSize (" + valueTabuSize + ") and valueTabuRatio (" + valueTabuRatio + ")." ) ; } acceptor . setTabuSizeStrategy ( new FixedTabuSizeStrategy ( valueTabuSize ) ) ; } else if ( valueTabuRatio != null ) { acceptor . setTabuSizeStrategy ( new ValueRatioTabuSizeStrategy ( valueTabuRatio ) ) ; } if ( fadingValueTabuSize != null ) { if ( fadingValueTabuRatio != null ) { throw new IllegalArgumentException ( "The acceptor cannot have both fadingValueTabuSize (" + fadingValueTabuSize + ") and fadingValueTabuRatio (" + fadingValueTabuRatio + ")." ) ; } acceptor . setFadingTabuSizeStrategy ( new FixedTabuSizeStrategy ( fadingValueTabuSize ) ) ; } else if ( fadingValueTabuRatio != null ) { acceptor . setFadingTabuSizeStrategy ( new ValueRatioTabuSizeStrategy ( fadingValueTabuRatio ) ) ; } if ( valueTabuSize != null ) { acceptor . setTabuSizeStrategy ( new FixedTabuSizeStrategy ( valueTabuSize ) ) ; } if ( fadingValueTabuSize != null ) { acceptor . setFadingTabuSizeStrategy ( new FixedTabuSizeStrategy ( fadingValueTabuSize ) ) ; } if ( environmentMode . isNonIntrusiveFullAsserted ( ) ) { acceptor . setAssertTabuHashCodeCorrectness ( true ) ; } acceptorList . add ( acceptor ) ; } if ( ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . MOVE_TABU ) ) || moveTabuSize != null || fadingMoveTabuSize != null ) { MoveTabuAcceptor acceptor = new MoveTabuAcceptor ( configPolicy . getLogIndentation ( ) ) ; acceptor . setUseUndoMoveAsTabuMove ( false ) ; if ( moveTabuSize != null ) { acceptor . setTabuSizeStrategy ( new FixedTabuSizeStrategy ( moveTabuSize ) ) ; } if ( fadingMoveTabuSize != null ) { acceptor . setFadingTabuSizeStrategy ( new FixedTabuSizeStrategy ( fadingMoveTabuSize ) ) ; } if ( environmentMode . isNonIntrusiveFullAsserted ( ) ) { acceptor . setAssertTabuHashCodeCorrectness ( true ) ; } acceptorList . add ( acceptor ) ; } if ( ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . UNDO_MOVE_TABU ) ) || undoMoveTabuSize != null || fadingUndoMoveTabuSize != null ) { MoveTabuAcceptor acceptor = new MoveTabuAcceptor ( configPolicy . getLogIndentation ( ) ) ; acceptor . setUseUndoMoveAsTabuMove ( true ) ; if ( undoMoveTabuSize != null ) { acceptor . setTabuSizeStrategy ( new FixedTabuSizeStrategy ( undoMoveTabuSize ) ) ; } if ( fadingUndoMoveTabuSize != null ) { acceptor . setFadingTabuSizeStrategy ( new FixedTabuSizeStrategy ( fadingUndoMoveTabuSize ) ) ; } if ( environmentMode . isNonIntrusiveFullAsserted ( ) ) { acceptor . setAssertTabuHashCodeCorrectness ( true ) ; } acceptorList . add ( acceptor ) ; } if ( ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . SOLUTION_TABU ) ) || solutionTabuSize != null || fadingSolutionTabuSize != null ) { SolutionTabuAcceptor acceptor = new SolutionTabuAcceptor ( configPolicy . getLogIndentation ( ) ) ; if ( solutionTabuSize != null ) { acceptor . setTabuSizeStrategy ( new FixedTabuSizeStrategy ( solutionTabuSize ) ) ; } if ( fadingSolutionTabuSize != null ) { acceptor . setFadingTabuSizeStrategy ( new FixedTabuSizeStrategy ( fadingSolutionTabuSize ) ) ; } if ( environmentMode . isNonIntrusiveFullAsserted ( ) ) { acceptor . setAssertTabuHashCodeCorrectness ( true ) ; } acceptorList . add ( acceptor ) ; } if ( ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . SIMULATED_ANNEALING ) ) || simulatedAnnealingStartingTemperature != null ) { SimulatedAnnealingAcceptor acceptor = new SimulatedAnnealingAcceptor ( ) ; if ( simulatedAnnealingStartingTemperature == null ) { // TODO Support SA without a parameter throw new IllegalArgumentException ( "The acceptorType (" + AcceptorType . SIMULATED_ANNEALING + ") currently requires a simulatedAnnealingStartingTemperature (" + simulatedAnnealingStartingTemperature + ")." ) ; } acceptor . setStartingTemperature ( configPolicy . getScoreDefinition ( ) . parseScore ( simulatedAnnealingStartingTemperature ) ) ; acceptorList . add ( acceptor ) ; } if ( ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . LATE_ACCEPTANCE ) ) || lateAcceptanceSize != null ) { LateAcceptanceAcceptor acceptor = new LateAcceptanceAcceptor ( ) ; acceptor . setLateAcceptanceSize ( defaultIfNull ( lateAcceptanceSize , 400 ) ) ; acceptorList . add ( acceptor ) ; } if ( ( acceptorTypeList != null && acceptorTypeList . contains ( AcceptorType . STEP_COUNTING_HILL_CLIMBING ) ) || stepCountingHillClimbingSize != null ) { int stepCountingHillClimbingSize_ = defaultIfNull ( stepCountingHillClimbingSize , 400 ) ; StepCountingHillClimbingType stepCountingHillClimbingType_ = defaultIfNull ( stepCountingHillClimbingType , StepCountingHillClimbingType . STEP ) ; StepCountingHillClimbingAcceptor acceptor = new StepCountingHillClimbingAcceptor ( stepCountingHillClimbingSize_ , stepCountingHillClimbingType_ ) ; acceptorList . add ( acceptor ) ; } if ( acceptorList . size ( ) == 1 ) { return acceptorList . get ( 0 ) ; } else if ( acceptorList . size ( ) > 1 ) { return new CompositeAcceptor ( acceptorList ) ; } else { throw new IllegalArgumentException ( "The acceptor does not specify any acceptorType (" + acceptorTypeList + ") or other acceptor property.\n" + "For a good starting values," + " see the docs section \"Which optimization algorithms should I use?\"." ) ; } }
************************************************************************
************************************************************************