예제 #1
0
        public void AdjacencyList_Filter_SelectesPartOfVertices()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            int    vertex3 = 30;
            int    vertex4 = 40;
            string edge1   = "20-30";
            string edge2   = "30-40";

            AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>();

            adjacencyList.AddVertex(vertex1);
            adjacencyList.AddVertex(vertex2);
            adjacencyList.AddVertex(vertex3);
            adjacencyList.AddVertex(vertex4);
            adjacencyList.AddEdge(vertex2, vertex3, edge1);
            adjacencyList.AddEdge(vertex3, vertex4, edge2);

            IGraph <int, string> filtered = adjacencyList.Filter((v1, v2, ed) => v1 == 20);

            Assert.Equal(2, filtered.NumVertices);
            Assert.True(filtered.HasVertex(vertex2));
            Assert.True(filtered.HasVertex(vertex3));
            Assert.Equal(edge1, filtered.FindEdge(vertex2, vertex3));
        }
예제 #2
0
        public void ShortestPathSearcher_Integration_CumulativeWeight()
        {
            string vertexA = "A", vertexB = "B", vertexC = "C";

            // Graph A-B=2, A-C=3, B-C=4
            AdjacencyList <string, int> graph = new AdjacencyList <string, int>();

            graph.AddVertex(vertexA);
            graph.AddVertex(vertexB);
            graph.AddVertex(vertexC);
            graph.AddEdge(vertexA, vertexB, 2);
            graph.AddEdge(vertexA, vertexC, 3);
            graph.AddEdge(vertexB, vertexC, 4);

            ShortestPathSearcher <string, int> searcher = new ShortestPathSearcher <string, int>(graph, vertexB, vertexC, (i) => i)
            {
                PathWeightCalculation = PathWeightCalculationType.Cumulative
            };
            IEnumerable <EdgeDescriptor <string, int> > path = searcher.FindShortestPath();

            Assert.IsNotNull(path);
            Assert.AreEqual(2, path.Count());
            EdgeDescriptor <string, int> edge1 = path.First();

            Assert.AreEqual("A", edge1.Vertex1);
            Assert.AreEqual("B", edge1.Vertex2);
            Assert.AreEqual(2, edge1.Edge);
            EdgeDescriptor <string, int> edge2 = path.Last();

            Assert.AreEqual("A", edge2.Vertex1);
            Assert.AreEqual("C", edge2.Vertex2);
            Assert.AreEqual(3, edge2.Edge);
        }
예제 #3
0
        public void AdjacencyList_RemoveVertex_RemovesVerticesWithEdges()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            int    vertex3 = 30;
            int    vertex4 = 40;
            string edge1   = "20-30";
            string edge2   = "30-40";

            AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>();

            adjacencyList.AddVertex(vertex1);
            adjacencyList.AddVertex(vertex2);
            adjacencyList.AddVertex(vertex3);
            adjacencyList.AddVertex(vertex4);
            adjacencyList.AddEdge(vertex2, vertex3, edge1);
            adjacencyList.AddEdge(vertex3, vertex4, edge2);

            Assert.Equal(4, adjacencyList.NumVertices);
            Assert.Equal(edge1, adjacencyList.FindEdge(vertex2, vertex3));
            Assert.Equal(edge2, adjacencyList.FindEdge(vertex3, vertex4));

            adjacencyList.RemoveVertex(vertex2);

            Assert.Equal(3, adjacencyList.NumVertices);
            Assert.Equal(edge2, adjacencyList.FindEdge(vertex3, vertex4));
        }
