package GKA.Graph; import static org.junit.Assert.*; import java.io.File; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import org.junit.Test; public class TourTest { @Test public void testNearestNeighbourGraph5() { GKAGraphInterface graph = GKAGraphInterface.newGraph(new File("..\\aufgabe1Bsp\\graph5.gka")); assertEquals(Arrays.asList("v1", "v6", "v2", "v4", "v3", "v7", "v5", "v1"), graph.getNearestNeighbour("v1").getWay()); } @Test public void testMSTGraph5() { GKAGraphInterface graph = GKAGraphInterface.newGraph(new File("..\\aufgabe1Bsp\\graph5.gka")); assertEquals(Arrays.asList("v1", "v5", "v6", "v2", "v4", "v3", "v7", "v1"), graph.getMSTHeuristic("v1").getWay()); } @Test public void test() { int testDurchlaeufe = 100; long mittlereZeitMST = 0; long mittlereZeitNearest = 0; Double mittlererWeg = 0.0; Double mittlereDifferenzWeg = 0.0; for(int j = 0; j < testDurchlaeufe; j++) { GKAGraphInterface graph = GKAGraphInterface.newTourGraph(25); MinimumSpanningTree minimumSpanningTree = graph.getMinimumSpanningTree(); NearestNeighbour nearestNeighbour = graph.getNearestNeighbour("0"); MSTHeuristic mst = graph.getMSTHeuristic("0"); assertEquals(graph.getjGraph().vertexSet(), mst.getTour().getjGraph().vertexSet()); assertEquals(graph.getjGraph().vertexSet(), nearestNeighbour.getNearestNeighbourTour().getjGraph().vertexSet()); for(int i = 0; i < 25; i++) { assertEquals(2, mst.getTour().getjGraph().edgesOf(String.valueOf(i)).size()); assertEquals(2, nearestNeighbour.getNearestNeighbourTour().getjGraph().edgesOf(String.valueOf(i)).size()); } ArrayList<GKAEdge> nearestNeighbourEdgeList = new ArrayList<>(nearestNeighbour.getNearestNeighbourTour().getjGraph().edgeSet()); Collections.shuffle(nearestNeighbourEdgeList); nearestNeighbour.getNearestNeighbourTour().removeEdge(nearestNeighbourEdgeList.get(0).getSource().toString(),nearestNeighbourEdgeList.get(0).getTarget().toString()); assertEquals(graph.getjGraph().vertexSet(),new HashSet<>(((GKAGraph) nearestNeighbour.getNearestNeighbourTour()).dijkstraStringList(nearestNeighbourEdgeList.get(0).getSource().toString(),nearestNeighbourEdgeList.get(0).getTarget().toString()))); ArrayList<GKAEdge> mstEdgeList = new ArrayList<>(mst.getTour().getjGraph().edgeSet()); Collections.shuffle(mstEdgeList); mst.getTour().removeEdge(mstEdgeList.get(0).getSource().toString(),mstEdgeList.get(0).getTarget().toString()); assertEquals(graph.getjGraph().vertexSet(),new HashSet<>(((GKAGraph) mst.getTour()).dijkstraStringList(mstEdgeList.get(0).getSource().toString(),mstEdgeList.get(0).getTarget().toString()))); assertTrue(minimumSpanningTree.getLength()*2 >= mst.getLength()); assertTrue(minimumSpanningTree.getLength()*2 >= nearestNeighbour.getLength()); mittlereZeitMST += mst.getRunTime(); mittlereZeitNearest += nearestNeighbour.getRunTime(); mittlereDifferenzWeg += (mst.getLength() - nearestNeighbour.getLength()); mittlererWeg += (mst.getLength() + nearestNeighbour.getLength()/2); } System.out.println("mittlere ZeitMST: " + (mittlereZeitMST/testDurchlaeufe)); System.out.println("mittlere ZeitNN: " + (mittlereZeitNearest/testDurchlaeufe)); System.out.println("der mittlere Weg von MST ist " + (((mittlereDifferenzWeg/testDurchlaeufe)/(mittlererWeg/testDurchlaeufe))*100) + "% größer als der des NN"); } }