Exemple #1
0
        static void Main(string[] args)
        {
            TravellingSalesmanMap TSP = new TravellingSalesmanMap(TravellingSalesmanMap.MapInstance.RAT99);

            RunACO(TSP);
            //RunPSO(TSP);
        }
 public PSO(TravellingSalesmanMap TSP, int particleCount, int?maxSteps = null, double?targetTravelDistance = null)
 {
     this.TSP                  = TSP;
     this.Swarm                = new TSPParticleSwarm(TSP, particleCount);
     this.MaxSteps             = maxSteps;
     this.TargetTravelDistance = targetTravelDistance;
 }
        //Ha alguma garantia de que essas particulas aleatorias sejam circuitos hamiltonianos?

        public static TSPParticle RandomGenerate(TSPParticleSwarm containingSwarm, TravellingSalesmanMap Map)
        {
            TSPParticle newParticle = new TSPParticle(containingSwarm, Map);

            newParticle.Velocity = TSPVelocity.RandomGenerate(Map);
            newParticle.Position = new TSPPosition(Aleatoriety.GetRandomIntegerSequencePermutation(1, Map.CityCount).ToList());
            newParticle.EvaluateSelf();
            return(newParticle);
        }
Exemple #4
0
        static void RunPSO(TravellingSalesmanMap TSP)
        {
            //cria novo PSO
            PSO pso = new PSO(TSP, 100, 10000, TSP.OptimalTravelDistance);

            //roda o PSO
            TSPSolution s = (TSPSolution)pso.Run();

            //imprime a solução
            Console.WriteLine("Optimal Solution: " + TSP.OptimalTravelDistance);
            Console.WriteLine("Solution Found: " + s.Fitness);
            Console.ReadKey();
        }
Exemple #5
0
        public AntProblem(TravellingSalesmanMap TSP) : base(TSP.map)
        {
            PheromoneMatrix = new double[TSP.CityCount, TSP.CityCount];
            for (int p1 = 0; p1 < TSP.CityCount; p1++)
            {
                for (int p2 = p1; p2 < TSP.CityCount; p2++)
                {
                    PheromoneMatrix[p1, p2] = 1;
                }
            }

            pheromoneWeight = 1;
            distanceWeight  = 5;
        }
        public static TSPVelocity RandomGenerate(TravellingSalesmanMap Map)
        {
            // 0.0 <= Valor < 1.0
            double speed             = Aleatoriety.GetRandomDouble();
            int    permutationsCount = (int)(speed * (Map.CityCount / 2)) + 1;
            List <Tuple <int, int> > permutations = new List <Tuple <int, int> >();

            for (int i = 0; i < permutationsCount; ++i)
            {
                Tuple <int, int> permutation = Aleatoriety.GetTwoDiferentValuesInRange(0, Map.CityCount);
                permutations.Add(permutation);
            }
            return(new TSPVelocity(permutations));
        }
Exemple #7
0
 //construtor do ACO
 //recebe os parâmetros a serem utilizados nas funções de movimento da formiga e de atualização de feromônio
 public ACO(TravellingSalesmanMap TSP, int numAnts)
 {
     //inicializar variáveis
     problem           = new AntProblem(TSP);
     bestSolutionFound = new TSPSolution();
     taxaEvaporacao    = 0.9;
     //cria as formigas e coloca cada uma em um vértice aleatório do grafo
     System.Random random = new Random();
     ants = new List <Ant>();
     for (int i = 0; i < numAnts; i++)
     {
         //ants.Add(new Ant(random.Next(problem.CityCount) + 1));
         ants.Add(new Ant((i + 1) % (TSP.CityCount + 1)));
     }
 }
Exemple #8
0
        static void RunACO(TravellingSalesmanMap TSP)
        {
            //cria novo ACO
            ACO aco = new ACO(TSP, TSP.CityCount);

            //roda o ACO
            TSPSolution s = aco.Run();

            //imprime a solução
            Console.WriteLine("Optimal Solution: " + TSP.OptimalTravelDistance);
            Console.WriteLine("Solution Found: " + s.Fitness);
            Console.Write("\nSteps: ");
            foreach (int visitedCity in s.TravelPlan)
            {
                Console.Write(TSP.GetCityAlias(visitedCity) + " => ");
            }
            Console.Write(TSP.GetCityAlias(s.TravelPlan.First()));
            Console.ReadKey();
        }
 public TSPParticleSwarm(TravellingSalesmanMap TSP, int particleCount) : base(particleCount)
 {
     this.Map = TSP;
 }
        protected TravellingSalesmanMap Map;// { get; set; }

        //Referencia a melhor particula atualmente
        //public TSPParticle gBest;

        /*
         * public TSPParticle(TSPParticle particle) : base() {
         *  this.Position = particle.Position;
         *  this.Velocity = particle.Velocity;
         *  this.Fitness = particle.Fitness;
         * }
         *
         * private TSPParticle() : base() {
         *
         * }
         */
        private TSPParticle(ParticleSwarm containingSwarm, TravellingSalesmanMap Map)
            : base(containingSwarm)
        {
            this.Map = Map;
        }