예제 #4
0
        public void ShortestPathSearcher_Integration_DefaultAggregativeWeight()
        {
            string vertexA = "A", vertexB = "B", vertexC = "C", vertexD = "D";

            // Graph A-B, A-C, B-D, B-A
            AdjacencyList <string, int> graph = new AdjacencyList <string, int>();

            graph.AddVertex(vertexA);
            graph.AddVertex(vertexB);
            graph.AddVertex(vertexC);
            graph.AddVertex(vertexD);
            graph.AddEdge(vertexA, vertexB, 10);
            graph.AddEdge(vertexB, vertexA, 5);
            graph.AddEdge(vertexA, vertexC, 20);
            graph.AddEdge(vertexB, vertexD, 10);

            ShortestPathSearcher <string, int>          searcher = new ShortestPathSearcher <string, int>(graph, vertexA, vertexD, (i) => i);
            IEnumerable <EdgeDescriptor <string, int> > path = searcher.FindShortestPath();

            Assert.IsNotNull(path);
            Assert.AreEqual(2, path.Count());
            EdgeDescriptor <string, int> firstDesc = path.First();

            Assert.AreEqual("B", firstDesc.Vertex1);
            Assert.AreEqual("A", firstDesc.Vertex2);
            Assert.AreEqual(5, firstDesc.Edge);
            EdgeDescriptor <string, int> lastDesc = path.Last();

            Assert.AreEqual("B", lastDesc.Vertex1);
            Assert.AreEqual("D", lastDesc.Vertex2);
            Assert.AreEqual(10, lastDesc.Edge);
        }
예제 #5
0
        public void AdjacencyList_AddVertex_DeclinesAddingDuplicatedVertices()
        {
            int vertex1 = 10;
            AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>();

            adjacencyList.AddVertex(vertex1);
            adjacencyList.AddVertex(vertex1);
        }
예제 #6
0
        public void AdjacencyList_AddVertex_DeclinesAddingDuplicatedVertices()
        {
            int vertex1 = 10;
            AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>();

            adjacencyList.AddVertex(vertex1);
            var exception = Assert.Throws <InvalidOperationException>(() => adjacencyList.AddVertex(vertex1));

            Assert.Equal("Duplicated vertex '10'", exception.Message);
        }
예제 #7
0
        public void AdjacencyList_AddVertex_AddsANewUniqueVertex()
        {
            int vertex1 = 10;
            int vertex2 = 20;

            AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>();

            adjacencyList.AddVertex(vertex1);
            adjacencyList.AddVertex(vertex2);
            Assert.Equal(2, adjacencyList.NumVertices);
            Assert.True(adjacencyList.HasVertex(vertex1));
            Assert.True(adjacencyList.HasVertex(vertex2));
        }
예제 #8
0
        public void GraphExtensions_GetOrderedVertices_ReturnsOrderedVertixDescriptors()
        {
            IGraph <string, string> graph = new AdjacencyList <string, string>();

            graph.AddVertex("BBB");
            graph.AddVertex("AAA");
            graph.AddVertex("ABA");
            graph.AddVertex("BAB");

            var vertices = graph.GetOrderedVertices(StringComparer.CurrentCulture);

            Assert.Equal("AAA", vertices.ElementAt(0).Vertex);
            Assert.Equal("ABA", vertices.ElementAt(1).Vertex);
            Assert.Equal("BAB", vertices.ElementAt(2).Vertex);
            Assert.Equal("BBB", vertices.ElementAt(3).Vertex);
        }
예제 #9
0
        public void AdjacencyList_NumVertices_ReturnsNumberOfVertices()
        {
            int vertex1 = 10;
            int vertex2 = 20;

            AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>();

            Assert.Equal(0, adjacencyList.NumVertices);

            adjacencyList.AddVertex(vertex1);
            Assert.Equal(1, adjacencyList.NumVertices);

            adjacencyList.AddVertex(vertex2);
            Assert.Equal(2, adjacencyList.NumVertices);

            adjacencyList.RemoveVertex(vertex2);
            Assert.Equal(1, adjacencyList.NumVertices);
        }
예제 #10
0
        public void AdjacencyList_FindEdge_LooksForEdgesByVertices()
        {
            int    vertex1 = 10;
            int    vertex2 = 20;
            int    vertex3 = 30;
            int    vertex4 = 40;
            string edge1   = "20-30";
            string edge2   = "30-40";

            AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>();

            adjacencyList.AddVertex(vertex1);
            adjacencyList.AddVertex(vertex2);
            adjacencyList.AddVertex(vertex3);
            adjacencyList.AddVertex(vertex4);
            adjacencyList.AddEdge(vertex2, vertex3, edge1);
            adjacencyList.AddEdge(vertex3, vertex4, edge2);

            Assert.Equal(edge1, adjacencyList.FindEdge(vertex2, vertex3));
            Assert.Equal(edge2, adjacencyList.FindEdge(vertex3, vertex4));
        }
