public void MoveTo(Firefly f) { var perm = GetPermutation(Permutation, f.Permutation); var invs = new List<int[]>(); int count; MergeSortWithInversions(ref perm, 0, invs, out count); var quantity = Random.Next(0, invs.Count - 1); for (var i = 0; i < quantity; i++) { Inversion(invs[i][0], invs[i][1]); } }
public void MoveTo(Firefly f) { var perm = GetPermutation(Permutation, f.Permutation); var invs = new List <int[]>(); int count; MergeSortWithInversions(ref perm, 0, invs, out count); var quantity = Random.Next(0, invs.Count - 1); for (var i = 0; i < quantity; i++) { Inversion(invs[i][0], invs[i][1]); } }
public Object Execute() { var watch = Stopwatch.StartNew(); var fireflies = new List <Firefly>(); for (var i = 0; i < _numberOfFireflies; i++) { var f = new Firefly(_distance, _numberOfPoints); f.GeneratePermutation(); fireflies.Add(f); } var best = fireflies[0]; var foundInIteartion = 1; for (var i = 0; i < _numberOfFireflies; i++) { if (fireflies[i].FunctionValue() < best.FunctionValue()) { best = fireflies[i]; } } for (var k = 0; k < _numberOfIterations; k++) { for (var i = 0; i < _numberOfFireflies; i++) { for (var j = 0; j < _numberOfFireflies; j++) { if (fireflies[i].FunctionValue() <= fireflies[j].FunctionValue()) { continue; } fireflies[i].MoveTo(fireflies[j]); if (fireflies[i].FunctionValue() < best.FunctionValue()) { best = fireflies[i]; foundInIteartion = k + 1; } } } } watch.Stop(); var time = watch.ElapsedMilliseconds; Console.WriteLine("Found the best rout in iteration " + foundInIteartion + " in " + time + "ms. Length: " + best.FunctionValue()); return(new { permutation = best.GetPermutation(), cost = best.FunctionValue(), iteration = foundInIteartion, len = time }); }
public Object Execute() { var watch = Stopwatch.StartNew(); var fireflies = new List<Firefly>(); for (var i = 0; i < _numberOfFireflies; i++) { var f = new Firefly(_distance, _numberOfPoints); f.GeneratePermutation(); fireflies.Add(f); } var best = fireflies[0]; var foundInIteartion = 1; for (var i = 0; i < _numberOfFireflies; i++) { if (fireflies[i].FunctionValue() < best.FunctionValue()) { best = fireflies[i]; } } for (var k = 0; k < _numberOfIterations; k++) { for (var i = 0; i < _numberOfFireflies; i++) { for (var j = 0; j < _numberOfFireflies; j++) { if (fireflies[i].FunctionValue() <= fireflies[j].FunctionValue()) continue; fireflies[i].MoveTo(fireflies[j]); if (fireflies[i].FunctionValue() < best.FunctionValue()) { best = fireflies[i]; foundInIteartion = k + 1; } } } } watch.Stop(); var time = watch.ElapsedMilliseconds; Console.WriteLine("Found the best rout in iteration " + foundInIteartion + " in " + time + "ms. Length: " + best.FunctionValue()); return new {permutation = best.GetPermutation(), cost = best.FunctionValue(), iteration = foundInIteartion, len = time}; }