Esempio n. 1
0
        /// <summary>
        /// Выполняет инициализацию экземпляра алгоритма заданными параметрами и значениями
        /// </summary>
        /// <param name="carsCollection">Коллекция машин</param>
        /// <param name="clientsCollection">Коллекция клиентов</param>
        /// <param name="distance">Матрица расстояний между клиентами</param>
        /// <param name="param">Параметры алгоритма</param>
        public void Init(IEnumerable <Car> carsCollection, IEnumerable <Client> clientsCollection, Parameters param)
        {
            Ants    = new List <Ant>();
            Clients = new ClientsCollection();
            Cars    = new CarsCollection();

            // значения параметров по умолчанию
            Params = param;

            //заполнение коллекции клиентов
            clientsCollection.ToList().ForEach(delegate(Client item)
            {
                Clients.Add(item);
            });
            //заполнение коллекции машин
            carsCollection.ToList().ForEach(delegate(Car item)
            {
                Cars.Add(item);
            });

            Pheromones = new Pheromones(Cars.Count, Clients.Count);

            //заполнение коллекции муравьев
            Ants = new List <Ant>();
            for (int i = 0; i < param.AntCount; i++)
            {
                Ants.Add(new Ant(Cars, Clients, Pheromones, Params));
            }
        }
Esempio n. 2
0
        /// <summary>
        /// Выполняет генерацию коллекции случайных городов
        /// </summary>
        /// <param name="count">Колличество городов</param>
        /// <param name="maxDistance">Максимальное расстояние между городами</param>
        /// <returns>Коллекция городов</returns>
        public static ClientsCollection GenerateRandom(int count, int maxDistance)
        {
            ClientsCollection citiesCollection = new ClientsCollection();

            citiesCollection.Distancies = new Distance();

            Random rand = new Random();

            for (int i = 0; i < count; i++)
            {
                int x = -1, y = -1;
                x = rand.Next(0, maxDistance);
                y = rand.Next(0, maxDistance);
                if (i != 0)
                {
                    for (int j = i - 1; j > 0; j--)
                    {
                        // совпадение с уже существующими координатами
                        if (x == citiesCollection.Items[j].Position.X && y == citiesCollection.Items[j].Position.Y)
                        {
                            x = rand.Next(0, maxDistance);
                            y = rand.Next(0, maxDistance);
                            j = i - 1;
                        }
                    }
                }
                citiesCollection.Items.Add(new Client(new PointD(x, y), x + y));
            }

            citiesCollection.UpdateDistancies();
            return(citiesCollection);
        }
Esempio n. 3
0
 /// <summary>
 /// Создает новый экземпляр муравья с заданными параметрами
 /// </summary>
 /// <param name="carsCollection">Ссылка на коллекцию машин</param>
 /// <param name="citiesCollection">Ссылка на коллекцию городов</param>
 public Ant(CarsCollection carsCollection, ClientsCollection citiesCollection, Pheromones pheromones, Parameters parameters)
 {
     Cars          = carsCollection;
     Clients       = citiesCollection;
     EnableClients = Clients.FullClone();
     TabuIndexes   = new List <int>();
     Pheromones    = pheromones;
     Parameters    = parameters;
 }
Esempio n. 4
0
        /// <summary>
        /// Полное клонирование коллекции
        /// </summary>
        /// <returns></returns>
        public ClientsCollection FullClone()
        {
            ClientsCollection clone = new ClientsCollection();

            foreach (Client item in this.Items)
            {
                clone.Add(item.FullClone());
            }

            return(clone);
        }