예제 #11
0
        public void AdjacencyList_HasVertex_ChecksWhetherVertexExists()
        {
            int vertex1 = 10;
            int vertex2 = 20;

            AdjacencyList <int, string> adjacencyList = new AdjacencyList <int, string>();

            Assert.False(adjacencyList.HasVertex(vertex1));
            Assert.False(adjacencyList.HasVertex(vertex2));

            adjacencyList.AddVertex(vertex1);
            Assert.True(adjacencyList.HasVertex(vertex1));
            Assert.False(adjacencyList.HasVertex(vertex2));

            adjacencyList.AddVertex(vertex2);
            Assert.True(adjacencyList.HasVertex(vertex1));
            Assert.True(adjacencyList.HasVertex(vertex2));

            adjacencyList.RemoveVertex(vertex2);
            Assert.True(adjacencyList.HasVertex(vertex1));
            Assert.False(adjacencyList.HasVertex(vertex2));
        }
예제 #12
0
        public void GraphExtensions_GetOrderedEdges_ReturnsOrderedEdgeDescriptors()
        {
            IGraph <string, string> graph = new AdjacencyList <string, string>();

            graph.AddVertex("BBB");
            graph.AddVertex("AAA");
            graph.AddVertex("ABA");
            graph.AddVertex("BAB");

            graph.AddEdge("ABA", "BBB", "aba-bbb");
            graph.AddEdge("ABA", "AAA", "aba-aaa");
            graph.AddEdge("ABA", "BAB", "aba-bab");
            // Those opposite edges will be ignored
            graph.AddEdge("AAA", "ABA", "aaa-aba");
            graph.AddEdge("BBB", "ABA", "bbb-aba");

            var edges = graph.FindVertexDescriptor("ABA").GetOrderedEdges(StringComparer.CurrentCulture);

            Assert.Equal(3, edges.Count());
            Assert.Equal("AAA", edges.ElementAt(0).Vertex2);
            Assert.Equal("BAB", edges.ElementAt(1).Vertex2);
            Assert.Equal("BBB", edges.ElementAt(2).Vertex2);
        }
예제 #13
0
        private void MouseClickDrawForm(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                VertexDraw vertexDraw = new VertexDraw(BrushColor.Orange, BrushColor.Green
                                                       , e.X - (int)VertexParameters.Radius, e.Y - (int)VertexParameters.Radius
                                                       , (int)VertexParameters.Width, (int)VertexParameters.Height, "Саси"
                                                       , vertexDraws.Count);


                if ((collisionVertex.IsDrawVertex(vertexDraw, vertexDraws)) && (startVertexId != -1))
                {
                    vertexDraw.VertexMove(vertexDraws, ref startVertexId
                                          , e.X - (int)VertexParameters.Radius, e.Y - (int)VertexParameters.Radius);

                    Refresh();
                }
                else if (collisionVertex.IsDrawVertex(vertexDraw, vertexDraws))
                {
                    adjacencyList.AddVertex(new CraphModel.Vertex {
                        Id = vertexDraws.Count, Nodes = new List <CraphModel.Node>()
                    });

                    adListPanel.UpdateIdPanel();

                    vertexDraws.Add(vertexDraw);

                    matrixWeightPanel.ExpandMatrix(1);

                    Refresh();
                }
                else
                {
                    drawingEdges.VertexFind(newEdgeDefinition, e, vertexDraws, edgeDraws, ref startVertexId, ref endVertexId, ref adjacencyList, adListPanel, matrixWeightPanel);

                    Refresh();
                }

                if (DialogResult == DialogResult.Cancel)
                {
                    Application.Exit();
                }
            }
        }
