private double GetAttractiveness(PointFirefly i, PointFirefly j) { double z = GetZ(j); double radius = Math.Sqrt(Math.Pow(i.X1 - j.X1, 2) + Math.Pow(i.X2 - j.X2, 2)); return((b0 * z) / (1 + yota * Math.Pow(radius, 2))); }
public FireflyPointForFirstTest(PointFirefly point, double Answer, bool Right, String Name) : base(point, Answer) { this.Name = Name; this.Right = Right; }
private PointFirefly Shift(PointFirefly i, PointFirefly j, int n) { double radius = Math.Sqrt(Math.Pow(i.X1 - j.X1, 2) + Math.Pow(i.X2 - j.X2, 2)); double Bij = b0 / (1 + yota * Math.Pow(radius, n)); double X1 = j.X1 + Bij * (i.X1 - j.X1) + GetA(n) * (random.NextDouble() * 2 - 1); double X2 = j.X2 + Bij * (i.X2 - j.X2) + GetA(n) * (random.NextDouble() * 2 - 1); return(new PointFirefly(X1, X2)); }
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)); }
public FireflyAnswer(PointFirefly point, double Answer) : base(point) { this.Answer = Answer; }
private double GetZ(PointFirefly j) { return(a * Math.Pow(j.X1 + c, b) + p * Math.Pow(j.X2 + g, t)); }