Exemple #1
0
        public Particula copy(Solucion Best, double[] velocidad)
        {
            Particula copy = new Particula(vector.Length, fx, r, pesoMaximo);

            copy.vector    = (int[])vector.Clone();
            copy.Best      = Best;
            copy.velocidad = (double[])velocidad.Clone();
            return(copy);
        }
Exemple #2
0
        private void actualizarVelocidad(Particula p)
        {
            int i = 0, tam = p.velocidad.Length;

            for (; i < tam; i++)
            {
                p.velocidad[i] = p.velocidad[i]
                                 + factorMejorLocal * r.NextDouble() * (p.Best.vector[i] - p.vector[i])
                                 + factorMejorGlobal * r.NextDouble() * (Best.vector[i] - p.vector[i]);
            }
        }
Exemple #3
0
        protected override Solucion repararArmonia(Solucion n)
        {
            Particula ajustada, nueva = (Particula)n;

            if (nueva.getPeso() > pesoMaximo)
            {
                ajustada = (Particula)apagar(nueva);
            }
            else
            {
                ajustada = nueva.copy(nueva.Best, nueva.velocidad);
            }
            return(prender(ajustada));
        }
Exemple #4
0
        //Inicialización de parametros
        public void inicializar(int swarmSize, int dimensiones, FuncionObjetivo fx, int NI, double peso, int opcionArreglo, double factorMejorLocal, double factorMejorGlobal, int velocidadMaxima)
        {
            pesoMaximo             = peso;
            numIteraciones         = NI;
            Best                   = null;
            this.swarmSize         = swarmSize;
            this.fx                = fx;
            this.opcionArreglo     = opcionArreglo;
            this.factorMejorLocal  = factorMejorLocal;
            this.factorMejorGlobal = factorMejorGlobal;
            this.velocidadMaxima   = velocidadMaxima;
            // Inicialización del cumulo de particulas
            swarm = new Particula[this.swarmSize];
            int i = 0;

            for (; i < this.swarmSize; i++)
            {
                swarm[i] = new Particula(dimensiones, fx, r, pesoMaximo);
            }
            inicializarSwarm();
        }
Exemple #5
0
        private void actualizarPosicion(Particula p)
        {
            int i = 0, tam = p.velocidad.Length;

            p.setPeso(0);
            for (; i < tam; i++)
            {
                if (aleatorio() < probabilidad(p.vector[i], p.velocidad[i]))
                {
                    p.vector[i] = 1;
                }
                else
                {
                    p.vector[i] = 0;
                }
                p.setPeso(p.getPeso() + (p.vector[i] * fx.elementos[i].peso));
                if (p.getPeso() >= pesoMaximo)
                {
                    break;
                }
            }
        }