acceptorList.add(acceptor);
}
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.PLANNING_ENTITY_TABU))
|| planningEntityTabuSize != null || fadingPlanningEntityTabuSize != null) {
PlanningEntityTabuAcceptor planningEntityTabuAcceptor = new PlanningEntityTabuAcceptor();
if (planningEntityTabuSize != null) {
planningEntityTabuAcceptor.setTabuSize(planningEntityTabuSize);
}
if (fadingPlanningEntityTabuSize != null) {
planningEntityTabuAcceptor.setFadingTabuSize(fadingPlanningEntityTabuSize);
}
if (environmentMode == EnvironmentMode.TRACE) {
planningEntityTabuAcceptor.setAssertTabuHashCodeCorrectness(true);
}
acceptorList.add(planningEntityTabuAcceptor);
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.PLANNING_VALUE_TABU))
|| planningValueTabuSize != null || fadingPlanningValueTabuSize != null) {
PlanningValueTabuAcceptor planningValueTabuAcceptor = new PlanningValueTabuAcceptor();
if (planningValueTabuSize != null) {
planningValueTabuAcceptor.setTabuSize(planningValueTabuSize);
}
if (fadingPlanningValueTabuSize != null) {
planningValueTabuAcceptor.setFadingTabuSize(fadingPlanningValueTabuSize);
}
if (environmentMode == EnvironmentMode.TRACE) {
planningValueTabuAcceptor.setAssertTabuHashCodeCorrectness(true);
}
acceptorList.add(planningValueTabuAcceptor);
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.MOVE_TABU))
|| moveTabuSize != null || fadingMoveTabuSize != null) {
MoveTabuAcceptor moveTabuAcceptor = new MoveTabuAcceptor();
moveTabuAcceptor.setUseUndoMoveAsTabuMove(false);
if (moveTabuSize != null) {
moveTabuAcceptor.setTabuSize(moveTabuSize);
}
if (fadingMoveTabuSize != null) {
moveTabuAcceptor.setFadingTabuSize(fadingMoveTabuSize);
}
if (environmentMode == EnvironmentMode.TRACE) {
moveTabuAcceptor.setAssertTabuHashCodeCorrectness(true);
}
acceptorList.add(moveTabuAcceptor);
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.UNDO_MOVE_TABU))
|| undoMoveTabuSize != null || fadingUndoMoveTabuSize != null) {
MoveTabuAcceptor undoMoveTabuAcceptor = new MoveTabuAcceptor();
undoMoveTabuAcceptor.setUseUndoMoveAsTabuMove(true);
if (undoMoveTabuSize != null) {
undoMoveTabuAcceptor.setTabuSize(undoMoveTabuSize);
}
if (fadingUndoMoveTabuSize != null) {
undoMoveTabuAcceptor.setFadingTabuSize(fadingUndoMoveTabuSize);
}
if (environmentMode == EnvironmentMode.TRACE) {
undoMoveTabuAcceptor.setAssertTabuHashCodeCorrectness(true);
}
acceptorList.add(undoMoveTabuAcceptor);
}
if ((acceptorTypeList != null && acceptorTypeList.contains(AcceptorType.SOLUTION_TABU))
|| solutionTabuSize != null || fadingSolutionTabuSize != null) {
SolutionTabuAcceptor solutionTabuAcceptor = new SolutionTabuAcceptor();
if (solutionTabuSize != null) {
solutionTabuAcceptor.setTabuSize(solutionTabuSize);
}
if (fadingSolutionTabuSize != null) {
solutionTabuAcceptor.setFadingTabuSize(fadingSolutionTabuSize);
}
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))
|| lateAcceptanceSize != null ) {
LateAcceptanceAcceptor lateAcceptanceAcceptor = new LateAcceptanceAcceptor();
lateAcceptanceAcceptor.setLateAcceptanceSize((lateAcceptanceSize == null) ? 1000 : lateAcceptanceSize);
acceptorList.add(lateAcceptanceAcceptor);
}
if (acceptorList.size() == 1) {
return acceptorList.get(0);
} else if (acceptorList.size() > 1) {
CompositeAcceptor compositeAcceptor = new CompositeAcceptor();
compositeAcceptor.setAcceptorList(acceptorList);
return compositeAcceptor;
} else {
PlanningEntityTabuAcceptor planningEntityTabuAcceptor = new PlanningEntityTabuAcceptor();
planningEntityTabuAcceptor.setTabuSize(5); // TODO number pulled out of thin air
if (environmentMode == EnvironmentMode.TRACE) {
planningEntityTabuAcceptor.setAssertTabuHashCodeCorrectness(true);
}
return planningEntityTabuAcceptor;
}
}