Ejemplo n.º 1
0
 public NodePair(NodePair p) : this(NQuantLibcPINVOKE.new_NodePair__SWIG_2(NodePair.getCPtr(p)), true)
 {
     if (NQuantLibcPINVOKE.SWIGPendingException.Pending)
     {
         throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
     }
 }
Ejemplo n.º 2
0
        private void MultithreadedOverlap(int i)
        {
            NodePair overlap = multithreadingSourceOverlaps.Elements[i];

            //Note: It's okay not to check to see if a and b are equal and leaf nodes, because the systems which added nodes to the list already did it.
            overlap.a.GetOverlaps(overlap.b, this);
        }
        /* This is the recursive function that converts the binary tree to linked list and returns the Nodepair containaining the head and tail */
        public NodePair ConvertMethod1(BiNode root)
        {
            if (root == null)
            {
                return(null);
            }
            //Part1 maintains the head and builds the list forward ..adding tail
            NodePair part1 = ConvertMethod1(root.Node1);
            //part2 maintains the tail and build the list backwards..adding head
            NodePair part2 = ConvertMethod1(root.Node2);

            //remember part1 will be nodepair with head and tail
            if (part1 != null)
            {
                //we want to merge and form linked list in this fashion    Head--->Tail + root
                Concat(part1.Tail, root);
            }
            if (part2 != null)
            {
                //part2 maintains the tail and build the list backwards..adding head
                //in this fashion     root + head ---> tail
                Concat(root, part2.Head);
            }

            NodePair result = new NodePair(part1 == null ? root : part1.Head,
                                           part2 == null ? root : part2.Tail);

            return(result);
        }
Ejemplo n.º 4
0
        //增加點和線到 chart data
        public void AddNodeLink(ChartData chartData, NodePair pair)
        {
            //確認線不存在,新增node 和 link
            bool ExistLinkFlag = CheckExistedLink(chartData, pair.Link);

            if (ExistLinkFlag)
            {
                //string imageUrl = "../Image/person.png";

                Color  color    = Color.FromArgb(ImportHelper.RandColor.Next(256), ImportHelper.RandColor.Next(170, 256), ImportHelper.RandColor.Next(200, 256));
                string colorStr = "#" + color.R.ToString("X2") + color.G.ToString("X2") + color.B.ToString("X2");

                //確認點不存在,新增node
                if (!CheckExistedNode(chartData, pair.Node1.ID))
                {
                    pair.Node1.Color = colorStr;
                    chartData.Items.Add(pair.Node1);
                }

                //確認點不存在,新增node
                if (!CheckExistedNode(chartData, pair.Node2.ID))
                {
                    pair.Node2.Color = colorStr;
                    chartData.Items.Add(pair.Node2);
                }


                //加入線
                pair.Link.Color = colorStr;
                pair.Link.ID1   = pair.Node1.ID;
                pair.Link.ID2   = pair.Node2.ID;
                chartData.Items.Add(pair.Link);
            }
        }
Ejemplo n.º 5
0
    NodePair GetRandomPair()
    {
        NodePair pair = new NodePair(Random.Range(0, 8), Random.Range(0, 8));

        if (pair.first == pair.second)
        {
            pair = GetRandomPair();
        }


        bool foundMatchingPair = false;

        foreach (NodePair n in currentPairs)
        {
            if (n.first == pair.first && n.second == pair.second)
            {
                foundMatchingPair = true;
            }
        }

        if (foundMatchingPair)
        {
            return(GetRandomPair());
        }
        else
        {
            return(pair);
        }
    }
Ejemplo n.º 6
0
        private void WriteWrongDelta(NodePair np)
        {
            _sw.WriteLine("Перемещения в узле в мoдели и в ПЕ различны");
            _sw.WriteLine("\tМодель:");
            _sw.WriteLine($"\tX: {np.DeltaMain.X}");
            _sw.WriteLine($"\tY: {np.DeltaMain.Y}");
            _sw.WriteLine($"\tZ: {np.DeltaMain.Z}");
            _sw.WriteLine($"\tUX: {np.DeltaMain.UX}");
            _sw.WriteLine($"\tUY: {np.DeltaMain.UY}");
            _sw.WriteLine($"\tUZ: {np.DeltaMain.UZ}\n");

            _sw.WriteLine("\tПЕ:");
            _sw.WriteLine($"\tX: {np.DeltaPU.X}");
            _sw.WriteLine($"\tY: {np.DeltaPU.Y}");
            _sw.WriteLine($"\tZ: {np.DeltaPU.Z}");
            _sw.WriteLine($"\tUX: {np.DeltaPU.UX}");
            _sw.WriteLine($"\tUY: {np.DeltaPU.UY}");
            _sw.WriteLine($"\tUZ: {np.DeltaPU.UZ}\n");

            _sw.WriteLine("\tОтклонение:");
            _sw.WriteLine($"\tX: {Math.Abs(np.DeltaMain.X - np.DeltaPU.X)}");
            _sw.WriteLine($"\tY: {Math.Abs(np.DeltaMain.Y - np.DeltaPU.Y)}");
            _sw.WriteLine($"\tZ: {Math.Abs(np.DeltaMain.Z - np.DeltaPU.Z)}");
            _sw.WriteLine($"\tUX: {Math.Abs(np.DeltaMain.UX - np.DeltaPU.UX)}");
            _sw.WriteLine($"\tUY: {Math.Abs(np.DeltaMain.UY - np.DeltaPU.UY)}");
            _sw.WriteLine($"\tUZ: {Math.Abs(np.DeltaMain.UZ - np.DeltaPU.UZ)}\n");
            _sw.WriteLine($"ПЕ № {np.PuParams.Item1}, загружение № {np.PuParams.Item2}, узел № {np.PuParams.Item3}");
            _sw.WriteLine($"В модели загружение № {np.MainParams.Item1}, узел № {np.MainParams.Item2}");
            _sw.WriteLine("--------------------------------------------------------\n");
            _countWrongDelta++;
        }
Ejemplo n.º 7
0
        private void SelectForStack(IEnumerable <NodePair> stackable, PieceType mostPieceType, PieceType secondMostPieceType, PieceType stackType)
        {
            //get tallest stack for this type
            var bigStack = stackable.Where(s => s.Select.TopPiece.Type == stackType)
                           .OrderByDescending(o => o.Select.StackHeight)
                           .FirstOrDefault();

            //tallest cannot stack
            if (bigStack == null)
            {
                _selection = null;
                return;
            }

            //can stack on most pieces type
            _selection = stackable.Where(s => s.Select == bigStack.Select && s.Target.TopPiece.Type == mostPieceType)
                         .FirstOrDefault();

            //stack on second most piece type
            if (_selection == null)
            {
                _selection = stackable.Where(s => s.Select == bigStack.Select && s.Target.TopPiece.Type == secondMostPieceType)
                             .FirstOrDefault();
            }
        }
Ejemplo n.º 8
0
    protected NodePair GetTwoClosestNodesFromTwoGraphs(List <Node> graphA, List <Node> graphB)
    {
        NodePair closestNodePair = null;

        for (int i = 0; i < graphA.Count; i++)
        {
            for (int j = 0; j < graphB.Count; j++)
            {
                Node  nodeA    = graphA[i];
                Node  nodeB    = graphB[j];
                float distance = Vector3.Distance(nodeA.transform.position, nodeB.transform.position);

                if (closestNodePair != null)
                {
                    if (distance < closestNodePair.distance)
                    {
                        closestNodePair.nodeA    = nodeA;
                        closestNodePair.nodeB    = nodeB;
                        closestNodePair.distance = distance;
                    }
                }
                else
                {
                    closestNodePair = new NodePair(nodeA, nodeB, distance);
                }
            }
        }

        return(closestNodePair);
    }
Ejemplo n.º 9
0
Archivo: AStar.cs Proyecto: 2021SIA/TP1
        public override Node GetSolution(out int expanded, out int frontier)
        {
            var      found   = new HashSet <State>();
            var      heap    = new SortedSet <NodePair>(new NodeComparer(Heuristic));
            NodePair current = null;

            expanded = 0;

            heap.Add(new (Root, 0));
            found.Add(Root.State);
            while (heap.Count > 0)
            {
                current = heap.Min;
                heap.Remove(current);
                if (current.Node.State.IsGoal)
                {
                    break;
                }
                expanded++;
                foreach (var action in current.Node.State.PosibleActions())
                {
                    Node child = new(current.Node, action.Value, action.Key);
                    if (!found.Contains(child.State) && !child.State.IsDead())
                    {
                        found.Add(child.State);
                        heap.Add(new(child, current.Depth + 1));
                    }
                }
            }
            frontier = heap.Count;
            return(current?.Node);
        }
Ejemplo n.º 10
0
        private void SelectLeastCommonOpponentTypeForCapture(IEnumerable <NodePair> captures)
        {
            var leastType = captures.GroupBy(np => np.Target.TopPiece.Type)
                            .OrderBy(grp => grp.Count())
                            .FirstOrDefault();

            _selection = leastType.ElementAt(Rng.Next(leastType.Count()));
        }
Ejemplo n.º 11
0
        public void Add(IFact fact, TElement element)
        {
            var nodePair = new NodePair(fact, element);

            _facts.AddLast(nodePair.FactNode);
            _elements.AddLast(nodePair.ElementNode);
            _nodeLookup[fact] = nodePair;
        }
Ejemplo n.º 12
0
 public bool Equals(NodePair np)
 {
     if (np == null)
     {
         return(false);
     }
     return((this.n1.Equals(np.n1) && this.n2.Equals(np.n2)) ||
            (this.n1.Equals(np.n2) && this.n2.Equals(np.n1)));
 }
Ejemplo n.º 13
0
 private void WriteWrongCoords(NodePair np)
 {
     _sw.WriteLine("Узел с указанными координатами не найден в модели:");
     _sw.WriteLine($"\tX: {np.CoordPU.X}");
     _sw.WriteLine($"\tY: {np.CoordPU.Y}");
     _sw.WriteLine($"\tZ: {np.CoordPU.Z}");
     _sw.WriteLine($"ПЕ № {np.PuParams.Item1}, узел № {np.PuParams.Item3}");
     _sw.WriteLine("--------------------------------------------------------\n");
     _countWrongCoords++;
 }
Ejemplo n.º 14
0
        private void SelectForWinningCapture(IEnumerable <NodePair> captures)
        {
            var winningCapture = captures.GroupBy(np => np.Target.TopPiece.Type)
                                 .Where(grp => grp.Count() == 1)
                                 .FirstOrDefault();

            if (winningCapture != null)
            {
                _selection = winningCapture.FirstOrDefault();
            }
        }
Ejemplo n.º 15
0
 private void AddRandomPair()
 {
     if (currentPairs.Count < 10)
     {
         NodePair pair = GetRandomPair();
         pair.line.SetPosition(0, positions[pair.first] * positionOffset);
         pair.line.SetPosition(1, positions[pair.second] * positionOffset);
         pair.line.material = lineMaterial;
         currentPairs.Add(pair);
     }
 }
Ejemplo n.º 16
0
        //產生一對node
        public NodePair MapNodePair(string node1ID, string node2ID)
        {
            NodePair pair = new NodePair();

            pair.Node1.ID   = node1ID;
            pair.Node1.Text = node1ID;
            pair.Node2.ID   = node2ID;
            pair.Node2.Text = node2ID;
            pair.Link.ID    = node1ID + "-" + node2ID;

            return(pair);
        }
Ejemplo n.º 17
0
        public void ToString_ReturnsExpectedString()
        {
            // Arrange
            var node1    = new Node(2, new Coordinates(-1, 4));
            var node2    = new Node(1, new Coordinates(1, 8));
            var nodePair = new NodePair(node1, node2);

            // Act
            var result = nodePair.ToString();

            // Assert
            Assert.Equal("[(1,8), (-1,4)]", result);
        }
