static void Main(string[] args) { var watch = System.Diagnostics.Stopwatch.StartNew(); Console.WriteLine("ABC Started..."); // Storages StoragesData storagesData = new StoragesData(9); // Hive Hive hive = new Hive(totalNumberBees, numberInactive, numberActive, numberScout, maxNumberVisits, maxNumberCycles, storagesData, storageId, foodType, foodValue); hive.Solve(); Console.WriteLine("ABC Ended..."); Console.WriteLine("-----------------------------------------------------------"); Console.WriteLine("ABC Solution :"); hive.printSolution(); watch.Stop(); var elapsedMs = watch.ElapsedMilliseconds; Console.WriteLine("Time elapsed: " + elapsedMs); string s = Console.ReadLine(); }
public Hive(int totalNumberBees, int numberInactive, int numberActive, int numberScout, int maxNumberVisits, int maxNumberCycles, StoragesData storagesData, int storageId, int foodType, int foodValue) { random = new Random(0); this.totalNumberBees = totalNumberBees; this.numberInactive = numberInactive; this.numberActive = numberActive; this.numberScout = numberScout; this.maxNumberVisits = maxNumberVisits; this.maxNumberCycles = maxNumberCycles; this.storageId = storageId; this.foodType = foodType; this.foodValue = foodValue; this.storagesData = storagesData; this.bees = new Bee[totalNumberBees]; this.bestMemoryMatrix = GenerateRandomMemoryMatrix(); //Console.WriteLine(getStorageById(bestMemoryMatrix[bestMemoryMatrix.Count - 1]).getResources()); foreach (Tuple <Resource, int> r in getStorageById(bestMemoryMatrix[bestMemoryMatrix.Count - 1]).getResources()) { //Console.WriteLine(r.Item1); if (r.Item1.getType() == foodType) { this.bestResourceCost = r.Item2; } } this.bestMeasureOfQuality = MeasureOfQuality(this.bestMemoryMatrix) + this.bestResourceCost; this.indexesOfInactiveBees = new List <int>(); foreach (int i in this.bestMemoryMatrix) { Console.Write(i); } Console.WriteLine(); Console.WriteLine(this.bestMeasureOfQuality); Console.WriteLine("After ......................."); for (int i = 0; i < totalNumberBees; ++i) { int currStatus; if (i < numberInactive) { currStatus = 0; // inactive indexesOfInactiveBees.Add(i); } else if (i < numberInactive + numberScout) { currStatus = 2; // scout } else { currStatus = 1; // active } List <int> randomMemoryMatrix = GenerateRandomMemoryMatrix(); int randomResourceCost = 0; foreach (Tuple <Resource, int> r in getStorageById(randomMemoryMatrix[randomMemoryMatrix.Count - 1]).getResources()) { if (r.Item1.getType() == foodType) { randomResourceCost = r.Item2; } } double mq = MeasureOfQuality(randomMemoryMatrix) + randomResourceCost; int numberOfVisits = 0; bees[i] = new Bee(currStatus, randomMemoryMatrix, mq, numberOfVisits); if (bees[i].measureOfQuality < bestMeasureOfQuality) { this.bestMemoryMatrix = bees[i].memoryMatrix; this.bestMeasureOfQuality = bees[i].measureOfQuality; } } foreach (int i in this.bestMemoryMatrix) { Console.Write(i); } Console.WriteLine(); Console.WriteLine(this.bestMeasureOfQuality); }