Package org.opt4j.optimizers.mopso
Class MOPSO
- java.lang.Object
-
- org.opt4j.optimizers.mopso.MOPSO
-
- All Implemented Interfaces:
org.opt4j.core.optimizer.IterativeOptimizer
public class MOPSO extends java.lang.Object implements org.opt4j.core.optimizer.IterativeOptimizer
TheMOPSO
is an implementation of a multi-objective particle swarm optimizer, see "Improving PSO-based Multi-Objective Optimization using Crowding, Mutation and e-Dominance, M. Reyes Sierra and C. A. Coello Coello, In Proceedings of Evolutionary Multi-Criterion Optimization, 2005". This implementation is based on the OMOPSO. Thus, this MOPSO is restricted to problems that are based on theDoubleGenotype
.
-
-
Field Summary
Fields Modifier and Type Field Description protected org.opt4j.operators.algebra.AlgebraDouble
algebra
protected org.opt4j.core.optimizer.Archive
leaders
protected org.opt4j.operators.mutate.MutationRate
mutationRate
protected MutateDoubleUniform
nonUniform
protected ParticleFactory
particleFactory
protected org.opt4j.operators.algebra.Term
positionTerm
protected java.util.Random
random
protected int
size
protected MutateDoubleUniform
uniform
protected VelocityTerm
velocityTerm
-
Constructor Summary
Constructors Constructor Description MOPSO(org.opt4j.core.optimizer.Population population, org.opt4j.core.IndividualFactory individualFactory, org.opt4j.core.optimizer.IndividualCompleter completer, org.opt4j.core.common.random.Rand random, MutateDoubleUniform uniform, MutateDoubleNonUniform nonUniform, org.opt4j.operators.mutate.MutationRate mutationRate, int size, int archiveSize)
Constructs aMOPSO
.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected boolean
dominates(Particle old, Particle current)
Returnstrue
if the old particle position dominates the new one.protected java.util.Map<Particle,Particle>
getLeaders(org.opt4j.core.optimizer.Archive leaders, org.opt4j.core.optimizer.Population population)
Assigns eachParticle
a leader.void
initialize()
protected java.util.Map<Particle,Particle>
move(org.opt4j.core.optimizer.Population population, java.util.Map<Particle,Particle> leaders)
Determine the new positions for theParticle
s in thePopulation
.void
next()
protected void
updateLeaders(org.opt4j.core.optimizer.Archive leaders, org.opt4j.core.optimizer.Population population)
Update the global leadersArchive
.protected void
updatePersonalBest(java.util.Map<Particle,Particle> next)
Update the personal best of eachParticle
.
-
-
-
Field Detail
-
size
protected final int size
-
leaders
protected final org.opt4j.core.optimizer.Archive leaders
-
particleFactory
protected final ParticleFactory particleFactory
-
algebra
protected final org.opt4j.operators.algebra.AlgebraDouble algebra
-
random
protected final java.util.Random random
-
velocityTerm
protected final VelocityTerm velocityTerm
-
positionTerm
protected final org.opt4j.operators.algebra.Term positionTerm
-
uniform
protected final MutateDoubleUniform uniform
-
nonUniform
protected final MutateDoubleUniform nonUniform
-
mutationRate
protected final org.opt4j.operators.mutate.MutationRate mutationRate
-
-
Constructor Detail
-
MOPSO
@Inject public MOPSO(org.opt4j.core.optimizer.Population population, org.opt4j.core.IndividualFactory individualFactory, org.opt4j.core.optimizer.IndividualCompleter completer, org.opt4j.core.common.random.Rand random, MutateDoubleUniform uniform, MutateDoubleNonUniform nonUniform, org.opt4j.operators.mutate.MutationRate mutationRate, int size, int archiveSize)
Constructs aMOPSO
.- Parameters:
population
- the populationindividualFactory
- the individual (particle) factorycompleter
- the completerrandom
- the random number generatoruniform
- the uniform mutationnonUniform
- the non-uniform mutationmutationRate
- the mutation ratesize
- the number of particlesarchiveSize
- the size of the archive for the global leaders
-
-
Method Detail
-
initialize
public void initialize()
- Specified by:
initialize
in interfaceorg.opt4j.core.optimizer.IterativeOptimizer
-
next
public void next() throws org.opt4j.core.optimizer.TerminationException
- Specified by:
next
in interfaceorg.opt4j.core.optimizer.IterativeOptimizer
- Throws:
org.opt4j.core.optimizer.TerminationException
-
move
protected java.util.Map<Particle,Particle> move(org.opt4j.core.optimizer.Population population, java.util.Map<Particle,Particle> leaders)
Determine the new positions for theParticle
s in thePopulation
.- Parameters:
population
- the populationleaders
- the map for the global leaders- Returns:
- the map of the old to the new particle
-
updateLeaders
protected void updateLeaders(org.opt4j.core.optimizer.Archive leaders, org.opt4j.core.optimizer.Population population)
Update the global leadersArchive
.- Parameters:
leaders
- the archivepopulation
- the population
-
updatePersonalBest
protected void updatePersonalBest(java.util.Map<Particle,Particle> next)
Update the personal best of eachParticle
.- Parameters:
next
- the old and new positions
-
dominates
protected boolean dominates(Particle old, Particle current)
Returnstrue
if the old particle position dominates the new one.- Parameters:
old
- the old particlecurrent
- the new particle- Returns:
true
if the old particle position dominates the new one
-
getLeaders
protected java.util.Map<Particle,Particle> getLeaders(org.opt4j.core.optimizer.Archive leaders, org.opt4j.core.optimizer.Population population)
Assigns eachParticle
a leader.- Parameters:
leaders
- the archive of available leaderpopulation
- the population- Returns:
- the map of each particle to its leader
-
-