Class: MHL::QPSOSwarm
- Inherits:
-
GenericSwarmBehavior
- Object
- GenericSwarmBehavior
- MHL::QPSOSwarm
- Defined in:
- lib/mhl/qpso_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:, alpha: nil, constraints: nil, logger: nil) ⇒ QPSOSwarm
constructor
A new instance of QPSOSwarm.
- #mutate ⇒ Object
Methods inherited from GenericSwarmBehavior
Constructor Details
#initialize(size:, initial_positions:, alpha: nil, constraints: nil, logger: nil) ⇒ QPSOSwarm
Returns a new instance of QPSOSwarm.
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 |
# File 'lib/mhl/qpso_swarm.rb', line 8 def initialize(size:, initial_positions:, alpha: nil, constraints: nil, logger: nil) @size = size @particles = Array.new(@size) do |index| QuantumParticle.new(initial_positions[index]) end # find problem dimension @dimension = initial_positions[0].size @iteration = 1 # define procedure to get dynamic value for alpha @get_alpha = if alpha and alpha.respond_to? :call alpha else ->(it) { (alpha || DEFAULT_ALPHA).to_f } end @constraints = constraints @logger = logger if @constraints and @logger @logger.info "QPSOSwarm called w/ constraints: #{@constraints}" end end |
Instance Method Details
#mutate ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/mhl/qpso_swarm.rb', line 34 def mutate # get alpha parameter alpha = @get_alpha.call(@iteration) # this calculates the C_n parameter (the centroid of the set of all the # particle attractors) as defined in equations 4.81 and 4.82 of [SUN11]. attractors = @particles.map {|p| p.attractor[:position] } c_n = 0.upto(@dimension-1).map do |j| attractors.inject(0.0) {|s,attr| s += attr[j] } / @size.to_f end # move particles @particles.each do |p| p.move(alpha, c_n, @swarm_attractor) if @constraints p.remain_within(@constraints) end end @iteration += 1 end |