/// <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)); } }
/// <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); }
/// <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; }
/// <summary> /// Полное клонирование коллекции /// </summary> /// <returns></returns> public ClientsCollection FullClone() { ClientsCollection clone = new ClientsCollection(); foreach (Client item in this.Items) { clone.Add(item.FullClone()); } return(clone); }