예제 #14
0
    void randomlyPlaceNodes()      //also adds vertexes to adjacencylist
    {
        int numNodes = masterNodeList.Length;

        // add nodes
        for (int i = 0; i < numNodes; i++)
        {
            // add vertexes
            if (i != 0)
            {
                adjacencyList.AddVertex(i);
            }

            GameObject myNodeInstance =
                Instantiate(Resources.Load("Node"),
                            new Vector3(Random.Range(-NODE_SPREAD, NODE_SPREAD), Random.Range(-NODE_SPREAD, NODE_SPREAD) + 5.0f, Random.Range(-NODE_SPREAD, NODE_SPREAD) + DISTANCE_FROM_FACE),
                            Quaternion.identity) as GameObject;
            masterNodeList [i] = new Node(myNodeInstance, i);
        }
    }
예제 #15
0
 protected void LoadInput()
 {
     //first ensure all the dict are initialized
     foreach (var node in _nodes)
     {
         _adjacencyList.AddVertex(node);
     }
     //make a link between nodes that have summed values that mod 3 are equals to 0
     foreach (var node in _nodes)
     {
         foreach (var innerNode in _nodes)
         {
             //when node + innerNode is divisible by three add a link between them
             //e.g. 1 will have edges with 2 and 5
             if ((node + innerNode) % 3 != 0 || node == innerNode)
             {
                 continue;
             }
             _adjacencyList.AddEdge(node, innerNode);
             _adjacencyList.AddEdge(innerNode, node);
         }
     }
 }
예제 #16
0
    public CityUtil()
    {
        city_dict.Add(0, "沈阳");
        city_dict.Add(1, "北京");
        city_dict.Add(2, "天津");
        city_dict.Add(3, "石家庄");
        city_dict.Add(4, "济南");
        city_dict.Add(5, "郑州");
        city_dict.Add(6, "南京");
        city_dict.Add(7, "杭州");
        city_dict.Add(8, "上海");
        city_dict.Add(9, "合肥");

        city_list.AddVertex("沈阳");
        city_list.AddVertex("北京");
        city_list.AddVertex("天津");
        city_list.AddVertex("石家庄");
        city_list.AddVertex("济南");
        city_list.AddVertex("郑州");
        city_list.AddVertex("南京");
        city_list.AddVertex("杭州");
        city_list.AddVertex("上海");
        city_list.AddVertex("合肥");

        city_list.AddEdge("合肥", "杭州");
        city_mapping_list[0] = new CityMapping(0, "合肥", "杭州");

        city_list.AddEdge("合肥", "郑州");
        city_mapping_list[1] = new CityMapping(1, "合肥", "郑州");


        city_list.AddEdge("杭州", "郑州");
        city_mapping_list[2] = new CityMapping(2, "杭州", "郑州");

        city_list.AddEdge("杭州", "南京");
        city_mapping_list[3] = new CityMapping(3, "杭州", "南京");

        city_list.AddEdge("杭州", "上海");
        city_mapping_list[4] = new CityMapping(4, "杭州", "上海");


        city_list.AddEdge("郑州", "南京");
        city_mapping_list[5] = new CityMapping(5, "郑州", "南京");

        city_list.AddEdge("郑州", "石家庄");
        city_mapping_list[6] = new CityMapping(6, "郑州", "石家庄");


        city_list.AddEdge("南京", "石家庄");
        city_mapping_list[7] = new CityMapping(7, "南京", "石家庄");

        city_list.AddEdge("南京", "天津");
        city_mapping_list[8] = new CityMapping(8, "南京", "天津");

        city_list.AddEdge("南京", "济南");
        city_mapping_list[9] = new CityMapping(9, "南京", "济南");

        city_list.AddEdge("南京", "上海");
        city_mapping_list[10] = new CityMapping(10, "南京", "上海");


        city_list.AddEdge("上海", "济南");
        city_mapping_list[11] = new CityMapping(11, "上海", "济南");


        city_list.AddEdge("石家庄", "济南");
        city_mapping_list[12] = new CityMapping(12, "石家庄", "济南");


        city_list.AddEdge("石家庄", "北京");
        city_mapping_list[13] = new CityMapping(13, "石家庄", "北京");

        city_list.AddEdge("济南", "天津");
        city_mapping_list[14] = new CityMapping(14, "济南", "天津");


        city_list.AddEdge("北京", "沈阳");
        city_mapping_list[15] = new CityMapping(15, "北京", "沈阳");

        city_list.AddEdge("天津", "沈阳");
        city_mapping_list[16] = new CityMapping(16, "天津", "沈阳");

        city_list.AddEdge("合肥", "济南");
        city_mapping_list[17] = new CityMapping(17, "合肥", "济南");

        city_list.AddEdge("郑州", "济南");
        city_mapping_list[18] = new CityMapping(18, "郑州", "济南");

        city_tikcet_mapping["上海"] = new List <string>();
        city_tikcet_mapping["上海"].Add("杭州");

        city_tikcet_mapping["杭州"] = new List <String>();
        city_tikcet_mapping["杭州"].Add("南京");

        city_tikcet_mapping["南京"] = new List <string>();
        city_tikcet_mapping["南京"].Add("合肥");
        city_tikcet_mapping["南京"].Add("郑州");

        city_tikcet_mapping["合肥"] = new List <String>();
        city_tikcet_mapping["合肥"].Add("郑州");
        city_tikcet_mapping["合肥"].Add("济南");

        city_tikcet_mapping["郑州"] = new List <String>();
        city_tikcet_mapping["郑州"].Add("石家庄");
        city_tikcet_mapping["郑州"].Add("济南");


        city_tikcet_mapping["济南"] = new List <String>();
        city_tikcet_mapping["济南"].Add("石家庄");
        city_tikcet_mapping["济南"].Add("天津");

        city_tikcet_mapping["石家庄"] = new List <String>();
        city_tikcet_mapping["石家庄"].Add("北京");

        city_tikcet_mapping["北京"] = new List <String>();
        city_tikcet_mapping["北京"].Add("沈阳");


        city_tikcet_mapping["天津"] = new List <String>();
        city_tikcet_mapping["天津"].Add("北京");
        city_tikcet_mapping["天津"].Add("沈阳");
    }
        public void AddVertexTest_AddExistVertex_ExceptionExpected()
        {
            var ex = Assert.Throws <System.Exception>(() => adList.AddVertex(vertex));

            Assert.AreEqual(ex.Message, "This vertex is already in the list of adjacencies");
        }
