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;
 }
Exemple #2
0
        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));
        }