public ConceptSearchResponse(List <PointFirefly> startGeneration, List <List <PointFirefly> > listGeneration, List <Redirect> FirstIndexRedirect, FireflyAnswer Answer) { this.startGeneration = startGeneration; this.listGeneration = listGeneration; this.FirstIndexRedirect = FirstIndexRedirect; this.Answer = Answer; }
public ConceptSearchResponse GetGeneration() { if (startGeneration.Count == 0) { SetPositionFirefly(); } if (listGeneration.Count == 0) { listGeneration.Add(startGeneration); } List <Redirect> redirects = new List <Redirect>(); for (int i = 0; i < N; i++) { List <PointFirefly> Old = listGeneration.Last(); List <PointFirefly> New = new List <PointFirefly>(); int FirstShift = 0; for (int j = 0; j < Old.Count; j++) { PointFirefly better = Old[j]; for (int k = 0; k < Old.Count; k++) { if (GetAttractiveness(Old[j], Old[k]) < GetAttractiveness(Old[j], better) && k != j) { better = Old[k]; if (i == 0) { FirstShift = k; } } } if (better != Old[j]) { PointFirefly buffer = Old[j]; better = Shift(buffer, better, N); } New.Add(better); if (i == 0) { redirects.Add(new Redirect() { IndexFirst = j, IndexLast = FirstShift }); } } listGeneration.Add(New); } FireflyAnswer answer = new FireflyAnswer(listGeneration.Last().First(), GetZ(listGeneration.Last().First())); for (int i = 1; i < listGeneration.Last().Count; i++) { if (GetZ(listGeneration.Last()[i]) < answer.Answer) { answer = new FireflyAnswer(listGeneration.Last()[i], GetZ(listGeneration.Last()[i])); } } return(new ConceptSearchResponse(startGeneration, listGeneration, redirects, answer)); }