예제 #18
0
    void parseGraph(string nodeAsset, int dimensionality, int type)
    {
        TextAsset positionsText = Resources.Load(nodeAsset) as TextAsset;

        string[,] myPositionsGrid = CSVReader.SplitCsvGrid(positionsText.text);
        int numberOfNodes = myPositionsGrid.GetUpperBound(1) - 1;

        masterNodeList         = new Node[numberOfNodes];
        indicesToShowOrExplode = new int[numberOfNodes];

        // add nodes
        for (int i = 1; (i < numberOfNodes + 1); i++)
        {
            if (i != 0)
            {
                adjacencyList.AddVertex(i);
            }

            Vector3 position;

            int startIndexCoordinates;

            if (type == DATA_MNIST)
            {
                startIndexCoordinates = 3;
            }
            else
            {
                startIndexCoordinates = 8;
            }

            float x_3d = float.Parse(myPositionsGrid[startIndexCoordinates, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER;
            float y_3d = float.Parse(myPositionsGrid[startIndexCoordinates + 1, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER;
            float z_3d = float.Parse(myPositionsGrid[startIndexCoordinates + 2, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER;

            float x_2d = float.Parse(myPositionsGrid[startIndexCoordinates + 3, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER;
            float y_2d = float.Parse(myPositionsGrid[startIndexCoordinates + 4, i]) * ConstantsSpacerock.GRAPH_SPREAD_MULTIPLIER * ConstantsSpacerock.TOTAL_GRAPH_SCALE_MULTIPLIER;

            if (dimensionality == GRAPH_3D)
            {
                position = new Vector3(
                    x_3d,
                    y_3d,
                    z_3d
                    );
            }
            else
            {
                position = new Vector3(
                    x_2d,
                    y_3d,
                    0.0f
                    );
            }
            string label = myPositionsGrid[0, i];

            GameObject myNodeInstance =
                Instantiate(Resources.Load("Node") as GameObject,
                            position,
                            Quaternion.identity) as GameObject;

            //don't do getcomp live
            LayerSelfBasedOnRelativeLocations layerScript = myNodeInstance.GetComponent <LayerSelfBasedOnRelativeLocations>();
            layerScript.eagleEyeCamera  = eagleEyeCamera;
            layerScript.headsetLocation = playerCamera;


            NodeForce nodeScript = myNodeInstance.GetComponent <NodeForce>();

            nodeScript.x_3d = x_3d;
            nodeScript.y_3d = y_3d;
            nodeScript.z_3d = z_3d;

            nodeScript.x_2d = x_2d;
            nodeScript.y_2d = y_2d;

            nodeScript.SetText(myPositionsGrid[1, i]);

            nodeScript.degree = int.Parse(myPositionsGrid[2, i]);

            nodeScript.SetScaleFromDegree(nodeScript.degree);

            masterNodeList[i - 1] = new Node(myNodeInstance, i - 1);

            if (type == DATA_TWITTER)
            {
                masterNodeList[i - 1].nodeForce.group         = int.Parse(myPositionsGrid[3, i]);
                masterNodeList[i - 1].nodeForce.followerCount = (int)float.Parse(myPositionsGrid[4, i]);
            }
            else if (type == DATA_MNIST)
            {
                masterNodeList[i - 1].nodeForce.group = (int)float.Parse(myPositionsGrid[1, i]);
            }



            NodeGroup nodeGroupWrapperObject;
            // if this is a new key, make a new group
            if (!nodeGroups.ContainsKey(masterNodeList[i - 1].nodeForce.group))
            {
                GameObject nodeGroupObject = Instantiate(Resources.Load("NodeGroupContainer") as GameObject, new Vector3(0.0f, 0.0f, 0.0f), Quaternion.identity) as GameObject;

                nodeGroupWrapperObject = new NodeGroup(nodeGroupObject);

                nodeGroupWrapperObject.nodeGroupContainerScript.groupNumber = masterNodeList[i - 1].nodeForce.group;

                nodeGroupWrapperObject.gameObject.transform.parent = nodeContainer.transform;

                nodeGroups.Add(
                    masterNodeList[i - 1].nodeForce.group,
                    nodeGroupWrapperObject
                    );
            }
            else // give access to the existing group
            {
                nodeGroupWrapperObject = nodeGroups[masterNodeList[i - 1].nodeForce.group];
            }
            masterNodeList[i - 1].nodeForce.SetColorByGroup(masterNodeList[i - 1].nodeForce.group);

            masterNodeList[i - 1].gameObject.transform.parent = nodeGroupWrapperObject.gameObject.transform; // not sure if this is gonna work right, off the bat

            // populate an array for the mnist image
            if (type == DATA_MNIST)
            {
                for (int q = 0; q < MNIST_IMAGE_SIZE; q++)
                {
                    for (int r = 0; r < MNIST_IMAGE_SIZE; r++)
                    {
                        //print("q: " + q + "... r: " + r);
                        masterNodeList[i - 1].nodeForce.image[q, r] = float.Parse(myPositionsGrid[startIndexCoordinates + 5 + q * MNIST_IMAGE_SIZE + r, i]);
                    }
                }
            }

            nameToID.Add(label, i - 1);
        }
    }
예제 #19
0
 public Vertex AddVertex(string id) => adjacencyList.AddVertex(id);
예제 #20
0
 protected override int AddVertex(AdjacencyList <string, int> graph, string label)
 {
     return(graph.AddVertex(label));
 }
예제 #21
0
 /// <summary>
 /// Add a vertex to the network.
 /// </summary>
 public int AddVertex()
 {
     return(_adjacencyList.AddVertex());
 }