예제 #1
0
파일: Firefly.cs 프로젝트: radk0s/BOProjekt
 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]);
     }
 }
예제 #2
0
파일: Firefly.cs 프로젝트: radk0s/BOProjekt
        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]);
            }
        }
예제 #3
0
        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 });
        }
예제 #4
0
 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};
 }