// ************************************************************************
// Builder methods
// ************************************************************************
public Acceptor buildAcceptor(HeuristicConfigPolicy configPolicy) {
EnvironmentMode environmentMode = configPolicy.getEnvironmentMode();
List<Acceptor> acceptorList = new ArrayList<Acceptor>();
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();
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));
}
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();
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();
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();
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();
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))