
fr.vergne.optimization.TSP.PathIncubator Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of optimization-samples Show documentation
Show all versions of optimization-samples Show documentation
Optimization algorithms' examples.
The newest version!
package fr.vergne.optimization.TSP;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import fr.vergne.optimization.TSP.path.AbstractPath;
import fr.vergne.optimization.TSP.path.AbstractPath.Transition;
import fr.vergne.optimization.TSP.path.Location;
import fr.vergne.optimization.incubator.impl.ExperimentalIncubator;
public class PathIncubator extends
ExperimentalIncubator {
public PathIncubator() {
super(new Comparator() {
@Override
public int compare(Path p1, Path p2) {
Collection t1 = p1.getTransitions();
Set l1 = new HashSet();
Double d1 = feed(t1, l1);
Collection t2 = p2.getTransitions();
Set l2 = new HashSet();
Double d2 = feed(t2, l2);
int comparison = Integer.valueOf(l2.size())
.compareTo(l1.size());
comparison = comparison != 0 ? comparison : d1.compareTo(d2);
comparison = comparison != 0 ? comparison : p1.getLength()
.compareTo(p2.getLength());
return comparison;
}
private double feed(Collection transitions,
Set locations) {
Map counters = new HashMap();
for (Transition transition : transitions) {
for (Location location : Arrays.asList(transition.getL1(),
transition.getL2())) {
locations.add(location);
counters.put(location, getCount(counters, location) + 1);
}
}
double distance = 0;
for (int count : counters.values()) {
int delta = 2 - count;
distance += delta * delta;
}
return distance;
}
private int getCount(Map m1, Location a) {
Integer countA = m1.get(a);
return countA == null ? 0 : countA;
}
});
}
int generatedIndividuals = 0;
public int getGeneratedIndividuals() {
return generatedIndividuals;
}
@Override
public void incubate() {
super.incubate();
generatedIndividuals++;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy