Example #1
0
        public IList <Neighbour> FindNeighbours(IList <Model.Edge> solution)
        {
            var neighbours = new List <Neighbour>();

            foreach (var edge in solution)
            {
                foreach (var anotherEdge in solution.Skip(solution.IndexOf(edge) + 1).ToList())
                {
                    var addedEdge1  = new Edge(edge.Start, anotherEdge.End);
                    var addedEdge2  = new Edge(anotherEdge.Start, edge.End);
                    var newSolution = new List <Edge>(solution);
                    newSolution.Remove(edge);
                    newSolution.Remove(anotherEdge);
                    newSolution.Add(addedEdge1);
                    newSolution.Add(addedEdge2);
                    var edgesAdded = new EdgesAdded(addedEdge1, addedEdge2);
                    neighbours.Add(new Neighbour
                    {
                        AddedEdges = edgesAdded,
                        Cost       = this.costFinder.GetCost(newSolution) +
                                     // TODO współczynnik
                                     this.longTermMemory.numberRecurrences(edgesAdded),
                        NewSolution = newSolution
                    });
                }
            }

            return(neighbours);
        }
Example #2
0
 public void AddChange(EdgesAdded addedEdges)
 {
     if (ChangesList.Count >= MaxNumberOfEdge)
     {
         ChangesList.RemoveAt(0);
     }
     ChangesList.Add(addedEdges);
 }
Example #3
0
 public static bool AreEqual(this EdgesAdded edges1, EdgesAdded edges2)
 {
     if ((edges1.Edge1.AreEqual(edges2.Edge1) && edges1.Edge2.AreEqual(edges2.Edge2)) ||
         (edges1.Edge1.AreEqual(edges2.Edge2) && edges1.Edge2.AreEqual(edges2.Edge1)))
     {
         return(true);
     }
     return(false);
 }
Example #4
0
        public void AddChange(EdgesAdded addedEdges)
        {
            // NOTICE: elements in addedEdges should be unique.

            tabuList.Add(addedEdges);
            if (tabuList.Count > this.maxSize)
            {
                tabuList.RemoveAt(0);
            }
        }
Example #5
0
 public bool IsOntabuList(EdgesAdded addedEdges)
 {
     foreach (var element in tabuList)
     {
         if (element.AreEqual(addedEdges))
         {
             return(true);
         }
     }
     return(false);
 }
Example #6
0
        public int numberOfRecurrencesTests(int addNumbers)
        {
            LongTermMemory ltm = new LongTermMemory(10);
            Vertex         v1  = new Vertex(10, 10);
            Vertex         v2  = new Vertex(20, 20);
            Vertex         v3  = new Vertex(30, 30);
            Vertex         v4  = new Vertex(40, 40);

            Edge       edge1      = new Edge(v1, v2);
            Edge       edge2      = new Edge(v3, v4);
            EdgesAdded edgesAdded = new EdgesAdded(edge1, edge2);
            bool       b          = edgesAdded.AreEqual(edgesAdded);

            for (int i = 0; i < addNumbers; i++)
            {
                ltm.AddChange(edgesAdded);
            }
            return(ltm.numberRecurrences(edgesAdded));
        }
Example #7
0
        private bool AddElementsAndCheck(IList <EdgesAdded> elementsToAdd, int tabuListSize, EdgesAdded elementToCheck)
        {
            var tabuList = new TabuList(tabuListSize);

            foreach (var element in elementsToAdd)
            {
                tabuList.AddChange(element);
            }
            return(tabuList.IsOntabuList(elementToCheck));
        }
Example #8
0
 public int numberRecurrences(EdgesAdded edges)
 {
     return(ChangesList.Count(s => s.AreEqual(edges)));
 }
Example #9
0
 public bool isOnTheList(EdgesAdded edges)
 {
     return(ChangesList.Contains(edges));
 }