mirror of
https://github.com/graphhopper/jsprit.git
synced 2020-01-24 07:45:05 +01:00
Replacing the termination logic to reduce run-times with marginal effect on quality.
This commit is contained in:
parent
4b88ac2028
commit
6b94da291f
2 changed files with 28 additions and 1 deletions
|
|
@ -57,8 +57,12 @@ public class IterationWithoutImprovementTermination implements PrematureAlgorith
|
|||
* @param noIterationsWithoutImprovement previous iterations without any improvement
|
||||
*/
|
||||
public IterationWithoutImprovementTermination(int noIterationsWithoutImprovement) {
|
||||
this(noIterationsWithoutImprovement, 0.0);
|
||||
}
|
||||
|
||||
public IterationWithoutImprovementTermination(int noIterationsWithoutImprovement, double terminationByCostPercentage) {
|
||||
this.noIterationWithoutImprovement = noIterationsWithoutImprovement;
|
||||
this.terminationByCostPercentage = 0.1; // TODO: Fetch it from configuration
|
||||
this.terminationByCostPercentage = terminationByCostPercentage;
|
||||
costs = new ArrayList<>();
|
||||
unassignedCount = new ArrayList<>();
|
||||
log.debug("initialise " + this);
|
||||
|
|
|
|||
|
|
@ -20,8 +20,11 @@ package com.graphhopper.jsprit.core.algorithm.termination;
|
|||
|
||||
|
||||
import com.graphhopper.jsprit.core.algorithm.SearchStrategy;
|
||||
import com.graphhopper.jsprit.core.problem.job.Job;
|
||||
import com.graphhopper.jsprit.core.problem.solution.VehicleRoutingProblemSolution;
|
||||
import junit.framework.Assert;
|
||||
import org.junit.Test;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
|
@ -76,4 +79,24 @@ public class IterationsWithoutImprovementTest {
|
|||
}
|
||||
Assert.assertEquals(150, terminatedAfter);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void itShouldTerminateAfter100ByPercentage() {
|
||||
IterationWithoutImprovementTermination termination = new IterationWithoutImprovementTermination(100, 0.1);
|
||||
SearchStrategy.DiscoveredSolution discoveredSolution = mock(SearchStrategy.DiscoveredSolution.class);
|
||||
VehicleRoutingProblemSolution solution = mock(VehicleRoutingProblemSolution.class);
|
||||
when(discoveredSolution.getSolution()).thenReturn(solution);
|
||||
when(solution.getCost()).thenReturn(100.0);
|
||||
when(solution.getUnassignedJobs()).thenReturn(new ArrayList<Job>());
|
||||
|
||||
int terminatedAfter = 0;
|
||||
for (int i = 0; i < 200; i++) {
|
||||
boolean terminate = termination.isPrematureBreak(discoveredSolution);
|
||||
if (terminate) {
|
||||
terminatedAfter = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
Assert.assertEquals(100, terminatedAfter);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue