Example #1
0
            //Methods
            public void goToNextCity()
            {
                if (IsFinished)
                {
                    return;
                }

                #region вибір можливих доріг
                List <Road> roads = currentCity.Roads.ToList();

                //відкидаємо ті шо в списку табу
                foreach (City vCity in VisitedCities.FindAll(c => c != currentCity))
                {
                    roads.RemoveAll(r => r.A == vCity || r.B == vCity);
                }
                #endregion

                if (roads.Count == 0)
                {
                    return;
                }

                #region Determine next road / city
                //Get sum of road probabilities
                double sumMovementProbability = 0;
                foreach (Road r in roads)
                {
                    sumMovementProbability += r.MovementProbablity;
                }                                                   //r.movementprobability = Math.Pow(pheromone, alpha) * Math.Pow((1.0 / distance), beta); сумуємосумуу

                //Get relative probably of taking a road
                Road theRoad = null;
                while (theRoad == null)
                {
                    foreach (Road r in roads)
                    {
                        double probability = r.MovementProbablity / sumMovementProbability; // ймовірність = ймовірність по дорогі/суму ймовірностей
                        double randVal     = rand.NextDouble();                             // випадкове значення, якщо менше ймовірності = знайшли нашу дорогу

                        if (randVal < probability)
                        {
                            theRoad = r;
                            break;
                        }
                    }
                }
                #endregion

                if (theRoad.A == currentCity)
                {
                    currentCity = theRoad.B;
                }
                else
                {
                    currentCity = theRoad.A;
                }

                VisitedCities.Add(currentCity);
                VisitedRoads.Add(theRoad);
            }
Example #2
0
            //Methods
            public void goToNextCity()
            {
                //Check finished state
                if (IsFinished)
                {
                    return;
                }

                #region Get possible roads
                //Get current cities roads
                List <Road> roads = currentCity.Roads.ToList();

                //Remove visited cities
                foreach (City vCity in VisitedCities.FindAll(c => c != currentCity))
                {
                    roads.RemoveAll(r => r.A == vCity || r.B == vCity);
                }
                #endregion

                //Check if no roads (all cities visited)
                if (roads.Count == 0)
                {
                    //isFinished = true;
                    return;
                }

                #region Determine next road / city
                //Get sum of road probabilities
                double sumMovementProbability = 0;
                foreach (Road r in roads)
                {
                    sumMovementProbability += r.MovementProbablity;
                }

                //Get relative probably of taking a road
                Road theRoad = null;
                while (theRoad == null)
                {
                    foreach (Road r in roads)
                    {
                        //Compute relative probability
                        double probability = r.MovementProbablity / sumMovementProbability;
                        double randVal     = rand.NextDouble();

                        //Compare to random number
                        if (randVal < probability)
                        {
                            theRoad = r;
                            break;
                        }
                    }
                }
                #endregion

                //Go to next city
                if (theRoad.A == currentCity)
                {
                    currentCity = theRoad.B;
                }
                else
                {
                    currentCity = theRoad.A;
                }

                //Add to visited List
                VisitedCities.Add(currentCity);
                VisitedRoads.Add(theRoad);
            }