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); }
public void AddChange(EdgesAdded addedEdges) { if (ChangesList.Count >= MaxNumberOfEdge) { ChangesList.RemoveAt(0); } ChangesList.Add(addedEdges); }
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); }
public void AddChange(EdgesAdded addedEdges) { // NOTICE: elements in addedEdges should be unique. tabuList.Add(addedEdges); if (tabuList.Count > this.maxSize) { tabuList.RemoveAt(0); } }
public bool IsOntabuList(EdgesAdded addedEdges) { foreach (var element in tabuList) { if (element.AreEqual(addedEdges)) { return(true); } } return(false); }
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)); }
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)); }
public int numberRecurrences(EdgesAdded edges) { return(ChangesList.Count(s => s.AreEqual(edges))); }
public bool isOnTheList(EdgesAdded edges) { return(ChangesList.Contains(edges)); }