Ejemplo n.º 18
0
        public void Constructor_WithNodesSuppliedInReverseIndexOrder_PopulatesNodesReversed()
        {
            // Arrange
            var node1 = new Node(2, new Coordinates(-1, 4));
            var node2 = new Node(1, new Coordinates(1, 8));

            // Act
            var nodePair = new NodePair(node1, node2);

            // Assert
            Assert.Equal(node2, nodePair.Node1);
            Assert.Equal(node1, nodePair.Node2);
        }
Ejemplo n.º 19
0
        public void Add(T value)
        {
            NodePair pair = Split(root, value);

            root = Merge(Merge(pair.Left, new Node(value)), pair.Right);
            if (compare(Max, value) < 0)
            {
                Max = value;
            }
            if (compare(Min, value) > 0)
            {
                Min = value;
            }
        }
Ejemplo n.º 20
0
        //用人 查詢  案件與共犯
        public void GetCrimeRecord(ChartData chartData, int personID)
        {
            NodePair pair   = null;
            Person   person = peoRep.Find(personID);

            if (person != null)
            {
                List <Case> crimes = caseRep.Query(c => c.PersonID == person.PersonID).ToList();
                foreach (var crime in crimes)
                {
                    pair = MapNodePair(person.Name, crime.Title);
                    pair.Node1.Data.Category            = "person";
                    pair.Node2.Data.Category            = "crime";
                    pair.Node1.Data.PersonData.PersonID = person.PersonID.ToString();

                    pair.Link.Text   = "犯案紀錄";
                    pair.Link.Arrow  = true;
                    pair.Link.Arrow2 = true;

                    if (pair != null)
                    {
                        AddNodeLink(chartData, pair);
                    }

                    var relatedIDs = crime.Related.Split(',').ToList();

                    var relateds = peoRep.Query(p => relatedIDs.Contains(p.PersonID.ToString()));
                    foreach (var rel in relateds)
                    {
                        pair = MapNodePair(crime.Title, rel.Name);
                        pair.Node1.Data.Category            = "crime";
                        pair.Node2.Data.Category            = "person";
                        pair.Node2.Data.PersonData.PersonID = rel.PersonID.ToString();

                        pair.Link.Text   = "共犯";
                        pair.Link.Arrow  = true;
                        pair.Link.Arrow2 = true;

                        if (pair != null)
                        {
                            AddNodeLink(chartData, pair);
                        }
                    }
                }
            }
        }
        public void Equals_WhenOneNull_ReturnsFalse()
        {
            // Arrange
            var nodePair = new NodePair(
                new Node(12, new Coordinates(10, 5)),
                new Node(13, new Coordinates(7, 2)));

            var comparer = NodePairCoordinatesEqualiyComparer.Default;

            // Act
            var result1 = comparer.Equals(nodePair, null);
            var result2 = comparer.Equals(null, nodePair);

            // Assert
            Assert.False(result1);
            Assert.False(result2);
        }
