OsmAnd/OsmAnd-java/src/net/osmand/TspTest.java
2013-06-04 00:01:28 +02:00

72 lines
1.9 KiB
Java

package net.osmand;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import net.osmand.data.LatLon;
import net.osmand.util.MapUtils;
public class TspTest {
public static void main(String[] args) {
ArrayList<LatLon> l = new ArrayList<LatLon>();
LatLon start = new LatLon(52.2956, 4.95);
LatLon farest = new LatLon(52.4556, 4.6739);
l.add(new LatLon(52.33, 4.67)); // 2.
l.add(new LatLon(52.4556, 4.6739)); // 3.
l.add(new LatLon(52.59, 4.671)); // 4.
l.add(new LatLon(52.608, 4.9005)); // 5.
l.add(new LatLon(52.56, 4.9505)); // 6.
l.add(new LatLon(52.49, 4.9705)); // 7.
l.add(new LatLon(52.35, 4.9405)); // 8.
ArrayList<LatLon> sh = new ArrayList<LatLon>(l);
Collections.shuffle(sh);
int[] mixedOrder = new int[l.size()];
System.out.print("[");
for (int i = 0; i < sh.size(); i++) {
for (int j = 0; j < l.size(); j++) {
if (l.get(j) == sh.get(i)) {
mixedOrder[i] = j;
System.out.print(j + ", ");
break;
}
}
}
System.out.println("] ");
// ans = new TspHeldKarp().readInput(sh, true).solve();
LatLon end = farest;
TspAnt t = new TspAnt().readGraph(sh, start, end);
int [] ans = t.solve();
double s = 0;
int[] order = new int[ans.length];
double[] dist = new double[ans.length];
order[0] = 0;
for (int k = 1; k < ans.length; k++) {
if(k == ans.length - 1) {
int p = mixedOrder[ans[k - 1] - 1];
dist[k] = MapUtils.getDistance(l.get(p), end);
order[k] = ans[k];
} else {
int c = mixedOrder[ans[k] - 1];
order[k] = c + 1;
if (k == 1) {
dist[k] = MapUtils.getDistance(start, l.get(c));
} else {
int p = mixedOrder[ans[k - 1] - 1];
dist[k] = MapUtils.getDistance(l.get(p), l.get(c));
}
}
s += dist[k];
}
System.out.println("Result order : " + Arrays.toString(order));
System.out.println("Result dist : " + Arrays.toString(dist));
System.out.println(s);
}
}