Exemplo n.º 1
0
        private Bee GetMinimalBee(Bee[] beesArray)
        {
            Bee minBee = beesArray[0];

            for (int i = 1; i < beesArray.Length; i++)
            {
                if (Bee.Compare(minBee, beesArray[i]) > 0)
                {
                    minBee = beesArray[i];
                }
            }
            return(minBee);
        }
Exemplo n.º 2
0
        public List <int> costs = new List <int>(); // koszty dla poszczegolnych iteracji


        private void Init()
        {
            // tablica z liczbami dla kazdej pszczoly
            int[] initialTable = new int[n];
            for (int i = 0; i < n; i++)
            {
                initialTable[i] = i;
            }

            // tworzymy pszczoly
            bees = new Bee[nb];
            for (int i = 0; i < nb; i++)
            {
                bees[i] = new Bee((int[])initialTable.Clone());         // kazda pszczola otrzymuje swoja kopie tablicy liczb
                bees[i].FindSomeSite(n);                                // i ja losowo permutuje
            }

            // sortujemy pszczoly wedlug kosztu wyliczonego z posiadanych przez nie permutacji
            Array.Sort <Bee>(bees, Bee.Compare);
            SaveBestResult();
        }
Exemplo n.º 3
0
 // komparator przydatnosci pszczol
 public static int Compare(Bee b1, Bee b2)
 {
     return(b1.Value - b2.Value);
 }
Exemplo n.º 4
0
        public void ReleaseTheBees()
        {
            Init();
            neighbourhoodSize = (int)Math.Round(n * ngh);               // wyliczamy rozmiar sasiedztwa
            for (int iter = 0; iter < imax; iter++)
            {
                // przetwarzamy najlepsze pszczoly
                for (int bestSites = 0; bestSites < e; bestSites++)
                {
                    Bee[] nepBees = new Bee[nep];
                    for (int i = 0; i < nep; i++)
                    {
                        nepBees[i] = new Bee(bees[bestSites].Data);
                        nepBees[i].FindSomeSite(neighbourhoodSize);
                    }
                    Bee minimalBee = GetMinimalBee(nepBees);
                    if (minimalBee.Value < bees[bestSites].Value)
                    {
                        bees[bestSites] = minimalBee;
                    }
                }

                // pozostale wybrane pszczoly
                for (int selectedSites = e; selectedSites < m; selectedSites++)
                {
                    Bee[] nspBees = new Bee[selsit];
                    for (int i = 0; i < selsit; i++)
                    {
                        nspBees[i] = new Bee(bees[selectedSites].Data);
                        nspBees[i].FindSomeSite(neighbourhoodSize);
                    }
                    Bee minimalBee = GetMinimalBee(nspBees);
                    if (minimalBee.Value < bees[selectedSites].Value)
                    {
                        bees[selectedSites] = minimalBee;
                    }
                }

                // pozostale wysylamy losowo
                for (int randomSites = m; randomSites < nb; randomSites++)
                {
                    bees[randomSites].FindSomeSite(n);
                }

                // sortujemy
                Array.Sort <Bee>(bees, Bee.Compare);
                if (minimalCost > bees[0].Value)
                {
                    SaveBestResult();
                }

                //jeśli został przypisany background worker to notyfikuje go
                if (_backgroundWorker != null)
                {
                    _backgroundWorker.ReportProgress(minimalCost);
                }
                if (cancel)
                {
                    break;
                }
            }

            finished = true;
        }