Ejemplo n.º 22
0
        public bool Select(Game game)
        {
            //get list of player nodes
            var playerNodes = game.Board.Nodes.Where(n => !n.IsVacant && n.TopPiece.PieceColor == Color).ToList();

            //get opposing players nodes
            var opposingNodes = game.Board.Nodes.Where(n => !n.IsVacant && n.TopPiece.PieceColor != Color).ToList();

            //get list of capturable nodes
            var captures = playerNodes.Join(opposingNodes, s => true, n => true,
                                            (s, n) => new NodePair {
                Select = s, Target = n
            })
                           .Where(a => game.IsValidMove(a.Select, a.Target) && a.Select.StackHeight >= a.Target.StackHeight);

            //get list of stackable nodes
            var stackable = playerNodes.Join(playerNodes, s => true, n => true,
                                             (s, n) => new NodePair {
                Select = s, Target = n
            })
                            .Where(a => a.Select != a.Target && game.IsValidMove(a.Select, a.Target));


            //todo random is slow
            if (game.TurnStage == TurnStage.CaptureStackOrPass && stackable.Count() > 0)
            {
                //Console.WriteLine($"BOT: stacking");
                _selection = stackable.ElementAt(Rng.Next(stackable.Count()));
            }
            else if (captures.Count() < 1 && game.TurnStage == TurnStage.CaptureStackOrPass)
            {
                //Console.WriteLine($"BOT: passing");
                _willPass = true;
            }
            else
            {
                //Console.WriteLine($"BOT: capturing");
                _selection = captures.ElementAt(Rng.Next(captures.Count()));
            }

            //Console.WriteLine($"BOT: selected {_selection.Select.Id}");
            //Console.WriteLine($"BOT: target {_selection.Target.Id}");
            return(game.SelectPiece(_selection.Select));
        }
        public void Equals_WhenCoordinatesDifferInNode2_ReturnsFalse()
        {
            // Arrange
            var nodePair1 = new NodePair(
                new Node(12, new Coordinates(10, 5)),
                new Node(13, new Coordinates(7, 2)));

            var nodePair2 = new NodePair(
                new Node(12, new Coordinates(10, 5)),
                new Node(13, new Coordinates(2, 7)));

            var comparer = NodePairCoordinatesEqualiyComparer.Default;

            // Act
            var result = comparer.Equals(nodePair1, nodePair2);

            // Assert
            Assert.False(result);
        }
        public void Equals_WhenBothHaveSameCoordinates_ReturnsTrue()
        {
            // Arrange
            var nodePair1 = new NodePair(
                new Node(12, new Coordinates(10, 5)),
                new Node(13, new Coordinates(7, 2)));

            var nodePair2 = new NodePair(
                new Node(13, new Coordinates(7, 2)),
                new Node(12, new Coordinates(10, 5)));

            var comparer = NodePairCoordinatesEqualiyComparer.Default;

            // Act
            var result = comparer.Equals(nodePair1, nodePair2);

            // Assert
            Assert.True(result);
        }
        public void GetHashCode_WhenCoordinatesDifferInNode2_ReturnsDifferentValue()
        {
            // Arrange
            var nodePair1 = new NodePair(
                new Node(12, new Coordinates(10, 5)),
                new Node(13, new Coordinates(7, 2)));

            var nodePair2 = new NodePair(
                new Node(12, new Coordinates(10, 5)),
                new Node(13, new Coordinates(7, 3)));

            var comparer = NodePairCoordinatesEqualiyComparer.Default;

            // Act
            var hashCode1 = comparer.GetHashCode(nodePair1);
            var hashCode2 = comparer.GetHashCode(nodePair2);

            // Assert
            Assert.NotEqual(hashCode1, hashCode2);
        }
        public void GetHashCode_WhenBothHaveSameCoordinates_ReturnsSameValue()
        {
            // Arrange
            var nodePair1 = new NodePair(
                new Node(12, new Coordinates(10, 5)),
                new Node(13, new Coordinates(7, 2)));

            var nodePair2 = new NodePair(
                new Node(13, new Coordinates(7, 2)),
                new Node(12, new Coordinates(10, 5)));

            var comparer = NodePairCoordinatesEqualiyComparer.Default;

            // Act
            var hashCode1 = comparer.GetHashCode(nodePair1);
            var hashCode2 = comparer.GetHashCode(nodePair2);

            // Assert
            Assert.Equal(hashCode1, hashCode2);
        }
Ejemplo n.º 27
0
    // a List<Node> is a graph?? let's go for it
    protected List <Node> ConnectTwoGraphs(List <Node> graphA, List <Node> graphB)
    {
        List <Node> connectedGraph = new List <Node>();

        // find 2 closest nodes and connect them with a rail
        NodePair twoClosestNodes = GetTwoClosestNodesFromTwoGraphs(graphA, graphB);

        twoClosestNodes.nodeA.ConnectMeToNode(twoClosestNodes.nodeB);

        twoClosestNodes.nodeA.name = string.Format("Hand Connected Node {0}", UnityEngine.Random.Range(0, 999));
        twoClosestNodes.nodeB.name = string.Format("Hand Connected Node {0}", UnityEngine.Random.Range(0, 999));

        Debug.LogFormat("Hand connected the nodes {0} and {1}! Enjoy!", twoClosestNodes.nodeA.name, twoClosestNodes.nodeB.name);

        // put 2 graphs into 1 list
        connectedGraph.AddRange(graphA);
        connectedGraph.AddRange(graphB);

        return(connectedGraph);
    }
