}
acceptorList.add(propertyTabuAcceptor);
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SOLUTION_TABU))
|| completeSolutionTabuSize != null || partialSolutionTabuSize != null) {
SolutionTabuAcceptor solutionTabuAcceptor = new SolutionTabuAcceptor();
if (completeSolutionTabuSize != null) {
solutionTabuAcceptor.setCompleteTabuSize(completeSolutionTabuSize);
}
if (partialSolutionTabuSize != null) {
solutionTabuAcceptor.setPartialTabuSize(partialSolutionTabuSize);
}
if (environmentMode == EnvironmentMode.TRACE) {
solutionTabuAcceptor.setAssertTabuHashCodeCorrectness(true);
}
acceptorList.add(solutionTabuAcceptor);
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SIMULATED_ANNEALING))
|| simulatedAnnealingStartingTemperature != null) {
SimulatedAnnealingAcceptor simulatedAnnealingAcceptor = new SimulatedAnnealingAcceptor();
simulatedAnnealingAcceptor.setStartingTemperature(scoreDefinition.parseScore(simulatedAnnealingStartingTemperature));
acceptorList.add(simulatedAnnealingAcceptor);
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.GREAT_DELUGE))
|| greatDelugeWaterLevelUpperBoundRate != null || greatDelugeWaterRisingRate != null) {
double waterLevelUpperBoundRate = (Double) ObjectUtils.defaultIfNull(
greatDelugeWaterLevelUpperBoundRate, 1.20);
double waterRisingRate = (Double) ObjectUtils.defaultIfNull(
greatDelugeWaterRisingRate, 0.0000001);
acceptorList.add(new GreatDelugeAcceptor(waterLevelUpperBoundRate, waterRisingRate));
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.LATE_ACCEPTANCE))) {
// TODO implement LATE_ACCEPTANCE
throw new UnsupportedOperationException("LATE_ACCEPTANCE not yet supported.");
}
if (acceptorList.size() == 1) {
return acceptorList.get(0);
} else if (acceptorList.size() > 1) {
CompositeAcceptor compositeAcceptor = new CompositeAcceptor();
compositeAcceptor.setAcceptorList(acceptorList);
return compositeAcceptor;
} else {
SolutionTabuAcceptor solutionTabuAcceptor = new SolutionTabuAcceptor();
solutionTabuAcceptor.setCompleteTabuSize(1500); // TODO number pulled out of thin air
if (environmentMode == EnvironmentMode.TRACE) {
solutionTabuAcceptor.setAssertTabuHashCodeCorrectness(true);
}
return solutionTabuAcceptor;
}
}