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); }
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]); } }
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)); }
//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(); }
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; } } }