Class: MHL::PSOSwarm
- Inherits:
-
GenericSwarmBehavior
- Object
- GenericSwarmBehavior
- MHL::PSOSwarm
- Defined in:
- lib/mhl/pso_swarm.rb
Constant Summary
Constants inherited from GenericSwarmBehavior
GenericSwarmBehavior::DEFAULT_ALPHA, GenericSwarmBehavior::DEFAULT_C1, GenericSwarmBehavior::DEFAULT_C2, GenericSwarmBehavior::DEFAULT_CHI, GenericSwarmBehavior::PHI
Instance Method Summary collapse
-
#initialize(size:, initial_positions:, initial_velocities:, c1: nil, c2: nil, chi: nil, constraints: nil, logger: nil) ⇒ PSOSwarm
constructor
A new instance of PSOSwarm.
- #mutate(params = {}) ⇒ Object
Methods inherited from GenericSwarmBehavior
Constructor Details
#initialize(size:, initial_positions:, initial_velocities:, c1: nil, c2: nil, chi: nil, constraints: nil, logger: nil) ⇒ PSOSwarm
Returns a new instance of PSOSwarm.
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/mhl/pso_swarm.rb', line 8 def initialize(size:, initial_positions:, initial_velocities:, c1: nil, c2: nil, chi: nil, constraints: nil, logger: nil) @size = size @particles = Array.new(@size) do |index| Particle.new(initial_positions[index], initial_velocities[index]) end @iteration = 1 # get values for parameters C1 and C2 @c1 = (c1 || DEFAULT_C1).to_f @c2 = (c2 || DEFAULT_C2).to_f # define procedure to get dynamic value for chi @get_chi = if chi and chi.respond_to? :call chi else ->(iter) { (chi || DEFAULT_CHI).to_f } end @constraints = constraints @logger = logger if @constraints and @logger @logger.info "PSOSwarm called w/ constraints: #{@constraints}" end end |
Instance Method Details
#mutate(params = {}) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/mhl/pso_swarm.rb', line 36 def mutate(params={}) # get chi parameter chi = @get_chi.call(@iteration) # move particles @particles.each_with_index do |p,i| p.move(chi, @c1, @c2, @swarm_attractor) if @constraints p.remain_within(@constraints) end end @iteration += 1 end |