Ejemplo n.º 28
0
 private NodePair Split(Node node, T value)
 {
     if (node == null)
     {
         return(new NodePair(null, null));
     }
     if (compare(node.Value, value) >= 0)
     {
         NodePair leftSplit = Split(node.Left, value);
         node.Left       = leftSplit.Right;
         leftSplit.Right = node;
         return(leftSplit);
     }
     else
     {
         NodePair rightSplit = Split(node.Right, value);
         node.Right      = rightSplit.Left;
         rightSplit.Left = node;
         return(rightSplit);
     }
 }
Ejemplo n.º 29
0
        //找尋chart data 有相關的"人"
        public void GetRelationship(ChartData chartData)
        {
            var      NodeIDs = chartData.Items.OfType <Node>().Select(n => n.ID);
            var      people  = peoRep.Query(p => NodeIDs.Contains(p.Name));
            NodePair pair    = null;

            foreach (var person in people)
            {
                var rels = relRep.Query(r => r.PersonID1 == person.PersonID || r.PersonID2 == person.PersonID);
                foreach (var rel in rels)
                {
                    Person related = null;
                    if (rel.PersonID1 != person.PersonID)
                    {
                        related = peoRep.Find(rel.PersonID1);
                    }
                    else
                    {
                        related = peoRep.Find(rel.PersonID2);
                    }

                    pair = MapNodePair(person.Name, related.Name);
                    pair.Node1.Data.Category            = "person";
                    pair.Node2.Data.Category            = "person";
                    pair.Node1.Data.PersonData.PersonID = person.PersonID.ToString();
                    pair.Node2.Data.PersonData.PersonID = related.PersonID.ToString();

                    pair.Link.Text   = rel.Relationship1;
                    pair.Link.Arrow  = true;
                    pair.Link.Arrow2 = true;

                    if (pair != null)
                    {
                        AddNodeLink(chartData, pair);
                    }
                }
            }
        }
Ejemplo n.º 30
0
            private void DecorateEdge(Dot.Edge dotEdge, NodePair <Node, Edge> pair, Label?label, EdgeStatus edgeStatus, Recorder <Graph, Node, Edge, Label> .RecordOptions options)
            {
                if (EdgeDiff.Commons.TryGetValue(pair, out var common))
                {
                    groupMap.TryGetValue(common.labelGroup.Group, out var labels);
                    // reverseGroupMap.TryGetValue(common.labelKey.Label, out var groups);

                    if (labels?.Count == 1)
                    {
                        dotEdge.Label = $"{common.labelGroup.Group}";
                    }
                    else
                    {
                        dotEdge.Label     = $"{common.labelGroup.Group}:[{common.labelKey.Label}]";
                        dotEdge.FontColor = Visualizer.ErrorColor;
                    }
                }
                else if (EdgeDiff.ExpectedOnlys.TryGetValue(pair, out var expectedOnly))
                {
                    dotEdge.Label     = $"{expectedOnly.Group} / ?";
                    dotEdge.FontColor = Visualizer.ErrorColor;
                }
            }
Ejemplo n.º 31
0
 private List<Match> SampleMatches(QueryGraph qg)
 {
     int matchNum = 20;
     Random ra = new Random();
     List<Match> res = new List<Match>();
     for (int i = 0; i < matchNum; ++i)
     {
         Match m = new Match();
         foreach (long cid in qg.CellIDSet)
         {
             NodePair np = new NodePair(cid, ra.Next());
             m.PartialMatch.Add(np);
         }
         res.Add(m);
     }
     return res;
 }
Ejemplo n.º 32
0
 internal static global::System.Runtime.InteropServices.HandleRef getCPtr(NodePair obj) {
   return (obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr;
 }
Ejemplo n.º 33
0
 public NodePair(NodePair p) : this(NQuantLibcPINVOKE.new_NodePair__SWIG_2(NodePair.getCPtr(p)), true) {
   if (NQuantLibcPINVOKE.SWIGPendingException.Pending) throw NQuantLibcPINVOKE.SWIGPendingException.Retrieve();
 }