You can subscribe to this list here.
2003 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
(7) |
Oct
(1) |
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(13) |
Feb
(17) |
Mar
(5) |
Apr
(10) |
May
(10) |
Jun
(42) |
Jul
(23) |
Aug
(38) |
Sep
(12) |
Oct
(9) |
Nov
(6) |
Dec
|
2005 |
Jan
(3) |
Feb
(17) |
Mar
(6) |
Apr
|
May
(1) |
Jun
(10) |
Jul
|
Aug
(10) |
Sep
|
Oct
(8) |
Nov
(2) |
Dec
(2) |
2006 |
Jan
(2) |
Feb
(11) |
Mar
(44) |
Apr
(84) |
May
(120) |
Jun
(18) |
Jul
|
Aug
(12) |
Sep
(19) |
Oct
(22) |
Nov
(7) |
Dec
(11) |
2007 |
Jan
(6) |
Feb
(10) |
Mar
(24) |
Apr
(13) |
May
(46) |
Jun
(25) |
Jul
(46) |
Aug
(47) |
Sep
(60) |
Oct
(61) |
Nov
(138) |
Dec
(47) |
2008 |
Jan
(6) |
Feb
(23) |
Mar
(58) |
Apr
(78) |
May
(82) |
Jun
(34) |
Jul
(56) |
Aug
(59) |
Sep
(54) |
Oct
(127) |
Nov
(47) |
Dec
(33) |
2009 |
Jan
(16) |
Feb
(18) |
Mar
(37) |
Apr
(162) |
May
(49) |
Jun
(58) |
Jul
(59) |
Aug
(17) |
Sep
(10) |
Oct
|
Nov
|
Dec
|
From: Marde G. <mg...@cs...> - 2009-07-07 09:05:08
|
Hi everyone, An example xml file is attached. The part to focus on is the following: <iterationStrategy class="moo.iterationstrategies.ArchivingIterationStrategy"> <archive class="moo.archive.constrained.SetBasedConstrainedArchive" capacity="200"> <pruningSelection class="util.selection.recipes.ElitistSelection"/> </archive> You can set the comparator as follows: <iterationStrategy class="moo.iterationstrategies.ArchivingIterationStrategy"> <archive class="moo.archive.constrained.SetBasedConstrainedArchive" capacity="200"> <pruningSelection class="util.selection.recipes.ElitistSelection"> <comparator class="util.selection.ordering.DefaultComparator/> </pruningSelection> </archive> However, if I change the DefaultComparator to any other new comparator (for example when I want to sort solutions based on their distance from other solutions in the archive and not based on fitness) it doesn't make the change. It keeps the DefaultComparator. I guess this is the same as with the archive size issue. Marde >>> Gary Pampara <gpa...@gm...> 07/07/09 8:00 AM >>> This is based on the usage. Awaiting XML file to inspect how this is being used. The issue is more than likely related to the use of the entity.operator.selection classes - which need to be updated to use the relavant recipe classes. On Tuesday 07 July 2009 07:55:08 Gary Pampara wrote: > Forwarding message to devel list: > > > Hi, > > I am running into more and more problems since I cannot set/change values. > For example, if I want to use a different comparator with the sorting > stuff, I cannot just set it. I keeps the default setting. This will mean > that I would have to create duplicate classes to handle this. There will > probably be quite a few of these cases in future, when others also start to > run into this problem. > > Should I just go ahead with duplication. This will not be good in the end. > > What is the best way of handling this? > > Marde ------------------------------------------------------------------------------ Enter the BlackBerry Developer Challenge This is your chance to win up to $100,000 in prizes! For a limited time, vendors submitting new applications to BlackBerry App World(TM) will have the opportunity to enter the BlackBerry Developer Challenge. See full prize details at: http://p.sf.net/sfu/blackberry _______________________________________________ cilib-devel mailing list cil...@li... https://lists.sourceforge.net/lists/listinfo/cilib-devel -- This message is subject to the CSIR's copyright terms and conditions, e-mail legal notice, and implemented Open Document Format (ODF) standard. The full disclaimer details can be found at http://www.csir.co.za/disclaimer.html. This message has been scanned for viruses and dangerous content by MailScanner, and is believed to be clean. MailScanner thanks Transtec Computers for their support. |
From: Gary P. <gpa...@gm...> - 2009-07-07 05:59:13
|
This is based on the usage. Awaiting XML file to inspect how this is being used. The issue is more than likely related to the use of the entity.operator.selection classes - which need to be updated to use the relavant recipe classes. On Tuesday 07 July 2009 07:55:08 Gary Pampara wrote: > Forwarding message to devel list: > > > Hi, > > I am running into more and more problems since I cannot set/change values. > For example, if I want to use a different comparator with the sorting > stuff, I cannot just set it. I keeps the default setting. This will mean > that I would have to create duplicate classes to handle this. There will > probably be quite a few of these cases in future, when others also start to > run into this problem. > > Should I just go ahead with duplication. This will not be good in the end. > > What is the best way of handling this? > > Marde |
From: Gary P. <gpa...@gm...> - 2009-07-07 05:55:32
|
Forwarding message to devel list: Hi, I am running into more and more problems since I cannot set/change values. For example, if I want to use a different comparator with the sorting stuff, I cannot just set it. I keeps the default setting. This will mean that I would have to create duplicate classes to handle this. There will probably be quite a few of these cases in future, when others also start to run into this problem. Should I just go ahead with duplication. This will not be good in the end. What is the best way of handling this? Marde -- |
From: Gary P. <gpa...@gm...> - 2009-07-06 05:46:57
|
The last few remaininig classes have been converted into their generic forms. This should prove useful in the future where all similar initialization will be done the same. Signed-off-by: Gary Pampara <gpa...@gm...> --- .../ConstantInitializationStrategy.java | 22 ++++- .../DataSetBasedInitializationStrategy.java} | 18 +++-- .../DomainPercentageInitializationStrategy.java | 21 ++++-- .../RandomBoundedInitializationStrategy.java | 17 ++-- .../RandomInitializationStrategy.java | 8 ++- .../cilib/pso/dynamic/ChargedParticle.java | 2 +- .../cilib/pso/particle/AbstractParticle.java | 20 ++--- .../cilib/pso/particle/StandardParticle.java | 9 ++- .../PositionInitialisationStrategy.java | 39 --------- .../RandomizedPositionInitialisationStrategy.java | 61 -------------- .../net/sourceforge/cilib/type/types/Real.java | 1 - .../ConstantInitializationStrategyTest.java | 76 +++++++++++++++++ ...DomainPercentageInitializationStrategyTest.java | 69 ++++++++++++++++ .../RandomBoundedInitializationStrategyTest.java | 65 +++++++++++++++ .../RandomInitializationStrategyTest.java | 85 ++++++++++++++++++++ 15 files changed, 368 insertions(+), 145 deletions(-) rename src/main/java/net/sourceforge/cilib/{pso/particle/initialisation/DataSetBasedPositionInitialisationStrategy.java => entity/initialization/DataSetBasedInitializationStrategy.java} (82%) delete mode 100644 src/main/java/net/sourceforge/cilib/pso/particle/initialisation/PositionInitialisationStrategy.java delete mode 100644 src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java create mode 100644 src/test/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategyTest.java create mode 100644 src/test/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategyTest.java create mode 100644 src/test/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategyTest.java create mode 100644 src/test/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategyTest.java diff --git a/src/main/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategy.java index 674161b..f12f3a0 100644 --- a/src/main/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategy.java @@ -22,11 +22,12 @@ package net.sourceforge.cilib.entity.initialization; import net.sourceforge.cilib.entity.Entity; +import net.sourceforge.cilib.type.types.Type; import net.sourceforge.cilib.type.types.container.Vector; /** * - * @param <E> + * @param <E> */ public class ConstantInitializationStrategy<E extends Entity> implements InitializationStrategy<E> { private static final long serialVersionUID = 4198258321374130337L; @@ -41,18 +42,29 @@ public class ConstantInitializationStrategy<E extends Entity> implements Initial this.constant = value; } + public ConstantInitializationStrategy(ConstantInitializationStrategy copy) { + this.constant = copy.constant; + } + @Override public ConstantInitializationStrategy getClone() { - return this; + return new ConstantInitializationStrategy(this); } @Override public void initialize(Enum<?> key, E entity) { - Vector vector = (Vector) entity.getProperties().get(key); + Type type = entity.getProperties().get(key); + if (type instanceof Vector) { + Vector vector = (Vector) type; - for (int i = 0; i < vector.size(); i++) { - vector.setReal(i, constant); + for (int i = 0; i < vector.size(); i++) { + vector.setReal(i, constant); + } + + return; } + + throw new UnsupportedOperationException("Cannot perfrom initialization on a non Vector type."); } public double getConstant() { diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/DataSetBasedPositionInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/DataSetBasedInitializationStrategy.java similarity index 82% rename from src/main/java/net/sourceforge/cilib/pso/particle/initialisation/DataSetBasedPositionInitialisationStrategy.java rename to src/main/java/net/sourceforge/cilib/entity/initialization/DataSetBasedInitializationStrategy.java index 1c10791..38b9084 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/DataSetBasedPositionInitialisationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/DataSetBasedInitializationStrategy.java @@ -19,13 +19,15 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -package net.sourceforge.cilib.pso.particle.initialisation; +package net.sourceforge.cilib.entity.initialization; import net.sourceforge.cilib.clustering.kmeans.CentroidsInitialisationStrategy; import net.sourceforge.cilib.clustering.kmeans.DataSetBasedCentroidsInitialisationStrategy; -import net.sourceforge.cilib.entity.EntityType; +import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.problem.ClusteringProblem; import net.sourceforge.cilib.problem.OptimisationProblem; +import net.sourceforge.cilib.problem.dataset.ClusterableDataSet; import net.sourceforge.cilib.type.types.container.Vector; import net.sourceforge.cilib.util.ClusteringUtils; @@ -37,19 +39,20 @@ import net.sourceforge.cilib.util.ClusteringUtils; * {@link ClusteringProblem} is also found using the * {@link ClusteringUtils#getClusteringProblem()} method. * + * @param <E> The type of {@code Entity}. * @author Theuns Cloete */ -public class DataSetBasedPositionInitialisationStrategy implements PositionInitialisationStrategy { +public class DataSetBasedInitializationStrategy<E extends Entity> implements InitializationStrategy<E> { private static final long serialVersionUID = 1341622520702058537L; private CentroidsInitialisationStrategy centroidsInitialisationStrategy = null; - public DataSetBasedPositionInitialisationStrategy() { + public DataSetBasedInitializationStrategy() { centroidsInitialisationStrategy = new DataSetBasedCentroidsInitialisationStrategy(); } - public DataSetBasedPositionInitialisationStrategy getClone() { - return new DataSetBasedPositionInitialisationStrategy(); + public DataSetBasedInitializationStrategy getClone() { + return new DataSetBasedInitializationStrategy(); } /** @@ -61,11 +64,10 @@ public class DataSetBasedPositionInitialisationStrategy implements PositionIniti * should be a {@link ClusteringProblem}, but is ignored, because the clustering * problem is found via the {@link ClusteringUtils#getClusteringProblem()} method. */ - public void initialise(Particle particle, OptimisationProblem problem) { + public void initialize(Enum<?> key, E particle) { ClusteringUtils helper = ClusteringUtils.get(); Vector centroids = centroidsInitialisationStrategy.initialise(helper.getClusteringProblem(), helper.getClusterableDataSet()); particle.setCandidateSolution(centroids); - particle.getProperties().put(EntityType.Particle.BEST_POSITION, centroids.getClone()); } } diff --git a/src/main/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategy.java index 4941359..4b1b87e 100644 --- a/src/main/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategy.java @@ -23,7 +23,7 @@ package net.sourceforge.cilib.entity.initialization; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; -import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.type.types.Type; import net.sourceforge.cilib.type.types.container.Vector; /** @@ -55,12 +55,12 @@ public class DomainPercentageInitializationStrategy<E extends Entity> implements @Override public void initialize(Enum<?> key, E entity) { - Particle particle = (Particle) entity; - velocityInitialisationStrategy.initialize(EntityType.Particle.VELOCITY, particle); + this.velocityInitialisationStrategy.initialize(EntityType.Particle.VELOCITY, entity); + Type type = entity.getProperties().get(key); + Vector vector = (Vector) type; - Vector velocity = (Vector) particle.getVelocity(); - for (int i = 0; i < velocity.getDimension(); ++i) { - velocity.setReal(i, velocity.getReal(i) * percentage); + for (int i = 0; i < vector.getDimension(); ++i) { + vector.setReal(i, vector.getReal(i) * percentage); } } @@ -71,4 +71,13 @@ public class DomainPercentageInitializationStrategy<E extends Entity> implements public void setPercentage(double percentage) { this.percentage = percentage; } + + public InitializationStrategy getVelocityInitialisationStrategy() { + return velocityInitialisationStrategy; + } + + public void setVelocityInitialisationStrategy(InitializationStrategy velocityInitialisationStrategy) { + this.velocityInitialisationStrategy = velocityInitialisationStrategy; + } + } diff --git a/src/main/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategy.java index f30e62f..c1318a0 100644 --- a/src/main/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategy.java @@ -24,13 +24,13 @@ package net.sourceforge.cilib.entity.initialization; import net.sourceforge.cilib.controlparameter.ConstantControlParameter; import net.sourceforge.cilib.controlparameter.ControlParameter; import net.sourceforge.cilib.entity.Entity; -import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.math.random.RandomNumber; +import net.sourceforge.cilib.type.types.Type; import net.sourceforge.cilib.type.types.container.Vector; /** * - * @param <E> + * @param <E> The entity type. * @author Andries Engelbrecht */ public class RandomBoundedInitializationStrategy<E extends Entity> implements @@ -38,18 +38,18 @@ public class RandomBoundedInitializationStrategy<E extends Entity> implements private static final long serialVersionUID = -7926839076670354209L; private ControlParameter lowerBound; private ControlParameter upperBound; - private RandomNumber random1; + private RandomNumber random; public RandomBoundedInitializationStrategy() { this.lowerBound = new ConstantControlParameter(0.1); this.upperBound = new ConstantControlParameter(0.1); - this.random1 = new RandomNumber(); + this.random = new RandomNumber(); } public RandomBoundedInitializationStrategy(RandomBoundedInitializationStrategy copy) { this.lowerBound = copy.lowerBound; this.upperBound = copy.upperBound; - this.random1 = copy.random1; + this.random = copy.random; } @Override @@ -59,10 +59,11 @@ public class RandomBoundedInitializationStrategy<E extends Entity> implements @Override public void initialize(Enum<?> key, E entity) { - Particle particle = (Particle) entity; - Vector velocity = (Vector) particle.getVelocity(); + Type type = entity.getProperties().get(key); + Vector velocity = (Vector) type; + for (int i = 0; i < velocity.getDimension(); i++) - velocity.setReal(i, random1.getUniform(lowerBound.getParameter(), upperBound.getParameter())); + velocity.setReal(i, random.getUniform(lowerBound.getParameter(), upperBound.getParameter())); } public ControlParameter getLowerBound() { diff --git a/src/main/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategy.java index 0b9ca61..9215c03 100644 --- a/src/main/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategy.java @@ -29,7 +29,7 @@ import net.sourceforge.cilib.type.types.Type; /** * - * @param <E> + * @param <E> */ public class RandomInitializationStrategy<E extends Entity> implements InitializationStrategy<E> { private static final long serialVersionUID = 5630272366805104400L; @@ -40,9 +40,13 @@ public class RandomInitializationStrategy<E extends Entity> implements Initializ this.random = new MersenneTwister(); } + public RandomInitializationStrategy(RandomInitializationStrategy copy) { + this.random = copy.random.getClone(); + } + @Override public RandomInitializationStrategy getClone() { - return this; + return new RandomInitializationStrategy(this); } @Override diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/ChargedParticle.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/ChargedParticle.java index 6506127..07c11d1 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/ChargedParticle.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/ChargedParticle.java @@ -105,7 +105,7 @@ public class ChargedParticle extends DynamicParticle/*StandardParticle implement @Override public void initialise(OptimisationProblem problem) { - getPositionInitialisationStrategy().initialise(this, problem); + getPositionInitialisationStrategy().initialize(EntityType.CANDIDATE_SOLUTION, this); // Create the velocity vector by cloning the position and setting all the values // within the velocity to 0 diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java b/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java index 17d719f..bbc85bd 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java @@ -27,9 +27,8 @@ import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.entity.initialization.ConstantInitializationStrategy; import net.sourceforge.cilib.entity.initialization.InitializationStrategy; +import net.sourceforge.cilib.entity.initialization.RandomInitializationStrategy; import net.sourceforge.cilib.problem.Fitness; -import net.sourceforge.cilib.pso.particle.initialisation.PositionInitialisationStrategy; -import net.sourceforge.cilib.pso.particle.initialisation.RandomizedPositionInitialisationStrategy; import net.sourceforge.cilib.pso.positionupdatestrategies.MemoryNeighbourhoodBestUpdateStrategy; import net.sourceforge.cilib.pso.positionupdatestrategies.PersonalBestUpdateStrategy; import net.sourceforge.cilib.pso.positionupdatestrategies.NeighbourhoodBestUpdateStrategy; @@ -51,10 +50,9 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl protected PositionUpdateStrategy positionUpdateStrategy; protected VelocityUpdateStrategy velocityUpdateStrategy; - protected InitializationStrategy velocityInitializationStrategy; - // TODO: Factor this out into a Particle intialisation strategy.... keep in mind the heterogeneous swarm thingy - protected PositionInitialisationStrategy positionInitialisationStrategy; - // protected PersonalBestInitialisationStrategy personalBestInitialisationStrategy; + protected InitializationStrategy<Particle> velocityInitializationStrategy; + protected InitializationStrategy<Particle> positionInitialisationStrategy; + protected InitializationStrategy<Particle> personalBestInitialisationStrategy; protected PersonalBestUpdateStrategy personalBestUpdateStrategy; protected NeighbourhoodBestUpdateStrategy neighbourhoodBestUpdateStrategy; @@ -68,9 +66,9 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl positionUpdateStrategy = new StandardPositionUpdateStrategy(); velocityUpdateStrategy = new StandardVelocityUpdate(); - positionInitialisationStrategy = new RandomizedPositionInitialisationStrategy(); - velocityInitializationStrategy = new ConstantInitializationStrategy(0.0); - + velocityInitializationStrategy = new ConstantInitializationStrategy<Particle>(0.0); + positionInitialisationStrategy = new RandomInitializationStrategy<Particle>(); + personalBestUpdateStrategy = new StandardPersonalBestUpdateStrategy(); } @@ -261,7 +259,7 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl * Get the current {@linkplain PositionInitialisationStrategy}. * @return The current {@linkplain PositionInitialisationStrategy}. */ - public PositionInitialisationStrategy getPositionInitialisationStrategy() { + public InitializationStrategy<Particle> getPositionInitialisationStrategy() { return positionInitialisationStrategy; } @@ -269,7 +267,7 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl * Set the {@linkplain PositionInitialisationStrategy} to be used. * @param positionInitialisationStrategy The value to set. */ - public void setPositionInitialisationStrategy(PositionInitialisationStrategy positionInitialisationStrategy) { + public void setPositionInitialisationStrategy(InitializationStrategy positionInitialisationStrategy) { this.positionInitialisationStrategy = positionInitialisationStrategy; } diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/StandardParticle.java b/src/main/java/net/sourceforge/cilib/pso/particle/StandardParticle.java index 825eeec..3b37315 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/StandardParticle.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/StandardParticle.java @@ -134,16 +134,19 @@ public class StandardParticle extends AbstractParticle { */ @Override public void initialise(OptimisationProblem problem) { - getPositionInitialisationStrategy().initialise(this, problem); + this.getProperties().put(EntityType.CANDIDATE_SOLUTION, problem.getDomain().getBuiltRepresenation().getClone()); + + this.getPositionInitialisationStrategy().initialize(EntityType.CANDIDATE_SOLUTION, this); + this.getProperties().put(EntityType.Particle.BEST_POSITION, getPosition().getClone()); // Create the velocity vector by cloning the position and setting all the values // within the velocity to 0 this.getProperties().put(EntityType.Particle.VELOCITY, getPosition().getClone()); - velocityInitializationStrategy.initialize(EntityType.Particle.VELOCITY, this); + this.velocityInitializationStrategy.initialize(EntityType.Particle.VELOCITY, this); this.getProperties().put(EntityType.FITNESS, InferiorFitness.instance()); this.getProperties().put(EntityType.Particle.BEST_FITNESS, InferiorFitness.instance()); - neighbourhoodBest = this; + this.neighbourhoodBest = this; } /** diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/PositionInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/PositionInitialisationStrategy.java deleted file mode 100644 index 7e4b69e..0000000 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/PositionInitialisationStrategy.java +++ /dev/null @@ -1,39 +0,0 @@ -/** - * Copyright (C) 2003 - 2009 - * Computational Intelligence Research Group (CIRG@UP) - * Department of Computer Science - * University of Pretoria - * South Africa - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package net.sourceforge.cilib.pso.particle.initialisation; - -import java.io.Serializable; - -import net.sourceforge.cilib.entity.Particle; -import net.sourceforge.cilib.problem.OptimisationProblem; -import net.sourceforge.cilib.util.Cloneable; - -/** - * TODO: Complete this javadoc. - */ -public interface PositionInitialisationStrategy extends Serializable, Cloneable { - - public PositionInitialisationStrategy getClone(); - - public void initialise(Particle particle, OptimisationProblem problem); - -} diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java deleted file mode 100644 index 9211875..0000000 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java +++ /dev/null @@ -1,61 +0,0 @@ -/** - * Copyright (C) 2003 - 2009 - * Computational Intelligence Research Group (CIRG@UP) - * Department of Computer Science - * University of Pretoria - * South Africa - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package net.sourceforge.cilib.pso.particle.initialisation; - -import net.sourceforge.cilib.entity.EntityType; -import net.sourceforge.cilib.entity.Particle; -import net.sourceforge.cilib.math.random.generator.MersenneTwister; -import net.sourceforge.cilib.math.random.generator.Random; -import net.sourceforge.cilib.problem.OptimisationProblem; - - -/** - * @deprecated This class is a temporary measure until we can get the DomainParser - * working as intended. the idea is to be able to specify particle - * contents via the string and have the randomness applied on initialisation. - * A specific example is to use this new string when initialising positions - * with Polar coordinates for example - * @author gpampara - * - */ -public class RandomizedPositionInitialisationStrategy implements - PositionInitialisationStrategy { - private static final long serialVersionUID = -47429588645761362L; - - private Random random; - - public RandomizedPositionInitialisationStrategy() { - this.random = new MersenneTwister(); - } - - public RandomizedPositionInitialisationStrategy getClone() { - return new RandomizedPositionInitialisationStrategy(); - } - - public void initialise(Particle particle, OptimisationProblem problem) { - particle.setCandidateSolution(problem.getDomain().getBuiltRepresenation().getClone()); - particle.getPosition().randomize(random); - - particle.getProperties().put(EntityType.Particle.BEST_POSITION, particle.getPosition().getClone()); - } - -} diff --git a/src/main/java/net/sourceforge/cilib/type/types/Real.java b/src/main/java/net/sourceforge/cilib/type/types/Real.java index 0a626dc..6ec2615 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Real.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Real.java @@ -25,7 +25,6 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import net.sourceforge.cilib.math.Maths; import net.sourceforge.cilib.math.random.generator.Random; diff --git a/src/test/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategyTest.java b/src/test/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategyTest.java new file mode 100644 index 0000000..1622b99 --- /dev/null +++ b/src/test/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategyTest.java @@ -0,0 +1,76 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.entity.initialization; + +import net.sourceforge.cilib.ec.Individual; +import net.sourceforge.cilib.entity.EntityType; +import net.sourceforge.cilib.math.Maths; +import net.sourceforge.cilib.type.types.Real; +import net.sourceforge.cilib.type.types.container.Vector; +import net.sourceforge.cilib.util.Vectors; +import org.junit.Assert; +import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; + +/** + * + * @author gpampara + */ +public class ConstantInitializationStrategyTest { + + @Test + public void testGetClone() { + ConstantInitializationStrategy strategy = new ConstantInitializationStrategy(1.0); + ConstantInitializationStrategy clone = strategy.getClone(); + + Assert.assertNotSame(strategy, clone); + Assert.assertEquals(strategy.getConstant(), clone.getConstant(), Maths.EPSILON); + } + + @Test + public void initialize() { + Vector vector = Vectors.create(1.0, 1.0, 1.0); + Individual individual = new Individual(); + individual.getProperties().put(EntityType.CANDIDATE_SOLUTION, vector.getClone()); + + ConstantInitializationStrategy<Individual> initializationStrategy = new ConstantInitializationStrategy<Individual>(); + initializationStrategy.initialize(EntityType.CANDIDATE_SOLUTION, individual); + + Vector chromosome = (Vector) individual.getCandidateSolution(); + + for (int i = 0; i < vector.size(); i++) { + Assert.assertThat(vector.getReal(i), is(not(chromosome.getReal(i)))); + } + } + + @Test(expected=UnsupportedOperationException.class) + public void invalidInitialize() { + Individual individual = new Individual(); + individual.getProperties().put(EntityType.CANDIDATE_SOLUTION, new Real()); + + ConstantInitializationStrategy<Individual> initializationStrategy = new ConstantInitializationStrategy<Individual>(); + + initializationStrategy.initialize(EntityType.CANDIDATE_SOLUTION, individual); + } + +} \ No newline at end of file diff --git a/src/test/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategyTest.java b/src/test/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategyTest.java new file mode 100644 index 0000000..82130a5 --- /dev/null +++ b/src/test/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategyTest.java @@ -0,0 +1,69 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.entity.initialization; + +import net.sourceforge.cilib.entity.EntityType; +import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.pso.particle.StandardParticle; +import net.sourceforge.cilib.type.types.Real; +import net.sourceforge.cilib.type.types.container.Vector; +import org.junit.Assert; +import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.Matchers.lessThanOrEqualTo; + +/** + * + * @author gpampara + */ +public class DomainPercentageInitializationStrategyTest { + + @Test + public void initialize() { + Real r = new Real(-8.0, 8.0); + Vector vector = new Vector(); + vector.add(r.getClone()); + vector.add(r.getClone()); + vector.add(r.getClone()); + + Particle particle = new StandardParticle(); + particle.getProperties().put(EntityType.Particle.VELOCITY, vector); + + DomainPercentageInitializationStrategy<Particle> strategy = new DomainPercentageInitializationStrategy<Particle>(); + strategy.setVelocityInitialisationStrategy(new ConstantInitializationStrategy(1.0)); + strategy.initialize(EntityType.Particle.VELOCITY, particle); + + Vector velocity = (Vector) particle.getVelocity(); + for (int i = 0; i < velocity.size(); i++) { + Assert.assertThat(velocity.getReal(i), is(lessThanOrEqualTo(0.1))); + } + } + + @Test + public void defaultPercentage() { + DomainPercentageInitializationStrategy strategy = new DomainPercentageInitializationStrategy(); + + Assert.assertThat(strategy.getPercentage(), is(equalTo(0.1))); + } + +} \ No newline at end of file diff --git a/src/test/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategyTest.java b/src/test/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategyTest.java new file mode 100644 index 0000000..6ec2d94 --- /dev/null +++ b/src/test/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategyTest.java @@ -0,0 +1,65 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.entity.initialization; + +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; +import net.sourceforge.cilib.entity.EntityType; +import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.pso.particle.StandardParticle; +import net.sourceforge.cilib.type.types.Int; +import net.sourceforge.cilib.type.types.Numeric; +import net.sourceforge.cilib.type.types.Real; +import net.sourceforge.cilib.type.types.container.Vector; +import org.junit.Assert; +import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.lessThanOrEqualTo; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; + +/** + * + */ +public class RandomBoundedInitializationStrategyTest { + + @Test + public void initialize() { + Vector vector = new Vector(); + vector.add(new Real(5.0)); + vector.add(new Real(10.0)); + vector.add(new Int(7)); + + Particle particle = new StandardParticle(); + particle.getProperties().put(EntityType.CANDIDATE_SOLUTION, vector); + + RandomBoundedInitializationStrategy<Particle> strategy = new RandomBoundedInitializationStrategy<Particle>(); + strategy.setLowerBound(new ConstantControlParameter(-5.0)); + strategy.setUpperBound(new ConstantControlParameter(5.0)); + strategy.initialize(EntityType.CANDIDATE_SOLUTION, particle); + + for (int i = 0; i < vector.size(); i++) { + Numeric numeric = vector.get(i); + Assert.assertThat(numeric.getReal(), is(greaterThanOrEqualTo(-5.0))); + Assert.assertThat(numeric.getReal(), is(lessThanOrEqualTo(5.0))); + } + } + +} \ No newline at end of file diff --git a/src/test/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategyTest.java b/src/test/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategyTest.java new file mode 100644 index 0000000..228f39b --- /dev/null +++ b/src/test/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategyTest.java @@ -0,0 +1,85 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.entity.initialization; + +import net.sourceforge.cilib.entity.EntityType; +import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.math.random.generator.Random; +import net.sourceforge.cilib.pso.particle.StandardParticle; +import net.sourceforge.cilib.type.types.Blackboard; +import net.sourceforge.cilib.type.types.Type; +import net.sourceforge.cilib.type.types.container.StructuredType; +import net.sourceforge.cilib.type.types.container.Vector; +import net.sourceforge.cilib.util.Vectors; +import org.jmock.Expectations; +import org.jmock.Mockery; +import org.jmock.integration.junit4.JMock; +import org.jmock.integration.junit4.JUnit4Mockery; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; + +/** + * + * @author gpampara + */ +@RunWith(JMock.class) +public class RandomInitializationStrategyTest { + private Mockery mockery = new JUnit4Mockery(); + + @Test + public void testInitialize() { + Vector expected = Vectors.create(1.0, 1.0, 1.0); + Particle particle = new StandardParticle(); + particle.getProperties().put(EntityType.CANDIDATE_SOLUTION, expected.getClone()); + + RandomInitializationStrategy<Particle> strategy = new RandomInitializationStrategy<Particle>(); + strategy.initialize(EntityType.CANDIDATE_SOLUTION, particle); + + Vector position = (Vector) particle.getPosition(); + + for (int i = 0; i < particle.getDimension(); i++) { + Assert.assertThat(expected.getReal(i), is(not(equalTo(position.getReal(i))))); + } + } + + @Test + public void randomized() { + final Particle particle = mockery.mock(Particle.class); + final StructuredType randomizable = mockery.mock(StructuredType.class); + final Blackboard<Enum<?>, Type> blackboard = new Blackboard<Enum<?>, Type>(); + blackboard.put(EntityType.CANDIDATE_SOLUTION, randomizable); + + RandomInitializationStrategy<Particle> strategy = new RandomInitializationStrategy<Particle>(); + + mockery.checking(new Expectations() {{ + oneOf(particle).getProperties(); will(returnValue(blackboard)); + oneOf(randomizable).randomize(with(any(Random.class))); + }}); + + strategy.initialize(EntityType.CANDIDATE_SOLUTION, particle); + } + +} \ No newline at end of file -- 1.6.3.3 |
From: Gary P. <gpa...@gm...> - 2009-07-06 05:46:55
|
Initialization strategies are actually very similar. These pathces are the start of the generalization of the classes. EC algorithms need initialization as well, as a result, these initialization classes should not be restricted to PSO. Signed-off-by: Gary Pampara <gpa...@gm...> --- .../net/sourceforge/cilib/entity/Particle.java | 8 ++- .../ConstantInitializationStrategy.java} | 39 ++++++++---- .../DomainPercentageInitializationStrategy.java} | 28 ++++++---- .../initialization/InitializationStrategy.java} | 21 ++----- .../RandomBoundedInitializationStrategy.java} | 21 ++++--- .../RandomInitializationStrategy.java | 61 ++++++++++++++++++++ .../cilib/pso/dynamic/ChargedParticle.java | 3 +- .../net/sourceforge/cilib/pso/niching/Niche.java | 4 +- .../cilib/pso/particle/AbstractParticle.java | 27 ++++----- .../cilib/pso/particle/StandardParticle.java | 26 +-------- .../RandomInitialVelocityStrategy.java | 52 ----------------- xml/coop-pso.xml | 4 +- 12 files changed, 147 insertions(+), 147 deletions(-) rename src/main/java/net/sourceforge/cilib/{pso/particle/initialisation/ZeroInitialVelocityStrategy.java => entity/initialization/ConstantInitializationStrategy.java} (50%) rename src/main/java/net/sourceforge/cilib/{pso/particle/initialisation/DomainPercentageVelocityInitialisationStrategy.java => entity/initialization/DomainPercentageInitializationStrategy.java} (66%) rename src/main/java/net/sourceforge/cilib/{pso/particle/initialisation/VelocityInitialisationStrategy.java => entity/initialization/InitializationStrategy.java} (58%) rename src/main/java/net/sourceforge/cilib/{pso/particle/initialisation/RandomBoundedInitialVelocityStrategy.java => entity/initialization/RandomBoundedInitializationStrategy.java} (79%) create mode 100644 src/main/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategy.java delete mode 100644 src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomInitialVelocityStrategy.java diff --git a/src/main/java/net/sourceforge/cilib/entity/Particle.java b/src/main/java/net/sourceforge/cilib/entity/Particle.java index b271553..c145db0 100644 --- a/src/main/java/net/sourceforge/cilib/entity/Particle.java +++ b/src/main/java/net/sourceforge/cilib/entity/Particle.java @@ -21,9 +21,10 @@ */ package net.sourceforge.cilib.entity; +import net.sourceforge.cilib.controlparameter.ControlParameter; +import net.sourceforge.cilib.entity.initialization.InitializationStrategy; import net.sourceforge.cilib.pso.positionupdatestrategies.PersonalBestUpdateStrategy; import net.sourceforge.cilib.problem.Fitness; -import net.sourceforge.cilib.pso.particle.initialisation.VelocityInitialisationStrategy; import net.sourceforge.cilib.pso.positionupdatestrategies.PositionUpdateStrategy; import net.sourceforge.cilib.pso.velocityupdatestrategies.VelocityUpdateStrategy; import net.sourceforge.cilib.type.types.Type; @@ -37,6 +38,7 @@ public interface Particle extends Entity, SocialEntity { /** * {@inheritDoc} */ + @Override public Particle getClone(); /** @@ -117,13 +119,13 @@ public interface Particle extends Entity, SocialEntity { * Get the strategy for the intialisation of the velocity. * @return The {@linkplain VelocityInitialisationStrategy} that is currently set. */ - public VelocityInitialisationStrategy getVelocityInitialisationStrategy(); + public InitializationStrategy getVelocityInitializationStrategy(); /** * Set the initialisation strategy for the {@linkplain Particle}s velocity. * @param velocityInitialisationStrategy The velocity initialisation strategy to set. */ - public void setVelocityInitialisationStrategy(VelocityInitialisationStrategy velocityInitialisationStrategy); + public void setVelocityInitializationStrategy(InitializationStrategy velocityInitialisationStrategy); /** * Get the current {@linkplain PositionUpdateStrategy} of the {@linkplain Particle}. diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/ZeroInitialVelocityStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategy.java similarity index 50% rename from src/main/java/net/sourceforge/cilib/pso/particle/initialisation/ZeroInitialVelocityStrategy.java rename to src/main/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategy.java index 22120e6..674161b 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/ZeroInitialVelocityStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/ConstantInitializationStrategy.java @@ -19,35 +19,48 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -package net.sourceforge.cilib.pso.particle.initialisation; +package net.sourceforge.cilib.entity.initialization; -import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.type.types.container.Vector; /** * - * @author Gary Pampara + * @param <E> */ -public class ZeroInitialVelocityStrategy implements - VelocityInitialisationStrategy { - private static final long serialVersionUID = 7339106246533286485L; +public class ConstantInitializationStrategy<E extends Entity> implements InitializationStrategy<E> { + private static final long serialVersionUID = 4198258321374130337L; - public ZeroInitialVelocityStrategy() { + private double constant; + public ConstantInitializationStrategy() { + this.constant = 0.0; } - public ZeroInitialVelocityStrategy(ZeroInitialVelocityStrategy copy) { + public ConstantInitializationStrategy(double value) { + this.constant = value; + } + @Override + public ConstantInitializationStrategy getClone() { + return this; } - public ZeroInitialVelocityStrategy getClone() { - return new ZeroInitialVelocityStrategy(this); + @Override + public void initialize(Enum<?> key, E entity) { + Vector vector = (Vector) entity.getProperties().get(key); + + for (int i = 0; i < vector.size(); i++) { + vector.setReal(i, constant); + } } - public void initialise(Particle particle) { - Vector velocity = (Vector) particle.getVelocity(); + public double getConstant() { + return constant; + } - velocity.reset(); + public void setConstant(double constant) { + this.constant = constant; } } diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/DomainPercentageVelocityInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategy.java similarity index 66% rename from src/main/java/net/sourceforge/cilib/pso/particle/initialisation/DomainPercentageVelocityInitialisationStrategy.java rename to src/main/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategy.java index 08aba43..4941359 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/DomainPercentageVelocityInitialisationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/DomainPercentageInitializationStrategy.java @@ -19,38 +19,44 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -package net.sourceforge.cilib.pso.particle.initialisation; +package net.sourceforge.cilib.entity.initialization; +import net.sourceforge.cilib.entity.Entity; +import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.type.types.container.Vector; /** * TODO: this class should be refactored to use the RandomInitialVelocityStrategy or to be a compound * operation where the velocity is first randomised and then scaled by a percentage. + * @param <E> The entity type. */ -public class DomainPercentageVelocityInitialisationStrategy implements - VelocityInitialisationStrategy { +public class DomainPercentageInitializationStrategy<E extends Entity> implements + InitializationStrategy<E> { private static final long serialVersionUID = -7178323673738508287L; - private VelocityInitialisationStrategy velocityInitialisationStrategy; + private InitializationStrategy velocityInitialisationStrategy; private double percentage; - public DomainPercentageVelocityInitialisationStrategy() { - this.velocityInitialisationStrategy = new RandomInitialVelocityStrategy(); + public DomainPercentageInitializationStrategy() { + this.velocityInitialisationStrategy = new RandomInitializationStrategy(); this.percentage = 0.1; } - public DomainPercentageVelocityInitialisationStrategy(DomainPercentageVelocityInitialisationStrategy copy) { + public DomainPercentageInitializationStrategy(DomainPercentageInitializationStrategy copy) { this.velocityInitialisationStrategy = copy.velocityInitialisationStrategy.getClone(); this.percentage = copy.percentage; } - public DomainPercentageVelocityInitialisationStrategy getClone() { - return new DomainPercentageVelocityInitialisationStrategy(this); + @Override + public DomainPercentageInitializationStrategy getClone() { + return new DomainPercentageInitializationStrategy(this); } - public void initialise(Particle particle) { - velocityInitialisationStrategy.initialise(particle); + @Override + public void initialize(Enum<?> key, E entity) { + Particle particle = (Particle) entity; + velocityInitialisationStrategy.initialize(EntityType.Particle.VELOCITY, particle); Vector velocity = (Vector) particle.getVelocity(); for (int i = 0; i < velocity.getDimension(); ++i) { diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/VelocityInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/InitializationStrategy.java similarity index 58% rename from src/main/java/net/sourceforge/cilib/pso/particle/initialisation/VelocityInitialisationStrategy.java rename to src/main/java/net/sourceforge/cilib/entity/initialization/InitializationStrategy.java index 76568bb..9424e87 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/VelocityInitialisationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/InitializationStrategy.java @@ -19,30 +19,19 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -package net.sourceforge.cilib.pso.particle.initialisation; -import java.io.Serializable; +package net.sourceforge.cilib.entity.initialization; -import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.util.Cloneable; /** - * Interface defining the valid tasks available for velocity intialisation. * - * @author Gary Pampara */ -public interface VelocityInitialisationStrategy extends Cloneable, Serializable { +public interface InitializationStrategy<E> extends Cloneable { - /** - * Clone the VeclocityInitialisationStrategy. - * @return A copy of the VelocityInitialisationStrategy. - */ - public VelocityInitialisationStrategy getClone(); + @Override + public InitializationStrategy getClone(); - /** - * Initialise the Particle velocity. - * @param particle The velocity vector of the particle to initialise. - */ - public void initialise(Particle particle); + public void initialize(Enum<?> key, E entity); } diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomBoundedInitialVelocityStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategy.java similarity index 79% rename from src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomBoundedInitialVelocityStrategy.java rename to src/main/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategy.java index 47f07cb..f30e62f 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomBoundedInitialVelocityStrategy.java +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/RandomBoundedInitializationStrategy.java @@ -19,42 +19,47 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -package net.sourceforge.cilib.pso.particle.initialisation; +package net.sourceforge.cilib.entity.initialization; import net.sourceforge.cilib.controlparameter.ConstantControlParameter; import net.sourceforge.cilib.controlparameter.ControlParameter; +import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.math.random.RandomNumber; import net.sourceforge.cilib.type.types.container.Vector; /** * + * @param <E> * @author Andries Engelbrecht */ -public class RandomBoundedInitialVelocityStrategy implements - VelocityInitialisationStrategy { +public class RandomBoundedInitializationStrategy<E extends Entity> implements + InitializationStrategy<E> { private static final long serialVersionUID = -7926839076670354209L; private ControlParameter lowerBound; private ControlParameter upperBound; private RandomNumber random1; - public RandomBoundedInitialVelocityStrategy() { + public RandomBoundedInitializationStrategy() { this.lowerBound = new ConstantControlParameter(0.1); this.upperBound = new ConstantControlParameter(0.1); this.random1 = new RandomNumber(); } - public RandomBoundedInitialVelocityStrategy(RandomBoundedInitialVelocityStrategy copy) { + public RandomBoundedInitializationStrategy(RandomBoundedInitializationStrategy copy) { this.lowerBound = copy.lowerBound; this.upperBound = copy.upperBound; this.random1 = copy.random1; } - public RandomBoundedInitialVelocityStrategy getClone() { - return new RandomBoundedInitialVelocityStrategy(this); + @Override + public RandomBoundedInitializationStrategy getClone() { + return new RandomBoundedInitializationStrategy(this); } - public void initialise(Particle particle) { + @Override + public void initialize(Enum<?> key, E entity) { + Particle particle = (Particle) entity; Vector velocity = (Vector) particle.getVelocity(); for (int i = 0; i < velocity.getDimension(); i++) velocity.setReal(i, random1.getUniform(lowerBound.getParameter(), upperBound.getParameter())); diff --git a/src/main/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategy.java b/src/main/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategy.java new file mode 100644 index 0000000..0b9ca61 --- /dev/null +++ b/src/main/java/net/sourceforge/cilib/entity/initialization/RandomInitializationStrategy.java @@ -0,0 +1,61 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.entity.initialization; + +import net.sourceforge.cilib.entity.Entity; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.math.random.generator.Random; +import net.sourceforge.cilib.type.types.Randomizable; +import net.sourceforge.cilib.type.types.Type; + +/** + * + * @param <E> + */ +public class RandomInitializationStrategy<E extends Entity> implements InitializationStrategy<E> { + private static final long serialVersionUID = 5630272366805104400L; + + private Random random; + + public RandomInitializationStrategy() { + this.random = new MersenneTwister(); + } + + @Override + public RandomInitializationStrategy getClone() { + return this; + } + + @Override + public void initialize(Enum<?> key, E entity) { + Type type = entity.getProperties().get(key); + + if (type instanceof Randomizable) { + Randomizable randomizable = (Randomizable) type; + randomizable.randomize(random); + return; + } + + throw new UnsupportedOperationException("Cannot initialize a non Randomizable instance."); + } + +} diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/ChargedParticle.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/ChargedParticle.java index 1df1f75..6506127 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/ChargedParticle.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/ChargedParticle.java @@ -24,7 +24,6 @@ package net.sourceforge.cilib.pso.dynamic; import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.problem.OptimisationProblem; -import net.sourceforge.cilib.pso.PSO; /** * Charged Particle used by charged PSO (ChargedVelocityUpdate). The only difference @@ -112,7 +111,7 @@ public class ChargedParticle extends DynamicParticle/*StandardParticle implement // within the velocity to 0 this.getProperties().put(EntityType.Particle.VELOCITY, getPosition().getClone()); - velocityInitialisationStrategy.initialise(this); + velocityInitializationStrategy.initialize(EntityType.Particle.VELOCITY, this); // Initialise particle charge chargedParticleInitialisationStrategy.initialise(this); diff --git a/src/main/java/net/sourceforge/cilib/pso/niching/Niche.java b/src/main/java/net/sourceforge/cilib/pso/niching/Niche.java index 896b473..d19509f 100644 --- a/src/main/java/net/sourceforge/cilib/pso/niching/Niche.java +++ b/src/main/java/net/sourceforge/cilib/pso/niching/Niche.java @@ -29,11 +29,11 @@ import net.sourceforge.cilib.algorithm.population.MultiPopulationBasedAlgorithm; import net.sourceforge.cilib.algorithm.population.PopulationBasedAlgorithm; import net.sourceforge.cilib.controlparameter.ConstantControlParameter; import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.entity.initialization.ConstantInitializationStrategy; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.problem.OptimisationSolution; import net.sourceforge.cilib.pso.PSO; import net.sourceforge.cilib.pso.particle.StandardParticle; -import net.sourceforge.cilib.pso.particle.initialisation.ZeroInitialVelocityStrategy; import net.sourceforge.cilib.pso.velocityupdatestrategies.StandardVelocityUpdate; import net.sourceforge.cilib.stoppingcondition.StoppingCondition; import net.sourceforge.cilib.type.types.container.Vector; @@ -52,7 +52,7 @@ public class Niche extends MultiPopulationBasedAlgorithm { this.mainSwarm = new PSO(); Particle mainSwarmParticle = new StandardParticle(); - mainSwarmParticle.setVelocityInitialisationStrategy(new ZeroInitialVelocityStrategy()); + mainSwarmParticle.setVelocityInitializationStrategy(new ConstantInitializationStrategy(0.0)); StandardVelocityUpdate velocityUpdateStrategy = new StandardVelocityUpdate(); velocityUpdateStrategy.setSocialAcceleration(new ConstantControlParameter(0.0)); diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java b/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java index d015358..17d719f 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java @@ -25,11 +25,11 @@ import net.sourceforge.cilib.pso.positionupdatestrategies.StandardPersonalBestUp import net.sourceforge.cilib.entity.AbstractEntity; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.entity.initialization.ConstantInitializationStrategy; +import net.sourceforge.cilib.entity.initialization.InitializationStrategy; import net.sourceforge.cilib.problem.Fitness; import net.sourceforge.cilib.pso.particle.initialisation.PositionInitialisationStrategy; import net.sourceforge.cilib.pso.particle.initialisation.RandomizedPositionInitialisationStrategy; -import net.sourceforge.cilib.pso.particle.initialisation.VelocityInitialisationStrategy; -import net.sourceforge.cilib.pso.particle.initialisation.ZeroInitialVelocityStrategy; import net.sourceforge.cilib.pso.positionupdatestrategies.MemoryNeighbourhoodBestUpdateStrategy; import net.sourceforge.cilib.pso.positionupdatestrategies.PersonalBestUpdateStrategy; import net.sourceforge.cilib.pso.positionupdatestrategies.NeighbourhoodBestUpdateStrategy; @@ -51,7 +51,7 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl protected PositionUpdateStrategy positionUpdateStrategy; protected VelocityUpdateStrategy velocityUpdateStrategy; - protected VelocityInitialisationStrategy velocityInitialisationStrategy; + protected InitializationStrategy velocityInitializationStrategy; // TODO: Factor this out into a Particle intialisation strategy.... keep in mind the heterogeneous swarm thingy protected PositionInitialisationStrategy positionInitialisationStrategy; // protected PersonalBestInitialisationStrategy personalBestInitialisationStrategy; @@ -69,7 +69,7 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl velocityUpdateStrategy = new StandardVelocityUpdate(); positionInitialisationStrategy = new RandomizedPositionInitialisationStrategy(); - velocityInitialisationStrategy = new ZeroInitialVelocityStrategy(); + velocityInitializationStrategy = new ConstantInitializationStrategy(0.0); personalBestUpdateStrategy = new StandardPersonalBestUpdateStrategy(); } @@ -84,7 +84,7 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl this.positionUpdateStrategy = copy.getPositionUpdateStrategy().getClone(); this.velocityUpdateStrategy = copy.velocityUpdateStrategy.getClone(); this.positionInitialisationStrategy = copy.positionInitialisationStrategy.getClone(); - this.velocityInitialisationStrategy = copy.velocityInitialisationStrategy.getClone(); + this.velocityInitializationStrategy = copy.velocityInitializationStrategy.getClone(); this.personalBestUpdateStrategy = copy.personalBestUpdateStrategy.getClone(); this.neighbourhoodBestUpdateStrategy = copy.neighbourhoodBestUpdateStrategy; } @@ -240,22 +240,21 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl } /** - * Get the {@linkplain VelocityInitialisationStrategy}. - * @return The current {@linkplain VelocityInitialisationStrategy}. + * Get the {@link net.sourceforge.cilib.entity.initialization.InitializationStrategy}. + * @return The current {@link net.sourceforge.cilib.entity.initialization.InitializationStrategy}. */ @Override - public VelocityInitialisationStrategy getVelocityInitialisationStrategy() { - return velocityInitialisationStrategy; + public InitializationStrategy getVelocityInitializationStrategy() { + return velocityInitializationStrategy; } /** - * Set the velocityInitialisationStrategy. - * @param velocityInitialisationStrategy The value to set. + * Set the velocityInitializationStrategy. + * @param initializationStrategy The value to set. */ @Override - public void setVelocityInitialisationStrategy( - VelocityInitialisationStrategy velocityInitialisationStrategy) { - this.velocityInitialisationStrategy = velocityInitialisationStrategy; + public void setVelocityInitializationStrategy(InitializationStrategy initializationStrategy) { + this.velocityInitializationStrategy = initializationStrategy; } /** diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/StandardParticle.java b/src/main/java/net/sourceforge/cilib/pso/particle/StandardParticle.java index 5aaa09d..825eeec 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/StandardParticle.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/StandardParticle.java @@ -26,7 +26,6 @@ import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.problem.Fitness; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.problem.OptimisationProblem; -import net.sourceforge.cilib.type.types.Type; import net.sourceforge.cilib.type.types.container.Vector; /** @@ -140,7 +139,7 @@ public class StandardParticle extends AbstractParticle { // Create the velocity vector by cloning the position and setting all the values // within the velocity to 0 this.getProperties().put(EntityType.Particle.VELOCITY, getPosition().getClone()); - velocityInitialisationStrategy.initialise(this); + velocityInitializationStrategy.initialize(EntityType.Particle.VELOCITY, this); this.getProperties().put(EntityType.FITNESS, InferiorFitness.instance()); this.getProperties().put(EntityType.Particle.BEST_FITNESS, InferiorFitness.instance()); @@ -194,29 +193,8 @@ public class StandardParticle extends AbstractParticle { /** * {@inheritDoc} */ - public void setDimension(int dim) { - // TODO Auto-generated method stub - } - - /** - * {@inheritDoc} - */ - public Type getBehaviouralParameters() { - return null; - } - - /** - * {@inheritDoc} - */ - public void setBehaviouralParameters(Type type) { - - } - - /** - * {@inheritDoc} - */ @Override public void reinitialise() { - this.velocityInitialisationStrategy.initialise(this); + this.velocityInitializationStrategy.initialize(EntityType.Particle.VELOCITY, this); } } diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomInitialVelocityStrategy.java b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomInitialVelocityStrategy.java deleted file mode 100644 index 85f33c1..0000000 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomInitialVelocityStrategy.java +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Copyright (C) 2003 - 2009 - * Computational Intelligence Research Group (CIRG@UP) - * Department of Computer Science - * University of Pretoria - * South Africa - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -package net.sourceforge.cilib.pso.particle.initialisation; - -import net.sourceforge.cilib.entity.Particle; -import net.sourceforge.cilib.math.random.generator.MersenneTwister; -import net.sourceforge.cilib.type.types.container.Vector; - -/** - * - * @author Andries Engelbrecht - */ -public class RandomInitialVelocityStrategy implements VelocityInitialisationStrategy { - private static final long serialVersionUID = -7926839076670354209L; - - public RandomInitialVelocityStrategy() { - - } - - public RandomInitialVelocityStrategy(RandomInitialVelocityStrategy copy) { - - } - - public RandomInitialVelocityStrategy getClone() { - return new RandomInitialVelocityStrategy(this); - } - - public void initialise(Particle particle) { - Vector velocity = (Vector) particle.getVelocity(); - velocity.randomize(new MersenneTwister()); - } - -} diff --git a/xml/coop-pso.xml b/xml/coop-pso.xml index 94d8df9..b58aa3f 100644 --- a/xml/coop-pso.xml +++ b/xml/coop-pso.xml @@ -12,7 +12,7 @@ <initialisationStrategy class="algorithm.initialisation.ClonedPopulationInitialisationStrategy"> <entityNumber value="10"/> <entityType class="pso.particle.StandardParticle"> - <velocityInitialisationStrategy class="pso.particle.initialisation.RandomInitialVelocityStrategy"/> + <velocityInitializationStrategy class="entity.initialization.RandomInitializationStrategy"/> <velocityUpdateStrategy class="pso.velocityupdatestrategies.StandardVelocityUpdate"> <vMax class="controlparameter.ConstantControlParameter" parameter="0.07"/> </velocityUpdateStrategy> @@ -24,7 +24,7 @@ <initialisationStrategy class="algorithm.initialisation.ClonedPopulationInitialisationStrategy"> <entityNumber value="20"/> <entityType class="pso.particle.StandardParticle"> - <velocityInitialisationStrategy class="pso.particle.initialisation.RandomInitialVelocityStrategy"/> + <velocityInitializationStrategy class="entity.initialization.RandomInitializationStrategy"/> </entityType> </initialisationStrategy> </algorithm> -- 1.6.3.3 |
From: Andries E. <en...@cs...> - 2009-07-03 10:27:14
|
-- ========================================================== Prof Andries P Engelbrecht South African Research Chair in Artificial Intelligence Fundamentals of Computational Swarm Intelligence, John Wiley & Sons, December 2005. Computational Intelligence, An Introduction John Wiley & Sons, Second edition to be published soon Computational Intelligence Research Group: http://cirg.cs.up.ac.za Department of Computer Science School of Information Technology University of Pretoria Pretoria 0002, South Africa Tel: +27 12 420 3578 Fax: +27 12 362 5188 http://www.cs.up.ac.za/~engel ================================================ This message and attachments are subject to a disclaimer. Please refer to www.it.up.ac.za/documentation/governance/disclaimer/ for full details. / Hierdie boodskap en aanhangsels is aan 'n vrywaringsklousule onderhewig. Volledige besonderhede is by www.it.up.ac.za/documentation/governance/disclaimer/ beskikbaar. |
From: Gary P. <gpa...@gm...> - 2009-07-03 07:53:24
|
I've cleaned up the unit test to not need to be initialized as it was being done. Some mocks were created for the tests and as aresult they are simpler. Patch has been applied to next. On Friday 03 July 2009 08:21:33 Gary Pampara wrote: > Patch looks good. This is something that we have needed to add for a while > now. > > The test cases are a little complex though. Especially the > testUpdateAndConstraintAssertion(). The tests should ideally be testing one > thing per test. > > In the first part of the test, the following is executed: > > MersenneTwister twister = new MersenneTwister(); > FunctionMinimisationProblem problem = new > FunctionMinimisationProblem(); > problem.setFunction(new Spherical()); > > StandardParticle nBest = new StandardParticle(); > StandardParticle particle = new StandardParticle(); > particle.initialise(problem); > nBest.initialise(problem); > particle.getVelocity().randomize(twister); > particle.setNeighbourhoodBest(nBest); > > ConstrictionVelocityUpdate constrictionVelocityUpdate = new > ConstrictionVelocityUpdate(); > > boolean assertionExceptionOccured = false; > try { > constrictionVelocityUpdate.updateVelocity(particle); > } > catch(UnsupportedOperationException ex) { > assertionExceptionOccured = true; > } > > I understand the need to have c_1 + c_2 < 4, but is there a reason why the > are defaultly set to 3.0? Also, the execption thrown in the check within > the ConstrictionVelocityUpdate states that the values should be "greater or > equal to 4". I assume that was a typo? Or is the logic incorrect? > > The last part of that test tests that an exception is expected. We should > create a new test method for that with a signature similar to: > > @Test(expected=UnsupportedOperationException.class) > public void illegalVelocityUpdate() { > .... > > Or something similar :P I also want to see if we can't mock some of the > objects in the test to make the unit test more isolated. > > Regards, > Gary > > On Thursday 02 July 2009 14:46:24 Andrich wrote: > > Added a velocity update strategy for a Constriction PSO as well as its > > unit test. --- > > .../ConstrictionVelocityUpdate.java | 243 > > ++++++++++++++++++++ .../ConstrictionVelocityUpdateTest.java | > > 144 ++++++++++++ xml/constrictionPSO.xml | > > 57 +++++ > > 3 files changed, 444 insertions(+), 0 deletions(-) > > create mode 100644 > > src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric > >ti onVelocityUpdate.java create mode 100644 > > src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric > >ti onVelocityUpdateTest.java create mode 100644 xml/constrictionPSO.xml > > > > diff --git > > a/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constr > >ic tionVelocityUpdate.java > > b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constr > >ic tionVelocityUpdate.java new file mode 100644 > > index 0000000..41d955b > > --- /dev/null > > +++ > > b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constr > >ic tionVelocityUpdate.java @@ -0,0 +1,243 @@ > > +/** > > + * Copyright (C) 2003 - 2009 > > + * Computational Intelligence Research Group (CIRG@UP) > > + * Department of Computer Science > > + * University of Pretoria > > + * South Africa > > + * > > + * This program is free software; you can redistribute it and/or modify > > + * it under the terms of the GNU General Public License as published by > > + * the Free Software Foundation; either version 2 of the License, or > > + * (at your option) any later version. > > + * > > + * This program is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + * GNU General Public License for more details. > > + * > > + * You should have received a copy of the GNU General Public License > > + * along with this program; if not, write to the Free Software > > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > > USA + */ > > +package net.sourceforge.cilib.pso.velocityupdatestrategies; > > + > > +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; > > +import net.sourceforge.cilib.controlparameter.ControlParameter; > > +import > > net.sourceforge.cilib.controlparameter.RandomizingControlParameter; > > +import net.sourceforge.cilib.entity.Particle; > > +import net.sourceforge.cilib.type.types.container.Vector; > > + > > +/** > > + * A velocity update strategy that utilizes the constriction coefficient > > as + * developed by Clerc. References: > > + * <ul> > > + * <li> > > + * Inproceedings (Clerc1999) > > + * Clerc, M. > > + * The swarm and the queen: towards a deterministic and adaptive > > particle swarm + * optimization > > + * Evolutionary Computation, 1999. CEC 99. Proceedings of the 1999 > > Congress on, + * 1999, 3, -1957 Vol. 3 > > + * </li> > > + * <li> > > + * Article (Clerc2002) > > + * Clerc, M. & Kennedy, J. > > + * The particle swarm - explosion, stability, and convergence in a > > + * multidimensional complex space Evolutionary Computation, > > + * IEEE Transactions on, 2002, 6, 58-73 > > + * </li> > > + * </ul> > > + * > > + * Note, this strategy does not the inertia control parameter. > > + * Certain constraints are imposed on the other control parameters in > > order to + * calculate the constriction coefficient, namely: > > + * $c1r1 + c2r2 \leq 4$ , and > > + * $\kappa \in [0, 1]$ > > + * > > + * @author andrich > > + */ > > +public class ConstrictionVelocityUpdate implements > > VelocityUpdateStrategy { + > > + protected ControlParameter socialAcceleration; > > + protected ControlParameter cognitiveAcceleration; > > + protected ControlParameter vMax; > > + protected ControlParameter kappa; > > + > > + /** > > + * Default constructor. The values given to the control parameters > > attempt to + * adhere to the constraints of calculating the > > constriction constant, but do not + * necessarily represent good > > values. > > + */ > > + public ConstrictionVelocityUpdate() { > > + socialAcceleration = new RandomizingControlParameter(); > > + cognitiveAcceleration = new RandomizingControlParameter(); > > + vMax = new ConstantControlParameter(); > > + kappa = new ConstantControlParameter(); > > + > > + socialAcceleration.setParameter(3.0); > > + cognitiveAcceleration.setParameter(3.0); > > + vMax.setParameter(Double.MAX_VALUE); > > + kappa.setParameter(0.1); > > + } > > + > > + /** > > + * Copy constructor. > > + * @param orig the ConstrictionVelocityUpdate to copy. > > + */ > > + public ConstrictionVelocityUpdate(ConstrictionVelocityUpdate orig) { > > + this.socialAcceleration = new > > RandomizingControlParameter((RandomizingControlParameter) > > orig.socialAcceleration); + this.cognitiveAcceleration = new > > RandomizingControlParameter((RandomizingControlParameter) > > orig.cognitiveAcceleration); + this.vMax = new > > ConstantControlParameter((ConstantControlParameter) orig.vMax); + > > this.kappa = new ConstantControlParameter((ConstantControlParameter) > > orig.kappa); + } > > + > > + /** > > + * {@inheritDoc } > > + */ > > + @Override > > + public VelocityUpdateStrategy getClone() { > > + return new ConstrictionVelocityUpdate(this); > > + } > > + > > + /** > > + * {@inheritDoc } > > + */ > > + @Override > > + public void updateVelocity(Particle particle) { > > + assertAccelerationConstraints(); > > + > > + Vector velocity = (Vector) particle.getVelocity(); > > + Vector position = (Vector) particle.getPosition(); > > + Vector bestPosition = (Vector) particle.getBestPosition(); > > + Vector nBestPosition = (Vector) > > particle.getNeighbourhoodBest().getBestPosition(); + > > + > > + for (int i = 0; i < particle.getDimension(); ++i) { > > + // calculate the constriction coefficient > > + double c1 = cognitiveAcceleration.getParameter(); > > + double c2 = socialAcceleration.getParameter(); > > + // c1r1 + c2r2 has to be greater or equal to 4 > > + while ((c1 + c2) < 4) { > > + c1 = cognitiveAcceleration.getParameter(); > > + c2 = socialAcceleration.getParameter(); > > + } > > + double phi = c1 + c2; > > + double constrictionCoefficient = (2 * kappa.getParameter()) > > / + Math.abs(2 - phi - Math.sqrt(phi * (phi - 4.0))); > > + > > + double value = velocity.getReal(i) + > > + (bestPosition.getReal(i) - position.getReal(i)) * c1 > > + + (nBestPosition.getReal(i) - position.getReal(i)) * > > c2; + value = constrictionCoefficient * value; > > + velocity.setReal(i, value); > > + > > + clamp(velocity, i); > > + } > > + } > > + > > + /** > > + * Clamp to maximum velocity. > > + * @param velocity The {@link Vector} to be clamped. > > + * @param i The dimension index to be clamped > > + */ > > + protected void clamp(Vector velocity, int i) { > > + // if vMax is not set (or set as max), it is unnecessary to > > clamp + if (Double.compare(vMax.getParameter(), Double.MAX_VALUE) > > == 0) { + return; > > + } > > + if (velocity.getReal(i) < -vMax.getParameter()) { > > + velocity.setReal(i, -vMax.getParameter()); > > + } else if (velocity.getReal(i) > vMax.getParameter()) { > > + velocity.setReal(i, vMax.getParameter()); > > + } > > + } > > + > > + /** > > + * {@inheritDoc } > > + */ > > + @Override > > + public void updateControlParameters(Particle particle) { > > + this.kappa.updateParameter(); > > + this.cognitiveAcceleration.updateParameter(); > > + this.socialAcceleration.updateParameter(); > > + this.vMax.updateParameter(); > > + } > > + > > + /** > > + * Ensure that values of c1 and c2 make it possible to calculate the > > + * constriction coefficient. > > + */ > > + private void assertAccelerationConstraints() { > > + double c1 = ((RandomizingControlParameter) > > cognitiveAcceleration).getControlParameter().getParameter(); + > > double c2 = ((RandomizingControlParameter) > > socialAcceleration).getControlParameter().getParameter(); + if (c1 > > + c2 < 4) { > > + throw new UnsupportedOperationException("Parameter > > constraint violation: " + + "The sum of the Cognitive > > (" + c1 + ") and Social (" + c2 + ") acceleration parameters " + + > > "has to be greater than or equal to 4."); > > + } > > + } > > + > > + /** > > + * Get the coginitive acceleration parameter. > > + * @return the cognitive acceleration {@link ControlParameter > > control parameter }. + */ > > + public ControlParameter getCognitiveAcceleration() { > > + return cognitiveAcceleration; > > + } > > + > > + /** > > + * Set the coginitive acceleration parameter. > > + * @param cognitiveAcceleration the new cognitive acceleration > > {@link ControlParameter control parameter }. + */ > > + public void setCognitiveAcceleration(ControlParameter > > cognitiveAcceleration) { + this.cognitiveAcceleration = > > cognitiveAcceleration; > > + } > > + > > + /** > > + * Get the Kappa control parameter. > > + * @return the kappa {@link ControlParameter control parameter }. > > + */ > > + public ControlParameter getKappa() { > > + return kappa; > > + } > > + > > + /** > > + * Set the Kappa control parameter. > > + * @param kappa the new kappa {@link ControlParameter control > > parameter }. + */ > > + public void setKappa(ControlParameter kappa) { > > + this.kappa = kappa; > > + } > > + > > + /** > > + * Get the social acceleration parameter. > > + * @return the social acceleration {@link ControlParameter control > > parameter }. + */ > > + public ControlParameter getSocialAcceleration() { > > + return socialAcceleration; > > + } > > + > > + /** > > + * Set the social acceleration parameter. > > + * @param socialAcceleration the new social accerelation {@link > > ControlParameter control parameter }. + */ > > + public void setSocialAcceleration(ControlParameter > > socialAcceleration) { + this.socialAcceleration = > > socialAcceleration; > > + } > > + > > + /** > > + * Get the maximum velocity parameter. > > + * @return the maximum velocity {@link ControlParameter control > > parameter }. + */ > > + public ControlParameter getVMax() { > > + return vMax; > > + } > > + > > + /** > > + * Set the maximum velocity parameter. > > + * @param vMax the new maximum velocity {@link ControlParameter > > control parameter }. + */ > > + public void setVMax(ControlParameter vMax) { > > + this.vMax = vMax; > > + } > > +} > > diff --git > > a/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constr > >ic tionVelocityUpdateTest.java > > b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constr > >ic tionVelocityUpdateTest.java new file mode 100644 > > index 0000000..189cca9 > > --- /dev/null > > +++ > > b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constr > >ic tionVelocityUpdateTest.java @@ -0,0 +1,144 @@ > > +/** > > + * Copyright (C) 2003 - 2009 > > + * Computational Intelligence Research Group (CIRG@UP) > > + * Department of Computer Science > > + * University of Pretoria > > + * South Africa > > + * > > + * This program is free software; you can redistribute it and/or modify > > + * it under the terms of the GNU General Public License as published by > > + * the Free Software Foundation; either version 2 of the License, or > > + * (at your option) any later version. > > + * > > + * This program is distributed in the hope that it will be useful, > > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > + * GNU General Public License for more details. > > + * > > + * You should have received a copy of the GNU General Public License > > + * along with this program; if not, write to the Free Software > > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > > USA + */ > > +package net.sourceforge.cilib.pso.velocityupdatestrategies; > > + > > +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; > > +import > > net.sourceforge.cilib.controlparameter.RandomizingControlParameter; > > +import net.sourceforge.cilib.functions.continuous.Spherical; > > +import net.sourceforge.cilib.math.Maths; > > +import net.sourceforge.cilib.math.random.generator.MersenneTwister; > > +import net.sourceforge.cilib.problem.FunctionMinimisationProblem; > > +import net.sourceforge.cilib.pso.particle.StandardParticle; > > +import net.sourceforge.cilib.type.types.Numeric; > > +import net.sourceforge.cilib.type.types.container.Vector; > > +import org.junit.Assert; > > +import org.junit.Test; > > + > > +/** > > + * Unit test for the constriction velocity update. > > + * @author andrich > > + */ > > +public class ConstrictionVelocityUpdateTest { > > + > > + /** > > + * Test cloning and implicetly the copy constructor. > > + */ > > + @Test > > + public void testClone() { > > + ConstrictionVelocityUpdate original = new > > ConstrictionVelocityUpdate(); + ConstrictionVelocityUpdate copy = > > (ConstrictionVelocityUpdate) original.getClone(); + > > + Assert.assertEquals(original.getKappa().getParameter(), > > copy.getKappa().getParameter(), Maths.EPSILON); + > > Assert.assertEquals(original.getVMax().getParameter(), > > copy.getVMax().getParameter(), Maths.EPSILON); + > > Assert.assertEquals(((RandomizingControlParameter)original.cognitiveAccel > >er ation).getControlParameter().getParameter(), + > > ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParam > >et er().getParameter(), Maths.EPSILON); + > > Assert.assertEquals(((RandomizingControlParameter)original.socialAccelera > >ti on).getControlParameter().getParameter(), + > > ((RandomizingControlParameter)copy.socialAcceleration).getControlParamete > >r( ).getParameter(), Maths.EPSILON); + > > + copy.setKappa(new ConstantControlParameter(0.7)); > > + copy.setVMax(new ConstantControlParameter(0.7)); > > + RandomizingControlParameter randomizingControlParameter = new > > RandomizingControlParameter(); + > > randomizingControlParameter.setParameter(4.0); > > + copy.setSocialAcceleration(new > > RandomizingControlParameter(randomizingControlParameter.getClone())); + > > copy.setCognitiveAcceleration(new > > RandomizingControlParameter(randomizingControlParameter.getClone())); + > > + > > Assert.assertFalse(Double.compare(original.getKappa().getParameter(), > > copy.getKappa().getParameter()) == 0); + > > Assert.assertFalse(Double.compare(original.getVMax().getParameter(), > > copy.getVMax().getParameter()) == 0); + > > Assert.assertFalse(Double.compare(((RandomizingControlParameter)original. > >co gnitiveAcceleration).getControlParameter().getParameter(), + > > ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParam > >et er().getParameter()) == 0); + > > Assert.assertFalse(Double.compare(((RandomizingControlParameter)original. > >so cialAcceleration).getControlParameter().getParameter(), + > > ((RandomizingControlParameter)copy.socialAcceleration).getControlParamete > >r( ).getParameter()) == 0); + } > > + > > + /** > > + * Test the velocity update as well as the constraint assertion. > > + */ > > + @Test > > + public void testUpdateAndConstraintAssertion() { > > + MersenneTwister twister = new MersenneTwister(); > > + FunctionMinimisationProblem problem = new > > FunctionMinimisationProblem(); + problem.setFunction(new > > Spherical()); > > + > > + StandardParticle nBest = new StandardParticle(); > > + StandardParticle particle = new StandardParticle(); > > + particle.initialise(problem); > > + nBest.initialise(problem); > > + ((Vector)particle.getVelocity()).randomize(twister); > > + particle.setNeighbourhoodBest(nBest); > > + > > + ConstrictionVelocityUpdate constrictionVelocityUpdate = new > > ConstrictionVelocityUpdate(); + > > + boolean assertionExceptionOccured = false; > > + try { > > + constrictionVelocityUpdate.updateVelocity(particle); > > + } > > + catch(UnsupportedOperationException ex) { > > + assertionExceptionOccured = true; > > + } > > + > > + Assert.assertFalse(assertionExceptionOccured); > > + > > + RandomizingControlParameter randomizingControlParameter = new > > RandomizingControlParameter(); + > > randomizingControlParameter.setParameter(1.0); > > + constrictionVelocityUpdate.setSocialAcceleration(new > > RandomizingControlParameter(randomizingControlParameter.getClone())); + > > constrictionVelocityUpdate.setCognitiveAcceleration(new > > RandomizingControlParameter(randomizingControlParameter.getClone())); + > > + assertionExceptionOccured = false; > > + try { > > + constrictionVelocityUpdate.updateVelocity(particle); > > + } > > + catch(UnsupportedOperationException ex) { > > + assertionExceptionOccured = true; > > + } > > + > > + Assert.assertTrue(assertionExceptionOccured); > > + > > + } > > + > > + /** > > + * Test velocity clamping. > > + */ > > + @Test > > + public void testClamping() { > > + MersenneTwister twister = new MersenneTwister(); > > + FunctionMinimisationProblem problem = new > > FunctionMinimisationProblem(); + problem.setFunction(new > > Spherical()); > > + > > + StandardParticle nBest = new StandardParticle(); > > + StandardParticle particle = new StandardParticle(); > > + particle.initialise(problem); > > + nBest.initialise(problem); > > + ((Vector)particle.getVelocity()).randomize(twister); > > + particle.setNeighbourhoodBest(nBest); > > + > > + ConstrictionVelocityUpdate constrictionVelocityUpdate = new > > ConstrictionVelocityUpdate(); + > > constrictionVelocityUpdate.setVMax(new ConstantControlParameter(0.5)); + > > constrictionVelocityUpdate.updateVelocity(particle); > > + Vector velocity = particle.getVelocity(); > > + for (Numeric number : velocity) { > > + Assert.assertTrue(Double.compare(number.getReal(), 0.5) <= > > 0); + Assert.assertTrue(Double.compare(number.getReal(), -0.5) > > >= 0); + } > > + > > + } > > + > > +} > > diff --git a/xml/constrictionPSO.xml b/xml/constrictionPSO.xml > > new file mode 100644 > > index 0000000..77c3eb4 > > --- /dev/null > > +++ b/xml/constrictionPSO.xml > > @@ -0,0 +1,57 @@ > > +<?xml version="1.0"?> > > +<!DOCTYPE simulator [ > > +<!ATTLIST algorithm id ID #IMPLIED> > > +<!ATTLIST problem id ID #IMPLIED> > > +<!ATTLIST measurements id ID #IMPLIED> > > +]> > > +<simulator> > > + <algorithms> > > + <algorithm id="constrictionPSO" class="pso.PSO"> > > + <initialisationStrategy > > class="algorithm.initialisation.ClonedPopulationInitialisationStrategy"> > > + <entityType class="pso.particle.StandardParticle"> + > > <velocityUpdateStrategy > > class="pso.velocityupdatestrategies.ConstrictionVelocityUpdate"> + > > <kappa class="controlparameter.ConstantControlParameter" > > parameter="0.1" /> + <socialAcceleration > > class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + > > <cognitiveAcceleration > > class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + > > <!--vMax > > class="controlparameter.ConstantControlParameter" parameter="0.1" /--> + > > </velocityUpdateStrategy> > > + </entityType> > > + </initialisationStrategy> > > + <topology class="entity.topologies.GBestTopology"/> > > + <addStoppingCondition > > class="stoppingcondition.MaximumIterations" maximumIterations="1000"/> + > > </algorithm> > > + </algorithms> > > + > > + <problems> > > + <problem id="spherical" > > class="problem.FunctionMinimisationProblem"> + <function > > class="functions.continuous.Spherical"/> > > + </problem> > > + <problem id="rosenbrock" > > class="problem.FunctionMinimisationProblem"> + <function > > class="functions.continuous.Rosenbrock"/> > > + </problem> > > + <problem id="rastrigin" > > class="problem.FunctionMinimisationProblem"> + <function > > class="functions.continuous.unconstrained.Rastrigin"/> + > > </problem> + </problems> > > + > > + <measurements id="fitness" class="simulator.MeasurementSuite" > > resolution="10" samples="1"> + <addMeasurement > > class="measurement.single.Fitness"/> > > + </measurements> > > + <simulations> > > + <simulation> > > + <algorithm idref="constrictionPSO"/> > > + <problem idref="spherical"/> > > + <measurements idref="fitness" > > file="data/constrictionpso_spherical.txt"/> + </simulation> > > + <simulation> > > + <algorithm idref="constrictionPSO"/> > > + <problem idref="rosenbrock"/> > > + <measurements idref="fitness" > > file="data/constrictionpso_rosenbrock.txt"/> + </simulation> > > + <simulation> > > + <algorithm idref="constrictionPSO"/> > > + <problem idref="rastrigin"/> > > + <measurements idref="fitness" > > file="data/constrictionpso_rastrigin.txt"/> + </simulation> > > + </simulations> > > +</simulator> > > --------------------------------------------------------------------------- >--- _______________________________________________ > cilib-devel mailing list > cil...@li... > https://lists.sourceforge.net/lists/listinfo/cilib-devel |
From: Gary P. <gpa...@gm...> - 2009-07-03 06:31:49
|
Please ignore my question about the c_1 + c_2 < 4 issue. I read the statement incorrectly. Regards, Gary On Thursday 02 July 2009 14:46:24 Andrich wrote: > Added a velocity update strategy for a Constriction PSO as well as its unit > test. --- > .../ConstrictionVelocityUpdate.java | 243 > ++++++++++++++++++++ .../ConstrictionVelocityUpdateTest.java | > 144 ++++++++++++ xml/constrictionPSO.xml | 57 > +++++ > 3 files changed, 444 insertions(+), 0 deletions(-) > create mode 100644 > src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constricti >onVelocityUpdate.java create mode 100644 > src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constricti >onVelocityUpdateTest.java create mode 100644 xml/constrictionPSO.xml > > diff --git > a/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdate.java > b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdate.java new file mode 100644 > index 0000000..41d955b > --- /dev/null > +++ > b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdate.java @@ -0,0 +1,243 @@ > +/** > + * Copyright (C) 2003 - 2009 > + * Computational Intelligence Research Group (CIRG@UP) > + * Department of Computer Science > + * University of Pretoria > + * South Africa > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > USA + */ > +package net.sourceforge.cilib.pso.velocityupdatestrategies; > + > +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; > +import net.sourceforge.cilib.controlparameter.ControlParameter; > +import net.sourceforge.cilib.controlparameter.RandomizingControlParameter; > +import net.sourceforge.cilib.entity.Particle; > +import net.sourceforge.cilib.type.types.container.Vector; > + > +/** > + * A velocity update strategy that utilizes the constriction coefficient > as + * developed by Clerc. References: > + * <ul> > + * <li> > + * Inproceedings (Clerc1999) > + * Clerc, M. > + * The swarm and the queen: towards a deterministic and adaptive particle > swarm + * optimization > + * Evolutionary Computation, 1999. CEC 99. Proceedings of the 1999 > Congress on, + * 1999, 3, -1957 Vol. 3 > + * </li> > + * <li> > + * Article (Clerc2002) > + * Clerc, M. & Kennedy, J. > + * The particle swarm - explosion, stability, and convergence in a > + * multidimensional complex space Evolutionary Computation, > + * IEEE Transactions on, 2002, 6, 58-73 > + * </li> > + * </ul> > + * > + * Note, this strategy does not the inertia control parameter. > + * Certain constraints are imposed on the other control parameters in > order to + * calculate the constriction coefficient, namely: > + * $c1r1 + c2r2 \leq 4$ , and > + * $\kappa \in [0, 1]$ > + * > + * @author andrich > + */ > +public class ConstrictionVelocityUpdate implements VelocityUpdateStrategy > { + > + protected ControlParameter socialAcceleration; > + protected ControlParameter cognitiveAcceleration; > + protected ControlParameter vMax; > + protected ControlParameter kappa; > + > + /** > + * Default constructor. The values given to the control parameters > attempt to + * adhere to the constraints of calculating the > constriction constant, but do not + * necessarily represent good > values. > + */ > + public ConstrictionVelocityUpdate() { > + socialAcceleration = new RandomizingControlParameter(); > + cognitiveAcceleration = new RandomizingControlParameter(); > + vMax = new ConstantControlParameter(); > + kappa = new ConstantControlParameter(); > + > + socialAcceleration.setParameter(3.0); > + cognitiveAcceleration.setParameter(3.0); > + vMax.setParameter(Double.MAX_VALUE); > + kappa.setParameter(0.1); > + } > + > + /** > + * Copy constructor. > + * @param orig the ConstrictionVelocityUpdate to copy. > + */ > + public ConstrictionVelocityUpdate(ConstrictionVelocityUpdate orig) { > + this.socialAcceleration = new > RandomizingControlParameter((RandomizingControlParameter) > orig.socialAcceleration); + this.cognitiveAcceleration = new > RandomizingControlParameter((RandomizingControlParameter) > orig.cognitiveAcceleration); + this.vMax = new > ConstantControlParameter((ConstantControlParameter) orig.vMax); + > this.kappa = new ConstantControlParameter((ConstantControlParameter) > orig.kappa); + } > + > + /** > + * {@inheritDoc } > + */ > + @Override > + public VelocityUpdateStrategy getClone() { > + return new ConstrictionVelocityUpdate(this); > + } > + > + /** > + * {@inheritDoc } > + */ > + @Override > + public void updateVelocity(Particle particle) { > + assertAccelerationConstraints(); > + > + Vector velocity = (Vector) particle.getVelocity(); > + Vector position = (Vector) particle.getPosition(); > + Vector bestPosition = (Vector) particle.getBestPosition(); > + Vector nBestPosition = (Vector) > particle.getNeighbourhoodBest().getBestPosition(); + > + > + for (int i = 0; i < particle.getDimension(); ++i) { > + // calculate the constriction coefficient > + double c1 = cognitiveAcceleration.getParameter(); > + double c2 = socialAcceleration.getParameter(); > + // c1r1 + c2r2 has to be greater or equal to 4 > + while ((c1 + c2) < 4) { > + c1 = cognitiveAcceleration.getParameter(); > + c2 = socialAcceleration.getParameter(); > + } > + double phi = c1 + c2; > + double constrictionCoefficient = (2 * kappa.getParameter()) / > + Math.abs(2 - phi - Math.sqrt(phi * (phi - 4.0))); > + > + double value = velocity.getReal(i) + > + (bestPosition.getReal(i) - position.getReal(i)) * c1 + > + (nBestPosition.getReal(i) - position.getReal(i)) * c2; > + value = constrictionCoefficient * value; > + velocity.setReal(i, value); > + > + clamp(velocity, i); > + } > + } > + > + /** > + * Clamp to maximum velocity. > + * @param velocity The {@link Vector} to be clamped. > + * @param i The dimension index to be clamped > + */ > + protected void clamp(Vector velocity, int i) { > + // if vMax is not set (or set as max), it is unnecessary to clamp > + if (Double.compare(vMax.getParameter(), Double.MAX_VALUE) == 0) { > + return; > + } > + if (velocity.getReal(i) < -vMax.getParameter()) { > + velocity.setReal(i, -vMax.getParameter()); > + } else if (velocity.getReal(i) > vMax.getParameter()) { > + velocity.setReal(i, vMax.getParameter()); > + } > + } > + > + /** > + * {@inheritDoc } > + */ > + @Override > + public void updateControlParameters(Particle particle) { > + this.kappa.updateParameter(); > + this.cognitiveAcceleration.updateParameter(); > + this.socialAcceleration.updateParameter(); > + this.vMax.updateParameter(); > + } > + > + /** > + * Ensure that values of c1 and c2 make it possible to calculate the > + * constriction coefficient. > + */ > + private void assertAccelerationConstraints() { > + double c1 = ((RandomizingControlParameter) > cognitiveAcceleration).getControlParameter().getParameter(); + > double c2 = ((RandomizingControlParameter) > socialAcceleration).getControlParameter().getParameter(); + if (c1 + > c2 < 4) { > + throw new UnsupportedOperationException("Parameter constraint > violation: " + + "The sum of the Cognitive (" + c1 + ") > and Social (" + c2 + ") acceleration parameters " + + > "has to be greater than or equal to 4."); > + } > + } > + > + /** > + * Get the coginitive acceleration parameter. > + * @return the cognitive acceleration {@link ControlParameter control > parameter }. + */ > + public ControlParameter getCognitiveAcceleration() { > + return cognitiveAcceleration; > + } > + > + /** > + * Set the coginitive acceleration parameter. > + * @param cognitiveAcceleration the new cognitive acceleration {@link > ControlParameter control parameter }. + */ > + public void setCognitiveAcceleration(ControlParameter > cognitiveAcceleration) { + this.cognitiveAcceleration = > cognitiveAcceleration; > + } > + > + /** > + * Get the Kappa control parameter. > + * @return the kappa {@link ControlParameter control parameter }. > + */ > + public ControlParameter getKappa() { > + return kappa; > + } > + > + /** > + * Set the Kappa control parameter. > + * @param kappa the new kappa {@link ControlParameter control > parameter }. + */ > + public void setKappa(ControlParameter kappa) { > + this.kappa = kappa; > + } > + > + /** > + * Get the social acceleration parameter. > + * @return the social acceleration {@link ControlParameter control > parameter }. + */ > + public ControlParameter getSocialAcceleration() { > + return socialAcceleration; > + } > + > + /** > + * Set the social acceleration parameter. > + * @param socialAcceleration the new social accerelation {@link > ControlParameter control parameter }. + */ > + public void setSocialAcceleration(ControlParameter socialAcceleration) > { + this.socialAcceleration = socialAcceleration; > + } > + > + /** > + * Get the maximum velocity parameter. > + * @return the maximum velocity {@link ControlParameter control > parameter }. + */ > + public ControlParameter getVMax() { > + return vMax; > + } > + > + /** > + * Set the maximum velocity parameter. > + * @param vMax the new maximum velocity {@link ControlParameter > control parameter }. + */ > + public void setVMax(ControlParameter vMax) { > + this.vMax = vMax; > + } > +} > diff --git > a/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdateTest.java > b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdateTest.java new file mode 100644 > index 0000000..189cca9 > --- /dev/null > +++ > b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdateTest.java @@ -0,0 +1,144 @@ > +/** > + * Copyright (C) 2003 - 2009 > + * Computational Intelligence Research Group (CIRG@UP) > + * Department of Computer Science > + * University of Pretoria > + * South Africa > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > USA + */ > +package net.sourceforge.cilib.pso.velocityupdatestrategies; > + > +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; > +import net.sourceforge.cilib.controlparameter.RandomizingControlParameter; > +import net.sourceforge.cilib.functions.continuous.Spherical; > +import net.sourceforge.cilib.math.Maths; > +import net.sourceforge.cilib.math.random.generator.MersenneTwister; > +import net.sourceforge.cilib.problem.FunctionMinimisationProblem; > +import net.sourceforge.cilib.pso.particle.StandardParticle; > +import net.sourceforge.cilib.type.types.Numeric; > +import net.sourceforge.cilib.type.types.container.Vector; > +import org.junit.Assert; > +import org.junit.Test; > + > +/** > + * Unit test for the constriction velocity update. > + * @author andrich > + */ > +public class ConstrictionVelocityUpdateTest { > + > + /** > + * Test cloning and implicetly the copy constructor. > + */ > + @Test > + public void testClone() { > + ConstrictionVelocityUpdate original = new > ConstrictionVelocityUpdate(); + ConstrictionVelocityUpdate copy = > (ConstrictionVelocityUpdate) original.getClone(); + > + Assert.assertEquals(original.getKappa().getParameter(), > copy.getKappa().getParameter(), Maths.EPSILON); + > Assert.assertEquals(original.getVMax().getParameter(), > copy.getVMax().getParameter(), Maths.EPSILON); + > Assert.assertEquals(((RandomizingControlParameter)original.cognitiveAcceler >ation).getControlParameter().getParameter(), + > ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParamet >er().getParameter(), Maths.EPSILON); + > Assert.assertEquals(((RandomizingControlParameter)original.socialAccelerati >on).getControlParameter().getParameter(), + > ((RandomizingControlParameter)copy.socialAcceleration).getControlParameter( >).getParameter(), Maths.EPSILON); + > + copy.setKappa(new ConstantControlParameter(0.7)); > + copy.setVMax(new ConstantControlParameter(0.7)); > + RandomizingControlParameter randomizingControlParameter = new > RandomizingControlParameter(); + > randomizingControlParameter.setParameter(4.0); > + copy.setSocialAcceleration(new > RandomizingControlParameter(randomizingControlParameter.getClone())); + > copy.setCognitiveAcceleration(new > RandomizingControlParameter(randomizingControlParameter.getClone())); + > + > Assert.assertFalse(Double.compare(original.getKappa().getParameter(), > copy.getKappa().getParameter()) == 0); + > Assert.assertFalse(Double.compare(original.getVMax().getParameter(), > copy.getVMax().getParameter()) == 0); + > Assert.assertFalse(Double.compare(((RandomizingControlParameter)original.co >gnitiveAcceleration).getControlParameter().getParameter(), + > ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParamet >er().getParameter()) == 0); + > Assert.assertFalse(Double.compare(((RandomizingControlParameter)original.so >cialAcceleration).getControlParameter().getParameter(), + > ((RandomizingControlParameter)copy.socialAcceleration).getControlParameter( >).getParameter()) == 0); + } > + > + /** > + * Test the velocity update as well as the constraint assertion. > + */ > + @Test > + public void testUpdateAndConstraintAssertion() { > + MersenneTwister twister = new MersenneTwister(); > + FunctionMinimisationProblem problem = new > FunctionMinimisationProblem(); + problem.setFunction(new > Spherical()); > + > + StandardParticle nBest = new StandardParticle(); > + StandardParticle particle = new StandardParticle(); > + particle.initialise(problem); > + nBest.initialise(problem); > + ((Vector)particle.getVelocity()).randomize(twister); > + particle.setNeighbourhoodBest(nBest); > + > + ConstrictionVelocityUpdate constrictionVelocityUpdate = new > ConstrictionVelocityUpdate(); + > + boolean assertionExceptionOccured = false; > + try { > + constrictionVelocityUpdate.updateVelocity(particle); > + } > + catch(UnsupportedOperationException ex) { > + assertionExceptionOccured = true; > + } > + > + Assert.assertFalse(assertionExceptionOccured); > + > + RandomizingControlParameter randomizingControlParameter = new > RandomizingControlParameter(); + > randomizingControlParameter.setParameter(1.0); > + constrictionVelocityUpdate.setSocialAcceleration(new > RandomizingControlParameter(randomizingControlParameter.getClone())); + > constrictionVelocityUpdate.setCognitiveAcceleration(new > RandomizingControlParameter(randomizingControlParameter.getClone())); + > + assertionExceptionOccured = false; > + try { > + constrictionVelocityUpdate.updateVelocity(particle); > + } > + catch(UnsupportedOperationException ex) { > + assertionExceptionOccured = true; > + } > + > + Assert.assertTrue(assertionExceptionOccured); > + > + } > + > + /** > + * Test velocity clamping. > + */ > + @Test > + public void testClamping() { > + MersenneTwister twister = new MersenneTwister(); > + FunctionMinimisationProblem problem = new > FunctionMinimisationProblem(); + problem.setFunction(new > Spherical()); > + > + StandardParticle nBest = new StandardParticle(); > + StandardParticle particle = new StandardParticle(); > + particle.initialise(problem); > + nBest.initialise(problem); > + ((Vector)particle.getVelocity()).randomize(twister); > + particle.setNeighbourhoodBest(nBest); > + > + ConstrictionVelocityUpdate constrictionVelocityUpdate = new > ConstrictionVelocityUpdate(); + > constrictionVelocityUpdate.setVMax(new ConstantControlParameter(0.5)); + > constrictionVelocityUpdate.updateVelocity(particle); > + Vector velocity = particle.getVelocity(); > + for (Numeric number : velocity) { > + Assert.assertTrue(Double.compare(number.getReal(), 0.5) <= 0); > + Assert.assertTrue(Double.compare(number.getReal(), -0.5) >= > 0); + } > + > + } > + > +} > diff --git a/xml/constrictionPSO.xml b/xml/constrictionPSO.xml > new file mode 100644 > index 0000000..77c3eb4 > --- /dev/null > +++ b/xml/constrictionPSO.xml > @@ -0,0 +1,57 @@ > +<?xml version="1.0"?> > +<!DOCTYPE simulator [ > +<!ATTLIST algorithm id ID #IMPLIED> > +<!ATTLIST problem id ID #IMPLIED> > +<!ATTLIST measurements id ID #IMPLIED> > +]> > +<simulator> > + <algorithms> > + <algorithm id="constrictionPSO" class="pso.PSO"> > + <initialisationStrategy > class="algorithm.initialisation.ClonedPopulationInitialisationStrategy"> + > <entityType class="pso.particle.StandardParticle"> + > <velocityUpdateStrategy > class="pso.velocityupdatestrategies.ConstrictionVelocityUpdate"> + > <kappa class="controlparameter.ConstantControlParameter" > parameter="0.1" /> + <socialAcceleration > class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + > <cognitiveAcceleration > class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + > <!--vMax > class="controlparameter.ConstantControlParameter" parameter="0.1" /--> + > </velocityUpdateStrategy> > + </entityType> > + </initialisationStrategy> > + <topology class="entity.topologies.GBestTopology"/> > + <addStoppingCondition > class="stoppingcondition.MaximumIterations" maximumIterations="1000"/> + > </algorithm> > + </algorithms> > + > + <problems> > + <problem id="spherical" > class="problem.FunctionMinimisationProblem"> + <function > class="functions.continuous.Spherical"/> > + </problem> > + <problem id="rosenbrock" > class="problem.FunctionMinimisationProblem"> + <function > class="functions.continuous.Rosenbrock"/> > + </problem> > + <problem id="rastrigin" > class="problem.FunctionMinimisationProblem"> + <function > class="functions.continuous.unconstrained.Rastrigin"/> + </problem> > + </problems> > + > + <measurements id="fitness" class="simulator.MeasurementSuite" > resolution="10" samples="1"> + <addMeasurement > class="measurement.single.Fitness"/> > + </measurements> > + <simulations> > + <simulation> > + <algorithm idref="constrictionPSO"/> > + <problem idref="spherical"/> > + <measurements idref="fitness" > file="data/constrictionpso_spherical.txt"/> + </simulation> > + <simulation> > + <algorithm idref="constrictionPSO"/> > + <problem idref="rosenbrock"/> > + <measurements idref="fitness" > file="data/constrictionpso_rosenbrock.txt"/> + </simulation> > + <simulation> > + <algorithm idref="constrictionPSO"/> > + <problem idref="rastrigin"/> > + <measurements idref="fitness" > file="data/constrictionpso_rastrigin.txt"/> + </simulation> > + </simulations> > +</simulator> |
From: Gary P. <gpa...@gm...> - 2009-07-03 06:30:24
|
Patch looks good. This is something that we have needed to add for a while now. The test cases are a little complex though. Especially the testUpdateAndConstraintAssertion(). The tests should ideally be testing one thing per test. In the first part of the test, the following is executed: MersenneTwister twister = new MersenneTwister(); FunctionMinimisationProblem problem = new FunctionMinimisationProblem(); problem.setFunction(new Spherical()); StandardParticle nBest = new StandardParticle(); StandardParticle particle = new StandardParticle(); particle.initialise(problem); nBest.initialise(problem); particle.getVelocity().randomize(twister); particle.setNeighbourhoodBest(nBest); ConstrictionVelocityUpdate constrictionVelocityUpdate = new ConstrictionVelocityUpdate(); boolean assertionExceptionOccured = false; try { constrictionVelocityUpdate.updateVelocity(particle); } catch(UnsupportedOperationException ex) { assertionExceptionOccured = true; } I understand the need to have c_1 + c_2 < 4, but is there a reason why the are defaultly set to 3.0? Also, the execption thrown in the check within the ConstrictionVelocityUpdate states that the values should be "greater or equal to 4". I assume that was a typo? Or is the logic incorrect? The last part of that test tests that an exception is expected. We should create a new test method for that with a signature similar to: @Test(expected=UnsupportedOperationException.class) public void illegalVelocityUpdate() { .... Or something similar :P I also want to see if we can't mock some of the objects in the test to make the unit test more isolated. Regards, Gary On Thursday 02 July 2009 14:46:24 Andrich wrote: > Added a velocity update strategy for a Constriction PSO as well as its unit > test. --- > .../ConstrictionVelocityUpdate.java | 243 > ++++++++++++++++++++ .../ConstrictionVelocityUpdateTest.java | > 144 ++++++++++++ xml/constrictionPSO.xml | 57 > +++++ > 3 files changed, 444 insertions(+), 0 deletions(-) > create mode 100644 > src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constricti >onVelocityUpdate.java create mode 100644 > src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constricti >onVelocityUpdateTest.java create mode 100644 xml/constrictionPSO.xml > > diff --git > a/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdate.java > b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdate.java new file mode 100644 > index 0000000..41d955b > --- /dev/null > +++ > b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdate.java @@ -0,0 +1,243 @@ > +/** > + * Copyright (C) 2003 - 2009 > + * Computational Intelligence Research Group (CIRG@UP) > + * Department of Computer Science > + * University of Pretoria > + * South Africa > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > USA + */ > +package net.sourceforge.cilib.pso.velocityupdatestrategies; > + > +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; > +import net.sourceforge.cilib.controlparameter.ControlParameter; > +import net.sourceforge.cilib.controlparameter.RandomizingControlParameter; > +import net.sourceforge.cilib.entity.Particle; > +import net.sourceforge.cilib.type.types.container.Vector; > + > +/** > + * A velocity update strategy that utilizes the constriction coefficient > as + * developed by Clerc. References: > + * <ul> > + * <li> > + * Inproceedings (Clerc1999) > + * Clerc, M. > + * The swarm and the queen: towards a deterministic and adaptive particle > swarm + * optimization > + * Evolutionary Computation, 1999. CEC 99. Proceedings of the 1999 > Congress on, + * 1999, 3, -1957 Vol. 3 > + * </li> > + * <li> > + * Article (Clerc2002) > + * Clerc, M. & Kennedy, J. > + * The particle swarm - explosion, stability, and convergence in a > + * multidimensional complex space Evolutionary Computation, > + * IEEE Transactions on, 2002, 6, 58-73 > + * </li> > + * </ul> > + * > + * Note, this strategy does not the inertia control parameter. > + * Certain constraints are imposed on the other control parameters in > order to + * calculate the constriction coefficient, namely: > + * $c1r1 + c2r2 \leq 4$ , and > + * $\kappa \in [0, 1]$ > + * > + * @author andrich > + */ > +public class ConstrictionVelocityUpdate implements VelocityUpdateStrategy > { + > + protected ControlParameter socialAcceleration; > + protected ControlParameter cognitiveAcceleration; > + protected ControlParameter vMax; > + protected ControlParameter kappa; > + > + /** > + * Default constructor. The values given to the control parameters > attempt to + * adhere to the constraints of calculating the > constriction constant, but do not + * necessarily represent good > values. > + */ > + public ConstrictionVelocityUpdate() { > + socialAcceleration = new RandomizingControlParameter(); > + cognitiveAcceleration = new RandomizingControlParameter(); > + vMax = new ConstantControlParameter(); > + kappa = new ConstantControlParameter(); > + > + socialAcceleration.setParameter(3.0); > + cognitiveAcceleration.setParameter(3.0); > + vMax.setParameter(Double.MAX_VALUE); > + kappa.setParameter(0.1); > + } > + > + /** > + * Copy constructor. > + * @param orig the ConstrictionVelocityUpdate to copy. > + */ > + public ConstrictionVelocityUpdate(ConstrictionVelocityUpdate orig) { > + this.socialAcceleration = new > RandomizingControlParameter((RandomizingControlParameter) > orig.socialAcceleration); + this.cognitiveAcceleration = new > RandomizingControlParameter((RandomizingControlParameter) > orig.cognitiveAcceleration); + this.vMax = new > ConstantControlParameter((ConstantControlParameter) orig.vMax); + > this.kappa = new ConstantControlParameter((ConstantControlParameter) > orig.kappa); + } > + > + /** > + * {@inheritDoc } > + */ > + @Override > + public VelocityUpdateStrategy getClone() { > + return new ConstrictionVelocityUpdate(this); > + } > + > + /** > + * {@inheritDoc } > + */ > + @Override > + public void updateVelocity(Particle particle) { > + assertAccelerationConstraints(); > + > + Vector velocity = (Vector) particle.getVelocity(); > + Vector position = (Vector) particle.getPosition(); > + Vector bestPosition = (Vector) particle.getBestPosition(); > + Vector nBestPosition = (Vector) > particle.getNeighbourhoodBest().getBestPosition(); + > + > + for (int i = 0; i < particle.getDimension(); ++i) { > + // calculate the constriction coefficient > + double c1 = cognitiveAcceleration.getParameter(); > + double c2 = socialAcceleration.getParameter(); > + // c1r1 + c2r2 has to be greater or equal to 4 > + while ((c1 + c2) < 4) { > + c1 = cognitiveAcceleration.getParameter(); > + c2 = socialAcceleration.getParameter(); > + } > + double phi = c1 + c2; > + double constrictionCoefficient = (2 * kappa.getParameter()) / > + Math.abs(2 - phi - Math.sqrt(phi * (phi - 4.0))); > + > + double value = velocity.getReal(i) + > + (bestPosition.getReal(i) - position.getReal(i)) * c1 + > + (nBestPosition.getReal(i) - position.getReal(i)) * c2; > + value = constrictionCoefficient * value; > + velocity.setReal(i, value); > + > + clamp(velocity, i); > + } > + } > + > + /** > + * Clamp to maximum velocity. > + * @param velocity The {@link Vector} to be clamped. > + * @param i The dimension index to be clamped > + */ > + protected void clamp(Vector velocity, int i) { > + // if vMax is not set (or set as max), it is unnecessary to clamp > + if (Double.compare(vMax.getParameter(), Double.MAX_VALUE) == 0) { > + return; > + } > + if (velocity.getReal(i) < -vMax.getParameter()) { > + velocity.setReal(i, -vMax.getParameter()); > + } else if (velocity.getReal(i) > vMax.getParameter()) { > + velocity.setReal(i, vMax.getParameter()); > + } > + } > + > + /** > + * {@inheritDoc } > + */ > + @Override > + public void updateControlParameters(Particle particle) { > + this.kappa.updateParameter(); > + this.cognitiveAcceleration.updateParameter(); > + this.socialAcceleration.updateParameter(); > + this.vMax.updateParameter(); > + } > + > + /** > + * Ensure that values of c1 and c2 make it possible to calculate the > + * constriction coefficient. > + */ > + private void assertAccelerationConstraints() { > + double c1 = ((RandomizingControlParameter) > cognitiveAcceleration).getControlParameter().getParameter(); + > double c2 = ((RandomizingControlParameter) > socialAcceleration).getControlParameter().getParameter(); + if (c1 + > c2 < 4) { > + throw new UnsupportedOperationException("Parameter constraint > violation: " + + "The sum of the Cognitive (" + c1 + ") > and Social (" + c2 + ") acceleration parameters " + + > "has to be greater than or equal to 4."); > + } > + } > + > + /** > + * Get the coginitive acceleration parameter. > + * @return the cognitive acceleration {@link ControlParameter control > parameter }. + */ > + public ControlParameter getCognitiveAcceleration() { > + return cognitiveAcceleration; > + } > + > + /** > + * Set the coginitive acceleration parameter. > + * @param cognitiveAcceleration the new cognitive acceleration {@link > ControlParameter control parameter }. + */ > + public void setCognitiveAcceleration(ControlParameter > cognitiveAcceleration) { + this.cognitiveAcceleration = > cognitiveAcceleration; > + } > + > + /** > + * Get the Kappa control parameter. > + * @return the kappa {@link ControlParameter control parameter }. > + */ > + public ControlParameter getKappa() { > + return kappa; > + } > + > + /** > + * Set the Kappa control parameter. > + * @param kappa the new kappa {@link ControlParameter control > parameter }. + */ > + public void setKappa(ControlParameter kappa) { > + this.kappa = kappa; > + } > + > + /** > + * Get the social acceleration parameter. > + * @return the social acceleration {@link ControlParameter control > parameter }. + */ > + public ControlParameter getSocialAcceleration() { > + return socialAcceleration; > + } > + > + /** > + * Set the social acceleration parameter. > + * @param socialAcceleration the new social accerelation {@link > ControlParameter control parameter }. + */ > + public void setSocialAcceleration(ControlParameter socialAcceleration) > { + this.socialAcceleration = socialAcceleration; > + } > + > + /** > + * Get the maximum velocity parameter. > + * @return the maximum velocity {@link ControlParameter control > parameter }. + */ > + public ControlParameter getVMax() { > + return vMax; > + } > + > + /** > + * Set the maximum velocity parameter. > + * @param vMax the new maximum velocity {@link ControlParameter > control parameter }. + */ > + public void setVMax(ControlParameter vMax) { > + this.vMax = vMax; > + } > +} > diff --git > a/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdateTest.java > b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdateTest.java new file mode 100644 > index 0000000..189cca9 > --- /dev/null > +++ > b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/Constric >tionVelocityUpdateTest.java @@ -0,0 +1,144 @@ > +/** > + * Copyright (C) 2003 - 2009 > + * Computational Intelligence Research Group (CIRG@UP) > + * Department of Computer Science > + * University of Pretoria > + * South Africa > + * > + * This program is free software; you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation; either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program; if not, write to the Free Software > + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 > USA + */ > +package net.sourceforge.cilib.pso.velocityupdatestrategies; > + > +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; > +import net.sourceforge.cilib.controlparameter.RandomizingControlParameter; > +import net.sourceforge.cilib.functions.continuous.Spherical; > +import net.sourceforge.cilib.math.Maths; > +import net.sourceforge.cilib.math.random.generator.MersenneTwister; > +import net.sourceforge.cilib.problem.FunctionMinimisationProblem; > +import net.sourceforge.cilib.pso.particle.StandardParticle; > +import net.sourceforge.cilib.type.types.Numeric; > +import net.sourceforge.cilib.type.types.container.Vector; > +import org.junit.Assert; > +import org.junit.Test; > + > +/** > + * Unit test for the constriction velocity update. > + * @author andrich > + */ > +public class ConstrictionVelocityUpdateTest { > + > + /** > + * Test cloning and implicetly the copy constructor. > + */ > + @Test > + public void testClone() { > + ConstrictionVelocityUpdate original = new > ConstrictionVelocityUpdate(); + ConstrictionVelocityUpdate copy = > (ConstrictionVelocityUpdate) original.getClone(); + > + Assert.assertEquals(original.getKappa().getParameter(), > copy.getKappa().getParameter(), Maths.EPSILON); + > Assert.assertEquals(original.getVMax().getParameter(), > copy.getVMax().getParameter(), Maths.EPSILON); + > Assert.assertEquals(((RandomizingControlParameter)original.cognitiveAcceler >ation).getControlParameter().getParameter(), + > ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParamet >er().getParameter(), Maths.EPSILON); + > Assert.assertEquals(((RandomizingControlParameter)original.socialAccelerati >on).getControlParameter().getParameter(), + > ((RandomizingControlParameter)copy.socialAcceleration).getControlParameter( >).getParameter(), Maths.EPSILON); + > + copy.setKappa(new ConstantControlParameter(0.7)); > + copy.setVMax(new ConstantControlParameter(0.7)); > + RandomizingControlParameter randomizingControlParameter = new > RandomizingControlParameter(); + > randomizingControlParameter.setParameter(4.0); > + copy.setSocialAcceleration(new > RandomizingControlParameter(randomizingControlParameter.getClone())); + > copy.setCognitiveAcceleration(new > RandomizingControlParameter(randomizingControlParameter.getClone())); + > + > Assert.assertFalse(Double.compare(original.getKappa().getParameter(), > copy.getKappa().getParameter()) == 0); + > Assert.assertFalse(Double.compare(original.getVMax().getParameter(), > copy.getVMax().getParameter()) == 0); + > Assert.assertFalse(Double.compare(((RandomizingControlParameter)original.co >gnitiveAcceleration).getControlParameter().getParameter(), + > ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParamet >er().getParameter()) == 0); + > Assert.assertFalse(Double.compare(((RandomizingControlParameter)original.so >cialAcceleration).getControlParameter().getParameter(), + > ((RandomizingControlParameter)copy.socialAcceleration).getControlParameter( >).getParameter()) == 0); + } > + > + /** > + * Test the velocity update as well as the constraint assertion. > + */ > + @Test > + public void testUpdateAndConstraintAssertion() { > + MersenneTwister twister = new MersenneTwister(); > + FunctionMinimisationProblem problem = new > FunctionMinimisationProblem(); + problem.setFunction(new > Spherical()); > + > + StandardParticle nBest = new StandardParticle(); > + StandardParticle particle = new StandardParticle(); > + particle.initialise(problem); > + nBest.initialise(problem); > + ((Vector)particle.getVelocity()).randomize(twister); > + particle.setNeighbourhoodBest(nBest); > + > + ConstrictionVelocityUpdate constrictionVelocityUpdate = new > ConstrictionVelocityUpdate(); + > + boolean assertionExceptionOccured = false; > + try { > + constrictionVelocityUpdate.updateVelocity(particle); > + } > + catch(UnsupportedOperationException ex) { > + assertionExceptionOccured = true; > + } > + > + Assert.assertFalse(assertionExceptionOccured); > + > + RandomizingControlParameter randomizingControlParameter = new > RandomizingControlParameter(); + > randomizingControlParameter.setParameter(1.0); > + constrictionVelocityUpdate.setSocialAcceleration(new > RandomizingControlParameter(randomizingControlParameter.getClone())); + > constrictionVelocityUpdate.setCognitiveAcceleration(new > RandomizingControlParameter(randomizingControlParameter.getClone())); + > + assertionExceptionOccured = false; > + try { > + constrictionVelocityUpdate.updateVelocity(particle); > + } > + catch(UnsupportedOperationException ex) { > + assertionExceptionOccured = true; > + } > + > + Assert.assertTrue(assertionExceptionOccured); > + > + } > + > + /** > + * Test velocity clamping. > + */ > + @Test > + public void testClamping() { > + MersenneTwister twister = new MersenneTwister(); > + FunctionMinimisationProblem problem = new > FunctionMinimisationProblem(); + problem.setFunction(new > Spherical()); > + > + StandardParticle nBest = new StandardParticle(); > + StandardParticle particle = new StandardParticle(); > + particle.initialise(problem); > + nBest.initialise(problem); > + ((Vector)particle.getVelocity()).randomize(twister); > + particle.setNeighbourhoodBest(nBest); > + > + ConstrictionVelocityUpdate constrictionVelocityUpdate = new > ConstrictionVelocityUpdate(); + > constrictionVelocityUpdate.setVMax(new ConstantControlParameter(0.5)); + > constrictionVelocityUpdate.updateVelocity(particle); > + Vector velocity = particle.getVelocity(); > + for (Numeric number : velocity) { > + Assert.assertTrue(Double.compare(number.getReal(), 0.5) <= 0); > + Assert.assertTrue(Double.compare(number.getReal(), -0.5) >= > 0); + } > + > + } > + > +} > diff --git a/xml/constrictionPSO.xml b/xml/constrictionPSO.xml > new file mode 100644 > index 0000000..77c3eb4 > --- /dev/null > +++ b/xml/constrictionPSO.xml > @@ -0,0 +1,57 @@ > +<?xml version="1.0"?> > +<!DOCTYPE simulator [ > +<!ATTLIST algorithm id ID #IMPLIED> > +<!ATTLIST problem id ID #IMPLIED> > +<!ATTLIST measurements id ID #IMPLIED> > +]> > +<simulator> > + <algorithms> > + <algorithm id="constrictionPSO" class="pso.PSO"> > + <initialisationStrategy > class="algorithm.initialisation.ClonedPopulationInitialisationStrategy"> + > <entityType class="pso.particle.StandardParticle"> + > <velocityUpdateStrategy > class="pso.velocityupdatestrategies.ConstrictionVelocityUpdate"> + > <kappa class="controlparameter.ConstantControlParameter" > parameter="0.1" /> + <socialAcceleration > class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + > <cognitiveAcceleration > class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + > <!--vMax > class="controlparameter.ConstantControlParameter" parameter="0.1" /--> + > </velocityUpdateStrategy> > + </entityType> > + </initialisationStrategy> > + <topology class="entity.topologies.GBestTopology"/> > + <addStoppingCondition > class="stoppingcondition.MaximumIterations" maximumIterations="1000"/> + > </algorithm> > + </algorithms> > + > + <problems> > + <problem id="spherical" > class="problem.FunctionMinimisationProblem"> + <function > class="functions.continuous.Spherical"/> > + </problem> > + <problem id="rosenbrock" > class="problem.FunctionMinimisationProblem"> + <function > class="functions.continuous.Rosenbrock"/> > + </problem> > + <problem id="rastrigin" > class="problem.FunctionMinimisationProblem"> + <function > class="functions.continuous.unconstrained.Rastrigin"/> + </problem> > + </problems> > + > + <measurements id="fitness" class="simulator.MeasurementSuite" > resolution="10" samples="1"> + <addMeasurement > class="measurement.single.Fitness"/> > + </measurements> > + <simulations> > + <simulation> > + <algorithm idref="constrictionPSO"/> > + <problem idref="spherical"/> > + <measurements idref="fitness" > file="data/constrictionpso_spherical.txt"/> + </simulation> > + <simulation> > + <algorithm idref="constrictionPSO"/> > + <problem idref="rosenbrock"/> > + <measurements idref="fitness" > file="data/constrictionpso_rosenbrock.txt"/> + </simulation> > + <simulation> > + <algorithm idref="constrictionPSO"/> > + <problem idref="rastrigin"/> > + <measurements idref="fitness" > file="data/constrictionpso_rastrigin.txt"/> + </simulation> > + </simulations> > +</simulator> |
From: Andrich <avw...@gm...> - 2009-07-02 13:11:50
|
Added a velocity update strategy for a Constriction PSO as well as its unit test. --- .../ConstrictionVelocityUpdate.java | 243 ++++++++++++++++++++ .../ConstrictionVelocityUpdateTest.java | 144 ++++++++++++ xml/constrictionPSO.xml | 57 +++++ 3 files changed, 444 insertions(+), 0 deletions(-) create mode 100644 src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdate.java create mode 100644 src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdateTest.java create mode 100644 xml/constrictionPSO.xml diff --git a/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdate.java b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdate.java new file mode 100644 index 0000000..41d955b --- /dev/null +++ b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdate.java @@ -0,0 +1,243 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.pso.velocityupdatestrategies; + +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; +import net.sourceforge.cilib.controlparameter.ControlParameter; +import net.sourceforge.cilib.controlparameter.RandomizingControlParameter; +import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.type.types.container.Vector; + +/** + * A velocity update strategy that utilizes the constriction coefficient as + * developed by Clerc. References: + * <ul> + * <li> + * Inproceedings (Clerc1999) + * Clerc, M. + * The swarm and the queen: towards a deterministic and adaptive particle swarm + * optimization + * Evolutionary Computation, 1999. CEC 99. Proceedings of the 1999 Congress on, + * 1999, 3, -1957 Vol. 3 + * </li> + * <li> + * Article (Clerc2002) + * Clerc, M. & Kennedy, J. + * The particle swarm - explosion, stability, and convergence in a + * multidimensional complex space Evolutionary Computation, + * IEEE Transactions on, 2002, 6, 58-73 + * </li> + * </ul> + * + * Note, this strategy does not the inertia control parameter. + * Certain constraints are imposed on the other control parameters in order to + * calculate the constriction coefficient, namely: + * $c1r1 + c2r2 \leq 4$ , and + * $\kappa \in [0, 1]$ + * + * @author andrich + */ +public class ConstrictionVelocityUpdate implements VelocityUpdateStrategy { + + protected ControlParameter socialAcceleration; + protected ControlParameter cognitiveAcceleration; + protected ControlParameter vMax; + protected ControlParameter kappa; + + /** + * Default constructor. The values given to the control parameters attempt to + * adhere to the constraints of calculating the constriction constant, but do not + * necessarily represent good values. + */ + public ConstrictionVelocityUpdate() { + socialAcceleration = new RandomizingControlParameter(); + cognitiveAcceleration = new RandomizingControlParameter(); + vMax = new ConstantControlParameter(); + kappa = new ConstantControlParameter(); + + socialAcceleration.setParameter(3.0); + cognitiveAcceleration.setParameter(3.0); + vMax.setParameter(Double.MAX_VALUE); + kappa.setParameter(0.1); + } + + /** + * Copy constructor. + * @param orig the ConstrictionVelocityUpdate to copy. + */ + public ConstrictionVelocityUpdate(ConstrictionVelocityUpdate orig) { + this.socialAcceleration = new RandomizingControlParameter((RandomizingControlParameter) orig.socialAcceleration); + this.cognitiveAcceleration = new RandomizingControlParameter((RandomizingControlParameter) orig.cognitiveAcceleration); + this.vMax = new ConstantControlParameter((ConstantControlParameter) orig.vMax); + this.kappa = new ConstantControlParameter((ConstantControlParameter) orig.kappa); + } + + /** + * {@inheritDoc } + */ + @Override + public VelocityUpdateStrategy getClone() { + return new ConstrictionVelocityUpdate(this); + } + + /** + * {@inheritDoc } + */ + @Override + public void updateVelocity(Particle particle) { + assertAccelerationConstraints(); + + Vector velocity = (Vector) particle.getVelocity(); + Vector position = (Vector) particle.getPosition(); + Vector bestPosition = (Vector) particle.getBestPosition(); + Vector nBestPosition = (Vector) particle.getNeighbourhoodBest().getBestPosition(); + + + for (int i = 0; i < particle.getDimension(); ++i) { + // calculate the constriction coefficient + double c1 = cognitiveAcceleration.getParameter(); + double c2 = socialAcceleration.getParameter(); + // c1r1 + c2r2 has to be greater or equal to 4 + while ((c1 + c2) < 4) { + c1 = cognitiveAcceleration.getParameter(); + c2 = socialAcceleration.getParameter(); + } + double phi = c1 + c2; + double constrictionCoefficient = (2 * kappa.getParameter()) / + Math.abs(2 - phi - Math.sqrt(phi * (phi - 4.0))); + + double value = velocity.getReal(i) + + (bestPosition.getReal(i) - position.getReal(i)) * c1 + + (nBestPosition.getReal(i) - position.getReal(i)) * c2; + value = constrictionCoefficient * value; + velocity.setReal(i, value); + + clamp(velocity, i); + } + } + + /** + * Clamp to maximum velocity. + * @param velocity The {@link Vector} to be clamped. + * @param i The dimension index to be clamped + */ + protected void clamp(Vector velocity, int i) { + // if vMax is not set (or set as max), it is unnecessary to clamp + if (Double.compare(vMax.getParameter(), Double.MAX_VALUE) == 0) { + return; + } + if (velocity.getReal(i) < -vMax.getParameter()) { + velocity.setReal(i, -vMax.getParameter()); + } else if (velocity.getReal(i) > vMax.getParameter()) { + velocity.setReal(i, vMax.getParameter()); + } + } + + /** + * {@inheritDoc } + */ + @Override + public void updateControlParameters(Particle particle) { + this.kappa.updateParameter(); + this.cognitiveAcceleration.updateParameter(); + this.socialAcceleration.updateParameter(); + this.vMax.updateParameter(); + } + + /** + * Ensure that values of c1 and c2 make it possible to calculate the + * constriction coefficient. + */ + private void assertAccelerationConstraints() { + double c1 = ((RandomizingControlParameter) cognitiveAcceleration).getControlParameter().getParameter(); + double c2 = ((RandomizingControlParameter) socialAcceleration).getControlParameter().getParameter(); + if (c1 + c2 < 4) { + throw new UnsupportedOperationException("Parameter constraint violation: " + + "The sum of the Cognitive (" + c1 + ") and Social (" + c2 + ") acceleration parameters " + + "has to be greater than or equal to 4."); + } + } + + /** + * Get the coginitive acceleration parameter. + * @return the cognitive acceleration {@link ControlParameter control parameter }. + */ + public ControlParameter getCognitiveAcceleration() { + return cognitiveAcceleration; + } + + /** + * Set the coginitive acceleration parameter. + * @param cognitiveAcceleration the new cognitive acceleration {@link ControlParameter control parameter }. + */ + public void setCognitiveAcceleration(ControlParameter cognitiveAcceleration) { + this.cognitiveAcceleration = cognitiveAcceleration; + } + + /** + * Get the Kappa control parameter. + * @return the kappa {@link ControlParameter control parameter }. + */ + public ControlParameter getKappa() { + return kappa; + } + + /** + * Set the Kappa control parameter. + * @param kappa the new kappa {@link ControlParameter control parameter }. + */ + public void setKappa(ControlParameter kappa) { + this.kappa = kappa; + } + + /** + * Get the social acceleration parameter. + * @return the social acceleration {@link ControlParameter control parameter }. + */ + public ControlParameter getSocialAcceleration() { + return socialAcceleration; + } + + /** + * Set the social acceleration parameter. + * @param socialAcceleration the new social accerelation {@link ControlParameter control parameter }. + */ + public void setSocialAcceleration(ControlParameter socialAcceleration) { + this.socialAcceleration = socialAcceleration; + } + + /** + * Get the maximum velocity parameter. + * @return the maximum velocity {@link ControlParameter control parameter }. + */ + public ControlParameter getVMax() { + return vMax; + } + + /** + * Set the maximum velocity parameter. + * @param vMax the new maximum velocity {@link ControlParameter control parameter }. + */ + public void setVMax(ControlParameter vMax) { + this.vMax = vMax; + } +} diff --git a/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdateTest.java b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdateTest.java new file mode 100644 index 0000000..189cca9 --- /dev/null +++ b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdateTest.java @@ -0,0 +1,144 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.pso.velocityupdatestrategies; + +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; +import net.sourceforge.cilib.controlparameter.RandomizingControlParameter; +import net.sourceforge.cilib.functions.continuous.Spherical; +import net.sourceforge.cilib.math.Maths; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.problem.FunctionMinimisationProblem; +import net.sourceforge.cilib.pso.particle.StandardParticle; +import net.sourceforge.cilib.type.types.Numeric; +import net.sourceforge.cilib.type.types.container.Vector; +import org.junit.Assert; +import org.junit.Test; + +/** + * Unit test for the constriction velocity update. + * @author andrich + */ +public class ConstrictionVelocityUpdateTest { + + /** + * Test cloning and implicetly the copy constructor. + */ + @Test + public void testClone() { + ConstrictionVelocityUpdate original = new ConstrictionVelocityUpdate(); + ConstrictionVelocityUpdate copy = (ConstrictionVelocityUpdate) original.getClone(); + + Assert.assertEquals(original.getKappa().getParameter(), copy.getKappa().getParameter(), Maths.EPSILON); + Assert.assertEquals(original.getVMax().getParameter(), copy.getVMax().getParameter(), Maths.EPSILON); + Assert.assertEquals(((RandomizingControlParameter)original.cognitiveAcceleration).getControlParameter().getParameter(), + ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParameter().getParameter(), Maths.EPSILON); + Assert.assertEquals(((RandomizingControlParameter)original.socialAcceleration).getControlParameter().getParameter(), + ((RandomizingControlParameter)copy.socialAcceleration).getControlParameter().getParameter(), Maths.EPSILON); + + copy.setKappa(new ConstantControlParameter(0.7)); + copy.setVMax(new ConstantControlParameter(0.7)); + RandomizingControlParameter randomizingControlParameter = new RandomizingControlParameter(); + randomizingControlParameter.setParameter(4.0); + copy.setSocialAcceleration(new RandomizingControlParameter(randomizingControlParameter.getClone())); + copy.setCognitiveAcceleration(new RandomizingControlParameter(randomizingControlParameter.getClone())); + + Assert.assertFalse(Double.compare(original.getKappa().getParameter(), copy.getKappa().getParameter()) == 0); + Assert.assertFalse(Double.compare(original.getVMax().getParameter(), copy.getVMax().getParameter()) == 0); + Assert.assertFalse(Double.compare(((RandomizingControlParameter)original.cognitiveAcceleration).getControlParameter().getParameter(), + ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParameter().getParameter()) == 0); + Assert.assertFalse(Double.compare(((RandomizingControlParameter)original.socialAcceleration).getControlParameter().getParameter(), + ((RandomizingControlParameter)copy.socialAcceleration).getControlParameter().getParameter()) == 0); + } + + /** + * Test the velocity update as well as the constraint assertion. + */ + @Test + public void testUpdateAndConstraintAssertion() { + MersenneTwister twister = new MersenneTwister(); + FunctionMinimisationProblem problem = new FunctionMinimisationProblem(); + problem.setFunction(new Spherical()); + + StandardParticle nBest = new StandardParticle(); + StandardParticle particle = new StandardParticle(); + particle.initialise(problem); + nBest.initialise(problem); + ((Vector)particle.getVelocity()).randomize(twister); + particle.setNeighbourhoodBest(nBest); + + ConstrictionVelocityUpdate constrictionVelocityUpdate = new ConstrictionVelocityUpdate(); + + boolean assertionExceptionOccured = false; + try { + constrictionVelocityUpdate.updateVelocity(particle); + } + catch(UnsupportedOperationException ex) { + assertionExceptionOccured = true; + } + + Assert.assertFalse(assertionExceptionOccured); + + RandomizingControlParameter randomizingControlParameter = new RandomizingControlParameter(); + randomizingControlParameter.setParameter(1.0); + constrictionVelocityUpdate.setSocialAcceleration(new RandomizingControlParameter(randomizingControlParameter.getClone())); + constrictionVelocityUpdate.setCognitiveAcceleration(new RandomizingControlParameter(randomizingControlParameter.getClone())); + + assertionExceptionOccured = false; + try { + constrictionVelocityUpdate.updateVelocity(particle); + } + catch(UnsupportedOperationException ex) { + assertionExceptionOccured = true; + } + + Assert.assertTrue(assertionExceptionOccured); + + } + + /** + * Test velocity clamping. + */ + @Test + public void testClamping() { + MersenneTwister twister = new MersenneTwister(); + FunctionMinimisationProblem problem = new FunctionMinimisationProblem(); + problem.setFunction(new Spherical()); + + StandardParticle nBest = new StandardParticle(); + StandardParticle particle = new StandardParticle(); + particle.initialise(problem); + nBest.initialise(problem); + ((Vector)particle.getVelocity()).randomize(twister); + particle.setNeighbourhoodBest(nBest); + + ConstrictionVelocityUpdate constrictionVelocityUpdate = new ConstrictionVelocityUpdate(); + constrictionVelocityUpdate.setVMax(new ConstantControlParameter(0.5)); + constrictionVelocityUpdate.updateVelocity(particle); + Vector velocity = particle.getVelocity(); + for (Numeric number : velocity) { + Assert.assertTrue(Double.compare(number.getReal(), 0.5) <= 0); + Assert.assertTrue(Double.compare(number.getReal(), -0.5) >= 0); + } + + } + +} diff --git a/xml/constrictionPSO.xml b/xml/constrictionPSO.xml new file mode 100644 index 0000000..77c3eb4 --- /dev/null +++ b/xml/constrictionPSO.xml @@ -0,0 +1,57 @@ +<?xml version="1.0"?> +<!DOCTYPE simulator [ +<!ATTLIST algorithm id ID #IMPLIED> +<!ATTLIST problem id ID #IMPLIED> +<!ATTLIST measurements id ID #IMPLIED> +]> +<simulator> + <algorithms> + <algorithm id="constrictionPSO" class="pso.PSO"> + <initialisationStrategy class="algorithm.initialisation.ClonedPopulationInitialisationStrategy"> + <entityType class="pso.particle.StandardParticle"> + <velocityUpdateStrategy class="pso.velocityupdatestrategies.ConstrictionVelocityUpdate"> + <kappa class="controlparameter.ConstantControlParameter" parameter="0.1" /> + <socialAcceleration class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + <cognitiveAcceleration class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + <!--vMax class="controlparameter.ConstantControlParameter" parameter="0.1" /--> + </velocityUpdateStrategy> + </entityType> + </initialisationStrategy> + <topology class="entity.topologies.GBestTopology"/> + <addStoppingCondition class="stoppingcondition.MaximumIterations" maximumIterations="1000"/> + </algorithm> + </algorithms> + + <problems> + <problem id="spherical" class="problem.FunctionMinimisationProblem"> + <function class="functions.continuous.Spherical"/> + </problem> + <problem id="rosenbrock" class="problem.FunctionMinimisationProblem"> + <function class="functions.continuous.Rosenbrock"/> + </problem> + <problem id="rastrigin" class="problem.FunctionMinimisationProblem"> + <function class="functions.continuous.unconstrained.Rastrigin"/> + </problem> + </problems> + + <measurements id="fitness" class="simulator.MeasurementSuite" resolution="10" samples="1"> + <addMeasurement class="measurement.single.Fitness"/> + </measurements> + <simulations> + <simulation> + <algorithm idref="constrictionPSO"/> + <problem idref="spherical"/> + <measurements idref="fitness" file="data/constrictionpso_spherical.txt"/> + </simulation> + <simulation> + <algorithm idref="constrictionPSO"/> + <problem idref="rosenbrock"/> + <measurements idref="fitness" file="data/constrictionpso_rosenbrock.txt"/> + </simulation> + <simulation> + <algorithm idref="constrictionPSO"/> + <problem idref="rastrigin"/> + <measurements idref="fitness" file="data/constrictionpso_rastrigin.txt"/> + </simulation> + </simulations> +</simulator> -- 1.6.0.4 |
From: Andrich <avw...@gm...> - 2009-07-02 13:11:10
|
Added a velocity update strategy for a Constriction PSO as well as its unit test. --- .../ConstrictionVelocityUpdate.java | 243 ++++++++++++++++++++ .../ConstrictionVelocityUpdateTest.java | 144 ++++++++++++ xml/constrictionPSO.xml | 57 +++++ 3 files changed, 444 insertions(+), 0 deletions(-) create mode 100644 src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdate.java create mode 100644 src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdateTest.java create mode 100644 xml/constrictionPSO.xml diff --git a/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdate.java b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdate.java new file mode 100644 index 0000000..41d955b --- /dev/null +++ b/src/main/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdate.java @@ -0,0 +1,243 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.pso.velocityupdatestrategies; + +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; +import net.sourceforge.cilib.controlparameter.ControlParameter; +import net.sourceforge.cilib.controlparameter.RandomizingControlParameter; +import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.type.types.container.Vector; + +/** + * A velocity update strategy that utilizes the constriction coefficient as + * developed by Clerc. References: + * <ul> + * <li> + * Inproceedings (Clerc1999) + * Clerc, M. + * The swarm and the queen: towards a deterministic and adaptive particle swarm + * optimization + * Evolutionary Computation, 1999. CEC 99. Proceedings of the 1999 Congress on, + * 1999, 3, -1957 Vol. 3 + * </li> + * <li> + * Article (Clerc2002) + * Clerc, M. & Kennedy, J. + * The particle swarm - explosion, stability, and convergence in a + * multidimensional complex space Evolutionary Computation, + * IEEE Transactions on, 2002, 6, 58-73 + * </li> + * </ul> + * + * Note, this strategy does not the inertia control parameter. + * Certain constraints are imposed on the other control parameters in order to + * calculate the constriction coefficient, namely: + * $c1r1 + c2r2 \leq 4$ , and + * $\kappa \in [0, 1]$ + * + * @author andrich + */ +public class ConstrictionVelocityUpdate implements VelocityUpdateStrategy { + + protected ControlParameter socialAcceleration; + protected ControlParameter cognitiveAcceleration; + protected ControlParameter vMax; + protected ControlParameter kappa; + + /** + * Default constructor. The values given to the control parameters attempt to + * adhere to the constraints of calculating the constriction constant, but do not + * necessarily represent good values. + */ + public ConstrictionVelocityUpdate() { + socialAcceleration = new RandomizingControlParameter(); + cognitiveAcceleration = new RandomizingControlParameter(); + vMax = new ConstantControlParameter(); + kappa = new ConstantControlParameter(); + + socialAcceleration.setParameter(3.0); + cognitiveAcceleration.setParameter(3.0); + vMax.setParameter(Double.MAX_VALUE); + kappa.setParameter(0.1); + } + + /** + * Copy constructor. + * @param orig the ConstrictionVelocityUpdate to copy. + */ + public ConstrictionVelocityUpdate(ConstrictionVelocityUpdate orig) { + this.socialAcceleration = new RandomizingControlParameter((RandomizingControlParameter) orig.socialAcceleration); + this.cognitiveAcceleration = new RandomizingControlParameter((RandomizingControlParameter) orig.cognitiveAcceleration); + this.vMax = new ConstantControlParameter((ConstantControlParameter) orig.vMax); + this.kappa = new ConstantControlParameter((ConstantControlParameter) orig.kappa); + } + + /** + * {@inheritDoc } + */ + @Override + public VelocityUpdateStrategy getClone() { + return new ConstrictionVelocityUpdate(this); + } + + /** + * {@inheritDoc } + */ + @Override + public void updateVelocity(Particle particle) { + assertAccelerationConstraints(); + + Vector velocity = (Vector) particle.getVelocity(); + Vector position = (Vector) particle.getPosition(); + Vector bestPosition = (Vector) particle.getBestPosition(); + Vector nBestPosition = (Vector) particle.getNeighbourhoodBest().getBestPosition(); + + + for (int i = 0; i < particle.getDimension(); ++i) { + // calculate the constriction coefficient + double c1 = cognitiveAcceleration.getParameter(); + double c2 = socialAcceleration.getParameter(); + // c1r1 + c2r2 has to be greater or equal to 4 + while ((c1 + c2) < 4) { + c1 = cognitiveAcceleration.getParameter(); + c2 = socialAcceleration.getParameter(); + } + double phi = c1 + c2; + double constrictionCoefficient = (2 * kappa.getParameter()) / + Math.abs(2 - phi - Math.sqrt(phi * (phi - 4.0))); + + double value = velocity.getReal(i) + + (bestPosition.getReal(i) - position.getReal(i)) * c1 + + (nBestPosition.getReal(i) - position.getReal(i)) * c2; + value = constrictionCoefficient * value; + velocity.setReal(i, value); + + clamp(velocity, i); + } + } + + /** + * Clamp to maximum velocity. + * @param velocity The {@link Vector} to be clamped. + * @param i The dimension index to be clamped + */ + protected void clamp(Vector velocity, int i) { + // if vMax is not set (or set as max), it is unnecessary to clamp + if (Double.compare(vMax.getParameter(), Double.MAX_VALUE) == 0) { + return; + } + if (velocity.getReal(i) < -vMax.getParameter()) { + velocity.setReal(i, -vMax.getParameter()); + } else if (velocity.getReal(i) > vMax.getParameter()) { + velocity.setReal(i, vMax.getParameter()); + } + } + + /** + * {@inheritDoc } + */ + @Override + public void updateControlParameters(Particle particle) { + this.kappa.updateParameter(); + this.cognitiveAcceleration.updateParameter(); + this.socialAcceleration.updateParameter(); + this.vMax.updateParameter(); + } + + /** + * Ensure that values of c1 and c2 make it possible to calculate the + * constriction coefficient. + */ + private void assertAccelerationConstraints() { + double c1 = ((RandomizingControlParameter) cognitiveAcceleration).getControlParameter().getParameter(); + double c2 = ((RandomizingControlParameter) socialAcceleration).getControlParameter().getParameter(); + if (c1 + c2 < 4) { + throw new UnsupportedOperationException("Parameter constraint violation: " + + "The sum of the Cognitive (" + c1 + ") and Social (" + c2 + ") acceleration parameters " + + "has to be greater than or equal to 4."); + } + } + + /** + * Get the coginitive acceleration parameter. + * @return the cognitive acceleration {@link ControlParameter control parameter }. + */ + public ControlParameter getCognitiveAcceleration() { + return cognitiveAcceleration; + } + + /** + * Set the coginitive acceleration parameter. + * @param cognitiveAcceleration the new cognitive acceleration {@link ControlParameter control parameter }. + */ + public void setCognitiveAcceleration(ControlParameter cognitiveAcceleration) { + this.cognitiveAcceleration = cognitiveAcceleration; + } + + /** + * Get the Kappa control parameter. + * @return the kappa {@link ControlParameter control parameter }. + */ + public ControlParameter getKappa() { + return kappa; + } + + /** + * Set the Kappa control parameter. + * @param kappa the new kappa {@link ControlParameter control parameter }. + */ + public void setKappa(ControlParameter kappa) { + this.kappa = kappa; + } + + /** + * Get the social acceleration parameter. + * @return the social acceleration {@link ControlParameter control parameter }. + */ + public ControlParameter getSocialAcceleration() { + return socialAcceleration; + } + + /** + * Set the social acceleration parameter. + * @param socialAcceleration the new social accerelation {@link ControlParameter control parameter }. + */ + public void setSocialAcceleration(ControlParameter socialAcceleration) { + this.socialAcceleration = socialAcceleration; + } + + /** + * Get the maximum velocity parameter. + * @return the maximum velocity {@link ControlParameter control parameter }. + */ + public ControlParameter getVMax() { + return vMax; + } + + /** + * Set the maximum velocity parameter. + * @param vMax the new maximum velocity {@link ControlParameter control parameter }. + */ + public void setVMax(ControlParameter vMax) { + this.vMax = vMax; + } +} diff --git a/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdateTest.java b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdateTest.java new file mode 100644 index 0000000..189cca9 --- /dev/null +++ b/src/test/java/net/sourceforge/cilib/pso/velocityupdatestrategies/ConstrictionVelocityUpdateTest.java @@ -0,0 +1,144 @@ +/** + * Copyright (C) 2003 - 2009 + * Computational Intelligence Research Group (CIRG@UP) + * Department of Computer Science + * University of Pretoria + * South Africa + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +package net.sourceforge.cilib.pso.velocityupdatestrategies; + +import net.sourceforge.cilib.controlparameter.ConstantControlParameter; +import net.sourceforge.cilib.controlparameter.RandomizingControlParameter; +import net.sourceforge.cilib.functions.continuous.Spherical; +import net.sourceforge.cilib.math.Maths; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.problem.FunctionMinimisationProblem; +import net.sourceforge.cilib.pso.particle.StandardParticle; +import net.sourceforge.cilib.type.types.Numeric; +import net.sourceforge.cilib.type.types.container.Vector; +import org.junit.Assert; +import org.junit.Test; + +/** + * Unit test for the constriction velocity update. + * @author andrich + */ +public class ConstrictionVelocityUpdateTest { + + /** + * Test cloning and implicetly the copy constructor. + */ + @Test + public void testClone() { + ConstrictionVelocityUpdate original = new ConstrictionVelocityUpdate(); + ConstrictionVelocityUpdate copy = (ConstrictionVelocityUpdate) original.getClone(); + + Assert.assertEquals(original.getKappa().getParameter(), copy.getKappa().getParameter(), Maths.EPSILON); + Assert.assertEquals(original.getVMax().getParameter(), copy.getVMax().getParameter(), Maths.EPSILON); + Assert.assertEquals(((RandomizingControlParameter)original.cognitiveAcceleration).getControlParameter().getParameter(), + ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParameter().getParameter(), Maths.EPSILON); + Assert.assertEquals(((RandomizingControlParameter)original.socialAcceleration).getControlParameter().getParameter(), + ((RandomizingControlParameter)copy.socialAcceleration).getControlParameter().getParameter(), Maths.EPSILON); + + copy.setKappa(new ConstantControlParameter(0.7)); + copy.setVMax(new ConstantControlParameter(0.7)); + RandomizingControlParameter randomizingControlParameter = new RandomizingControlParameter(); + randomizingControlParameter.setParameter(4.0); + copy.setSocialAcceleration(new RandomizingControlParameter(randomizingControlParameter.getClone())); + copy.setCognitiveAcceleration(new RandomizingControlParameter(randomizingControlParameter.getClone())); + + Assert.assertFalse(Double.compare(original.getKappa().getParameter(), copy.getKappa().getParameter()) == 0); + Assert.assertFalse(Double.compare(original.getVMax().getParameter(), copy.getVMax().getParameter()) == 0); + Assert.assertFalse(Double.compare(((RandomizingControlParameter)original.cognitiveAcceleration).getControlParameter().getParameter(), + ((RandomizingControlParameter)copy.cognitiveAcceleration).getControlParameter().getParameter()) == 0); + Assert.assertFalse(Double.compare(((RandomizingControlParameter)original.socialAcceleration).getControlParameter().getParameter(), + ((RandomizingControlParameter)copy.socialAcceleration).getControlParameter().getParameter()) == 0); + } + + /** + * Test the velocity update as well as the constraint assertion. + */ + @Test + public void testUpdateAndConstraintAssertion() { + MersenneTwister twister = new MersenneTwister(); + FunctionMinimisationProblem problem = new FunctionMinimisationProblem(); + problem.setFunction(new Spherical()); + + StandardParticle nBest = new StandardParticle(); + StandardParticle particle = new StandardParticle(); + particle.initialise(problem); + nBest.initialise(problem); + ((Vector)particle.getVelocity()).randomize(twister); + particle.setNeighbourhoodBest(nBest); + + ConstrictionVelocityUpdate constrictionVelocityUpdate = new ConstrictionVelocityUpdate(); + + boolean assertionExceptionOccured = false; + try { + constrictionVelocityUpdate.updateVelocity(particle); + } + catch(UnsupportedOperationException ex) { + assertionExceptionOccured = true; + } + + Assert.assertFalse(assertionExceptionOccured); + + RandomizingControlParameter randomizingControlParameter = new RandomizingControlParameter(); + randomizingControlParameter.setParameter(1.0); + constrictionVelocityUpdate.setSocialAcceleration(new RandomizingControlParameter(randomizingControlParameter.getClone())); + constrictionVelocityUpdate.setCognitiveAcceleration(new RandomizingControlParameter(randomizingControlParameter.getClone())); + + assertionExceptionOccured = false; + try { + constrictionVelocityUpdate.updateVelocity(particle); + } + catch(UnsupportedOperationException ex) { + assertionExceptionOccured = true; + } + + Assert.assertTrue(assertionExceptionOccured); + + } + + /** + * Test velocity clamping. + */ + @Test + public void testClamping() { + MersenneTwister twister = new MersenneTwister(); + FunctionMinimisationProblem problem = new FunctionMinimisationProblem(); + problem.setFunction(new Spherical()); + + StandardParticle nBest = new StandardParticle(); + StandardParticle particle = new StandardParticle(); + particle.initialise(problem); + nBest.initialise(problem); + ((Vector)particle.getVelocity()).randomize(twister); + particle.setNeighbourhoodBest(nBest); + + ConstrictionVelocityUpdate constrictionVelocityUpdate = new ConstrictionVelocityUpdate(); + constrictionVelocityUpdate.setVMax(new ConstantControlParameter(0.5)); + constrictionVelocityUpdate.updateVelocity(particle); + Vector velocity = particle.getVelocity(); + for (Numeric number : velocity) { + Assert.assertTrue(Double.compare(number.getReal(), 0.5) <= 0); + Assert.assertTrue(Double.compare(number.getReal(), -0.5) >= 0); + } + + } + +} diff --git a/xml/constrictionPSO.xml b/xml/constrictionPSO.xml new file mode 100644 index 0000000..77c3eb4 --- /dev/null +++ b/xml/constrictionPSO.xml @@ -0,0 +1,57 @@ +<?xml version="1.0"?> +<!DOCTYPE simulator [ +<!ATTLIST algorithm id ID #IMPLIED> +<!ATTLIST problem id ID #IMPLIED> +<!ATTLIST measurements id ID #IMPLIED> +]> +<simulator> + <algorithms> + <algorithm id="constrictionPSO" class="pso.PSO"> + <initialisationStrategy class="algorithm.initialisation.ClonedPopulationInitialisationStrategy"> + <entityType class="pso.particle.StandardParticle"> + <velocityUpdateStrategy class="pso.velocityupdatestrategies.ConstrictionVelocityUpdate"> + <kappa class="controlparameter.ConstantControlParameter" parameter="0.1" /> + <socialAcceleration class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + <cognitiveAcceleration class="controlparameter.RandomizingControlParameter" parameter="3.0" /> + <!--vMax class="controlparameter.ConstantControlParameter" parameter="0.1" /--> + </velocityUpdateStrategy> + </entityType> + </initialisationStrategy> + <topology class="entity.topologies.GBestTopology"/> + <addStoppingCondition class="stoppingcondition.MaximumIterations" maximumIterations="1000"/> + </algorithm> + </algorithms> + + <problems> + <problem id="spherical" class="problem.FunctionMinimisationProblem"> + <function class="functions.continuous.Spherical"/> + </problem> + <problem id="rosenbrock" class="problem.FunctionMinimisationProblem"> + <function class="functions.continuous.Rosenbrock"/> + </problem> + <problem id="rastrigin" class="problem.FunctionMinimisationProblem"> + <function class="functions.continuous.unconstrained.Rastrigin"/> + </problem> + </problems> + + <measurements id="fitness" class="simulator.MeasurementSuite" resolution="10" samples="1"> + <addMeasurement class="measurement.single.Fitness"/> + </measurements> + <simulations> + <simulation> + <algorithm idref="constrictionPSO"/> + <problem idref="spherical"/> + <measurements idref="fitness" file="data/constrictionpso_spherical.txt"/> + </simulation> + <simulation> + <algorithm idref="constrictionPSO"/> + <problem idref="rosenbrock"/> + <measurements idref="fitness" file="data/constrictionpso_rosenbrock.txt"/> + </simulation> + <simulation> + <algorithm idref="constrictionPSO"/> + <problem idref="rastrigin"/> + <measurements idref="fitness" file="data/constrictionpso_rastrigin.txt"/> + </simulation> + </simulations> +</simulator> -- 1.6.0.4 |
From: Gary P. <gpa...@gm...> - 2009-06-30 06:31:20
|
Patch looks good. I've applied it to next. Thanks for the submission :D On Monday 29 June 2009 08:00:51 Andries Engelbrecht wrote: > Hi, > > Please find attached new measurements, measurement unit > tests, corrections on previous measurements. > > Gary, please let me know of anything that is wrong with my > patch, so that I can improve on it next time. > > Regards |
From: Andries E. <en...@cs...> - 2009-06-29 05:59:50
|
Hi, Please find attached new measurements, measurement unit tests, corrections on previous measurements. Gary, please let me know of anything that is wrong with my patch, so that I can improve on it next time. Regards -- ========================================================== Prof Andries P Engelbrecht South African Research Chair in Artificial Intelligence Fundamentals of Computational Swarm Intelligence, John Wiley & Sons, December 2005. Computational Intelligence, An Introduction John Wiley & Sons, Second edition to be published soon Computational Intelligence Research Group: http://cirg.cs.up.ac.za Department of Computer Science School of Information Technology University of Pretoria Pretoria 0002, South Africa Tel: +27 12 420 3578 Fax: +27 12 362 5188 http://www.cs.up.ac.za/~engel ================================================ This message and attachments are subject to a disclaimer. Please refer to www.it.up.ac.za/documentation/governance/disclaimer/ for full details. / Hierdie boodskap en aanhangsels is aan 'n vrywaringsklousule onderhewig. Volledige besonderhede is by www.it.up.ac.za/documentation/governance/disclaimer/ beskikbaar. |
From: Gary P. <gpa...@gm...> - 2009-06-24 05:57:33
|
Obtaining the size of the population was possible in two ways. However, using the getPopulationSize() method was flawed as it returned the size of the initial population and not the current population. This method has been removed and you should be using topology.size() instead. To get the size of the initial population, the PopulationInitialisationStrategy should be queried for the entity number. Signed-off-by: Gary Pampara <gpa...@gm...> --- .../population/MultiPopulationBasedAlgorithm.java | 6 ------ .../population/PopulationBasedAlgorithm.java | 14 ++++++-------- .../population/SinglePopulationBasedAlgorithm.java | 9 --------- .../cilib/coevolution/CoevolutionAlgorithm.java | 2 +- .../GeneticAlgorithmIterationStrategy.java | 2 +- .../cilib/entity/visitor/SpatialRadiusVisitor.java | 2 +- .../continuous/decorators/AngleModulation.java | 17 ++++++++++------- .../DimensionBoundViolationsPerParticle.java | 2 +- .../cilib/measurement/single/Diversity.java | 2 +- .../measurement/single/NormalisedDiversity.java | 2 +- .../single/ParticleBoundViolations.java | 2 +- .../AverageDiversityAroundAllEntities.java | 2 +- .../measurement/single/diversity/Diversity.java | 4 ++-- .../SpatialCenterInitialisationStrategy.java | 2 +- .../RandomSentryDetectionStrategy.java | 2 +- .../PartialReinitialisationResponseStrategy.java | 2 +- 16 files changed, 29 insertions(+), 43 deletions(-) diff --git a/src/main/java/net/sourceforge/cilib/algorithm/population/MultiPopulationBasedAlgorithm.java b/src/main/java/net/sourceforge/cilib/algorithm/population/MultiPopulationBasedAlgorithm.java index b7f0870..a8affab 100644 --- a/src/main/java/net/sourceforge/cilib/algorithm/population/MultiPopulationBasedAlgorithm.java +++ b/src/main/java/net/sourceforge/cilib/algorithm/population/MultiPopulationBasedAlgorithm.java @@ -166,12 +166,6 @@ public abstract class MultiPopulationBasedAlgorithm extends PopulationBasedAlgor } @Override - public int getPopulationSize() { - // TODO: Should this method return the size as the sum of each subpopulation? - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override public Topology<? extends Entity> getTopology() { throw new UnsupportedOperationException("Not supported yet."); } diff --git a/src/main/java/net/sourceforge/cilib/algorithm/population/PopulationBasedAlgorithm.java b/src/main/java/net/sourceforge/cilib/algorithm/population/PopulationBasedAlgorithm.java index ca1c418..b1dfba9 100644 --- a/src/main/java/net/sourceforge/cilib/algorithm/population/PopulationBasedAlgorithm.java +++ b/src/main/java/net/sourceforge/cilib/algorithm/population/PopulationBasedAlgorithm.java @@ -50,12 +50,6 @@ public abstract class PopulationBasedAlgorithm extends Algorithm { public abstract PopulationBasedAlgorithm getClone(); /** - * Return the size of the current population. - * @return The size of the population. - */ - public abstract int getPopulationSize(); - - /** * {@inheritDoc} */ @Override @@ -90,11 +84,15 @@ public abstract class PopulationBasedAlgorithm extends Algorithm { public abstract Object accept(TopologyVisitor visitor); /** - * - * @param initialisationStrategy + * Set the initialisation strategy to use for the initialisation of the population. + * @param initialisationStrategy The population initialisation strategy to set. */ public abstract void setInitialisationStrategy(PopulationInitialisationStrategy initialisationStrategy); + /** + * Get the current {@code PopulationInitialisationStrategy}. + * @return The current {@code PopulationInitialisationStrategy}. + */ public abstract PopulationInitialisationStrategy getInitialisationStrategy(); } diff --git a/src/main/java/net/sourceforge/cilib/algorithm/population/SinglePopulationBasedAlgorithm.java b/src/main/java/net/sourceforge/cilib/algorithm/population/SinglePopulationBasedAlgorithm.java index 1d72f60..8be5bcb 100644 --- a/src/main/java/net/sourceforge/cilib/algorithm/population/SinglePopulationBasedAlgorithm.java +++ b/src/main/java/net/sourceforge/cilib/algorithm/population/SinglePopulationBasedAlgorithm.java @@ -63,15 +63,6 @@ public abstract class SinglePopulationBasedAlgorithm extends PopulationBasedAlgo protected abstract void algorithmIteration(); /** - * Get the size of the current population within the algorithm. - * @return The size of the current Population. - */ - @Override - public int getPopulationSize() { - return this.initialisationStrategy.getEntityNumber(); - } - - /** * {@inheritDoc} */ @Override diff --git a/src/main/java/net/sourceforge/cilib/coevolution/CoevolutionAlgorithm.java b/src/main/java/net/sourceforge/cilib/coevolution/CoevolutionAlgorithm.java index f89256a..826312f 100755 --- a/src/main/java/net/sourceforge/cilib/coevolution/CoevolutionAlgorithm.java +++ b/src/main/java/net/sourceforge/cilib/coevolution/CoevolutionAlgorithm.java @@ -69,7 +69,7 @@ public class CoevolutionAlgorithm extends MultiPopulationBasedAlgorithm { public int getPopulationSize() { int sum = 0; for (PopulationBasedAlgorithm currentAlgorithm : subPopulationsAlgorithms) { - sum += currentAlgorithm.getPopulationSize(); + sum += currentAlgorithm.getTopology().size(); } return sum; diff --git a/src/main/java/net/sourceforge/cilib/ec/iterationstrategies/GeneticAlgorithmIterationStrategy.java b/src/main/java/net/sourceforge/cilib/ec/iterationstrategies/GeneticAlgorithmIterationStrategy.java index 4ea4387..e76b3f4 100644 --- a/src/main/java/net/sourceforge/cilib/ec/iterationstrategies/GeneticAlgorithmIterationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/ec/iterationstrategies/GeneticAlgorithmIterationStrategy.java @@ -120,7 +120,7 @@ public class GeneticAlgorithmIterationStrategy extends AbstractIterationStrategy ListIterator<? extends Entity> i = ec.getTopology().listIterator(); int count = 0; - int size = ec.getTopology().size() - ec.getPopulationSize(); + int size = ec.getTopology().size() - ec.getInitialisationStrategy().getEntityNumber(); while (i.hasNext() && count < size) { i.next(); diff --git a/src/main/java/net/sourceforge/cilib/entity/visitor/SpatialRadiusVisitor.java b/src/main/java/net/sourceforge/cilib/entity/visitor/SpatialRadiusVisitor.java index 0a11876..1746c21 100644 --- a/src/main/java/net/sourceforge/cilib/entity/visitor/SpatialRadiusVisitor.java +++ b/src/main/java/net/sourceforge/cilib/entity/visitor/SpatialRadiusVisitor.java @@ -44,7 +44,7 @@ public class SpatialRadiusVisitor extends TopologyVisitor { double maxDistance = 0.0; // get number of entities in the population - int numberOfEntities = ((PopulationBasedAlgorithm) this.currentAlgorithm).getPopulationSize(); + int numberOfEntities = ((PopulationBasedAlgorithm) this.currentAlgorithm).getTopology().size(); // initialize iterator to be used to calculate spatial center Iterator<? extends Entity> calculateCenterIterator = ((PopulationBasedAlgorithm) this.currentAlgorithm).getTopology().iterator(); diff --git a/src/main/java/net/sourceforge/cilib/functions/continuous/decorators/AngleModulation.java b/src/main/java/net/sourceforge/cilib/functions/continuous/decorators/AngleModulation.java index 7855415..6539d0c 100644 --- a/src/main/java/net/sourceforge/cilib/functions/continuous/decorators/AngleModulation.java +++ b/src/main/java/net/sourceforge/cilib/functions/continuous/decorators/AngleModulation.java @@ -69,22 +69,25 @@ public class AngleModulation extends ContinuousFunction { } /** - * + * {@inheritDoc} */ + @Override public Object getMinimum() { return function.getMinimum(); } /** - * + * {@inheritDoc} */ + @Override public Object getMaximum() { return function.getMaximum(); } /** - * + * {@inheritDoc} */ + @Override public double evaluate(Vector x) { String solution = generateBitString(x); Vector expandedVector = decodeBitString(solution); @@ -121,7 +124,7 @@ public class AngleModulation extends ContinuousFunction { /** * - * @param funciton + * @param decoratedFunciton */ public void setFunction(Function decoratedFunciton) { this.function = decoratedFunciton; @@ -130,7 +133,7 @@ public class AngleModulation extends ContinuousFunction { /** * - * @param string + * @param domain * @return */ public int getRequiredNumberOfBits(DomainRegistry domain) { @@ -210,8 +213,8 @@ public class AngleModulation extends ContinuousFunction { * TODO: Move this into a class that will make sense. * * @param bitString The bitsting as a string - * @param i The starting index - * @param j The ending index + * @param startIndex The starting index + * @param endIndex The ending index * @return The value of the bitstring */ public double valueOf(String bitString, int startIndex, int endIndex) { diff --git a/src/main/java/net/sourceforge/cilib/measurement/single/DimensionBoundViolationsPerParticle.java b/src/main/java/net/sourceforge/cilib/measurement/single/DimensionBoundViolationsPerParticle.java index fbec5b4..9f7ad0e 100644 --- a/src/main/java/net/sourceforge/cilib/measurement/single/DimensionBoundViolationsPerParticle.java +++ b/src/main/java/net/sourceforge/cilib/measurement/single/DimensionBoundViolationsPerParticle.java @@ -79,7 +79,7 @@ public class DimensionBoundViolationsPerParticle implements Measurement { PopulationBasedAlgorithm populationBasedAlgorithm = (PopulationBasedAlgorithm) algorithm; int numberOfViolations = 0; - int populationSize = populationBasedAlgorithm.getPopulationSize(); + int populationSize = populationBasedAlgorithm.getTopology().size(); for (Entity populationEntity : populationBasedAlgorithm.getTopology()) { for (Numeric position : (Vector) populationEntity.getCandidateSolution()) { diff --git a/src/main/java/net/sourceforge/cilib/measurement/single/Diversity.java b/src/main/java/net/sourceforge/cilib/measurement/single/Diversity.java index fa08d4d..03b7e59 100644 --- a/src/main/java/net/sourceforge/cilib/measurement/single/Diversity.java +++ b/src/main/java/net/sourceforge/cilib/measurement/single/Diversity.java @@ -68,7 +68,7 @@ public class Diversity implements Measurement { public Type getValue(Algorithm algorithm) { PopulationBasedAlgorithm populationBasedAlgorithm = (PopulationBasedAlgorithm) algorithm; - int numberOfEntities = populationBasedAlgorithm.getPopulationSize(); + int numberOfEntities = populationBasedAlgorithm.getTopology().size(); Iterator<? extends Entity> k = populationBasedAlgorithm.getTopology().iterator(); Entity entity = k.next(); diff --git a/src/main/java/net/sourceforge/cilib/measurement/single/NormalisedDiversity.java b/src/main/java/net/sourceforge/cilib/measurement/single/NormalisedDiversity.java index 6aa8679..9b4310a 100644 --- a/src/main/java/net/sourceforge/cilib/measurement/single/NormalisedDiversity.java +++ b/src/main/java/net/sourceforge/cilib/measurement/single/NormalisedDiversity.java @@ -83,7 +83,7 @@ public class NormalisedDiversity implements Measurement { PSO pso = (PSO) algorithm; - int numberParticles = pso.getPopulationSize(); + int numberParticles = pso.getTopology().size(); Iterator<Particle> k = pso.getTopology().iterator(); Particle particle = k.next(); diff --git a/src/main/java/net/sourceforge/cilib/measurement/single/ParticleBoundViolations.java b/src/main/java/net/sourceforge/cilib/measurement/single/ParticleBoundViolations.java index eacc2bc..a9b6d21 100644 --- a/src/main/java/net/sourceforge/cilib/measurement/single/ParticleBoundViolations.java +++ b/src/main/java/net/sourceforge/cilib/measurement/single/ParticleBoundViolations.java @@ -79,7 +79,7 @@ public class ParticleBoundViolations implements Measurement { Iterator<? extends Entity> populationIterator = populationBasedAlgorithm.getTopology().iterator(); int numberOfViolations = 0; - int populationSize = populationBasedAlgorithm.getPopulationSize(); + int populationSize = populationBasedAlgorithm.getTopology().size(); while (populationIterator.hasNext()) { Entity entity = populationIterator.next(); diff --git a/src/main/java/net/sourceforge/cilib/measurement/single/diversity/AverageDiversityAroundAllEntities.java b/src/main/java/net/sourceforge/cilib/measurement/single/diversity/AverageDiversityAroundAllEntities.java index 6c241f8..25ef7fb 100644 --- a/src/main/java/net/sourceforge/cilib/measurement/single/diversity/AverageDiversityAroundAllEntities.java +++ b/src/main/java/net/sourceforge/cilib/measurement/single/diversity/AverageDiversityAroundAllEntities.java @@ -47,7 +47,7 @@ public class AverageDiversityAroundAllEntities extends Diversity { public Type getValue() { PopulationBasedAlgorithm algorithm = (PopulationBasedAlgorithm) Algorithm.get(); - int numberOfEntities = algorithm.getPopulationSize(); + int numberOfEntities = algorithm.getTopology().size(); Iterator<? extends Entity> populationCenterIterator = algorithm.getTopology().iterator(); diff --git a/src/main/java/net/sourceforge/cilib/measurement/single/diversity/Diversity.java b/src/main/java/net/sourceforge/cilib/measurement/single/diversity/Diversity.java index b4ed96c..e6426be 100644 --- a/src/main/java/net/sourceforge/cilib/measurement/single/diversity/Diversity.java +++ b/src/main/java/net/sourceforge/cilib/measurement/single/diversity/Diversity.java @@ -70,9 +70,9 @@ public class Diversity implements Measurement { public Type getValue(Algorithm algorithm) { PopulationBasedAlgorithm populationBasedAlgorithm = (PopulationBasedAlgorithm) algorithm; - int numberOfEntities = populationBasedAlgorithm.getPopulationSize(); + int numberOfEntities = populationBasedAlgorithm.getTopology().size(); - Vector center = (Vector) populationCenter.getCenter(); + Vector center = populationCenter.getCenter(); Iterator<? extends Entity> populationIterator = populationBasedAlgorithm.getTopology().iterator(); double distanceSum = 0.0; diff --git a/src/main/java/net/sourceforge/cilib/measurement/single/diversity/centerinitialisationstrategies/SpatialCenterInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/measurement/single/diversity/centerinitialisationstrategies/SpatialCenterInitialisationStrategy.java index 1541e53..4eed204 100644 --- a/src/main/java/net/sourceforge/cilib/measurement/single/diversity/centerinitialisationstrategies/SpatialCenterInitialisationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/measurement/single/diversity/centerinitialisationstrategies/SpatialCenterInitialisationStrategy.java @@ -36,7 +36,7 @@ public class SpatialCenterInitialisationStrategy extends CenterInitialisationStr @Override public Vector getCenter() { PopulationBasedAlgorithm algorithm = (PopulationBasedAlgorithm) Algorithm.get(); - int numberOfEntities = algorithm.getPopulationSize(); + int numberOfEntities = algorithm.getTopology().size();//getPopulationSize(); Iterator<? extends Entity> averageIterator = algorithm.getTopology().iterator(); Entity entity = averageIterator.next(); diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/detectionstrategies/RandomSentryDetectionStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/detectionstrategies/RandomSentryDetectionStrategy.java index 986ffc7..2fd0c2b 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/detectionstrategies/RandomSentryDetectionStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/detectionstrategies/RandomSentryDetectionStrategy.java @@ -69,7 +69,7 @@ public class RandomSentryDetectionStrategy<E extends PopulationBasedAlgorithm> e boolean envChangeOccured = false; ArrayList<Entity> sentryList = new ArrayList<Entity>(); - int populationSize = algorithm.getPopulationSize(); + int populationSize = topology.size(); for (int i = 0; i < sentries; i++) { int index = randomiser.nextInt(populationSize); diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java index df30398..f81b1b8 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java @@ -64,7 +64,7 @@ public class PartialReinitialisationResponseStrategy<E extends PopulationBasedAl public void performReaction(E algorithm) { // Reset positions: Topology<? extends Entity> topology = algorithm.getTopology(); - int populationSize = algorithm.getPopulationSize(); + int populationSize = topology.size(); boolean [] used = new boolean[populationSize]; for (int i = 0; i < populationSize; ++i) used[i] = false; int numParticlesToReinitialise = (int) Math.floor(populationSize * reinitialisationRatio); -- 1.6.2.3 |
From: Gary P. <gpa...@gm...> - 2009-06-23 11:35:12
|
What can we do regarding obtaining what the expected size of the population should be? Should we add something like that to the topology (I really don't like this idea)? I'm just thinking aloud but in the case of where the size of the topology grows beyond a "limit" and needs to be culled (like with the EC algorithms). Any thoughts? On Tuesday 23 June 2009 08:31:01 Andries Engelbrecht wrote: > I support repmoval of getPopulationSize, and retaining and > using only topology.size(), as the two may just cause some > unintentional bugs. > > Gary Pampara wrote: > > Hi all, > > > > There seems to be an API ambiguity with topologies and I would like to > > sort it out. > > > > Currently, the getPopulationSize() is returning the size of the topology > > that the PopulationInitialisationStrategy is creating. This, therefore, > > remains constant throughout the run of the algorithm, whereas > > topology.size() may differ in size. > > > > I would suggest that the getPopulationSize() method needs to be removed. > > Would anyone be apposed to such a change? We would still be able to ask > > the PopulationInitialisationStrategy for what the initial population size > > was (this would be beeded for the EC algorithms). > > > > Regards, > > Gary > > > > ------------------------------------------------------------------------- > >----- Are you an open source citizen? Join us for the Open Source Bridge > > conference! Portland, OR, June 17-19. Two days of sessions, one day of > > unconference: $250. Need another reason to go? 24-hour hacker lounge. > > Register today! > > http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridg > >e.org _______________________________________________ > > cilib-devel mailing list > > cil...@li... > > https://lists.sourceforge.net/lists/listinfo/cilib-devel |
From: Gary P. <gpa...@gm...> - 2009-06-23 05:39:36
|
Hi all, There seems to be an API ambiguity with topologies and I would like to sort it out. Currently, the getPopulationSize() is returning the size of the topology that the PopulationInitialisationStrategy is creating. This, therefore, remains constant throughout the run of the algorithm, whereas topology.size() may differ in size. I would suggest that the getPopulationSize() method needs to be removed. Would anyone be apposed to such a change? We would still be able to ask the PopulationInitialisationStrategy for what the initial population size was (this would be beeded for the EC algorithms). Regards, Gary |
From: Gary P. <gpa...@gm...> - 2009-06-19 11:26:23
|
The upper bound on bound objects was being excluded. This should be the case for random number useage (whereby the upper bound will be exculded) but for normal bound operations it doesn't make sense. Signed-off-by: Gary Pampara <gpa...@gm...> --- .../measurement/single/NormalisedDiversity.java | 7 +++---- .../net/sourceforge/cilib/type/types/Bounds.java | 2 +- .../net/sourceforge/cilib/type/types/Types.java | 5 +++++ .../sourceforge/cilib/type/types/BoundsTest.java | 11 +++++++++++ .../sourceforge/cilib/type/types/TypesTest.java | 16 +++++++++++++++- .../net/sourceforge/cilib/util/VectorsTest.java | 3 +-- 6 files changed, 36 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/sourceforge/cilib/measurement/single/NormalisedDiversity.java b/src/main/java/net/sourceforge/cilib/measurement/single/NormalisedDiversity.java index 1e1f364..6aa8679 100644 --- a/src/main/java/net/sourceforge/cilib/measurement/single/NormalisedDiversity.java +++ b/src/main/java/net/sourceforge/cilib/measurement/single/NormalisedDiversity.java @@ -86,22 +86,21 @@ public class NormalisedDiversity implements Measurement { int numberParticles = pso.getPopulationSize(); Iterator<Particle> k = pso.getTopology().iterator(); - Particle particle = (Particle) k.next(); + Particle particle = k.next(); Vector averageParticlePosition = (Vector) particle.getPosition().getClone(); while (k.hasNext()) { - particle = (Particle) k.next(); + particle = k.next(); Vector v = (Vector) particle.getPosition(); for (int j = 0; j < averageParticlePosition.getDimension(); ++j) averageParticlePosition.setReal(j, averageParticlePosition.getReal(j)+v.getReal(j)); } for (int j = 0; j < averageParticlePosition.getDimension(); ++j) averageParticlePosition.setReal(j, averageParticlePosition.getReal(j)/numberParticles); - //System.out.println(averageParticlePosition); Iterator<Particle> i = pso.getTopology().iterator(); double particleSum = 0.0; while (i.hasNext()) { - particle = (Particle) i.next(); + particle = i.next(); double dimensionSum = 0.0; Vector v = (Vector) particle.getPosition(); diff --git a/src/main/java/net/sourceforge/cilib/type/types/Bounds.java b/src/main/java/net/sourceforge/cilib/type/types/Bounds.java index d1c4175..8558786 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Bounds.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Bounds.java @@ -51,7 +51,7 @@ public class Bounds { } public boolean isInsideBounds(double value) { - if (value < upperBound && value >= lowerBound) + if (Double.compare(value, upperBound) <= 0 && Double.compare(value, lowerBound) >= 0) return true; return false; diff --git a/src/main/java/net/sourceforge/cilib/type/types/Types.java b/src/main/java/net/sourceforge/cilib/type/types/Types.java index ab2a3c0..4b6c955 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Types.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Types.java @@ -69,7 +69,12 @@ public final class Types { this.isDone = true; this.valid = false; } + + return; } + + isDone = true; + valid = false; } public boolean isValid() { diff --git a/src/test/java/net/sourceforge/cilib/type/types/BoundsTest.java b/src/test/java/net/sourceforge/cilib/type/types/BoundsTest.java index d94b9de..7166fd1 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/BoundsTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/BoundsTest.java @@ -21,6 +21,7 @@ */ package net.sourceforge.cilib.type.types; +import net.sourceforge.cilib.math.Maths; import org.junit.Assert; import org.junit.Test; @@ -47,4 +48,14 @@ public class BoundsTest { Assert.assertSame(b1, b2); } + @Test + public void boundsEdgeCases() { + Bounds b1 = BoundsFactory.create(0.0, 2.0); + Assert.assertTrue(b1.isInsideBounds(2.0)); + Assert.assertTrue(b1.isInsideBounds(0.0)); + + Assert.assertFalse(b1.isInsideBounds(2.0 + Maths.EPSILON)); + Assert.assertFalse(b1.isInsideBounds(0.0 - Maths.EPSILON)); + } + } diff --git a/src/test/java/net/sourceforge/cilib/type/types/TypesTest.java b/src/test/java/net/sourceforge/cilib/type/types/TypesTest.java index f58b027..1350966 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/TypesTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/TypesTest.java @@ -49,7 +49,7 @@ public class TypesTest { } @Test - public void structureIsInsideBounds() { + public void structureIsNotInsideBounds() { Vector vector = new Vector(); Real r = new Real(-5.0, 5.0); r.setReal(-7.0); @@ -58,4 +58,18 @@ public class TypesTest { Assert.assertFalse(Types.isInsideBounds(vector)); } + + @Test + public void structureInBounds() { + Vector vector = new Vector(); + Real r1 = new Real(-5.0, 5.0); + Real r2 = new Real(-5.0, 5.0); + r1.setReal(-5.0); + r2.setReal(5.0); + + vector.add(r1); + vector.add(r2); + + Assert.assertTrue(Types.isInsideBounds(vector)); + } } diff --git a/src/test/java/net/sourceforge/cilib/util/VectorsTest.java b/src/test/java/net/sourceforge/cilib/util/VectorsTest.java index b803a34..966a7b1 100644 --- a/src/test/java/net/sourceforge/cilib/util/VectorsTest.java +++ b/src/test/java/net/sourceforge/cilib/util/VectorsTest.java @@ -24,7 +24,6 @@ package net.sourceforge.cilib.util; import net.sourceforge.cilib.type.types.BoundsFactory; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.Real; @@ -55,7 +54,7 @@ public class VectorsTest { int i = 1; for (Type element : Vectors.upperBoundVector(vector)) { Numeric numeric = (Numeric) element; - assertFalse(Types.isInsideBounds(numeric)); + assertTrue(Types.isInsideBounds(numeric)); assertEquals(i++ * 2, numeric.getReal(), 0.0); } } -- 1.6.2.3 |
From: Gary P. <gpa...@gm...> - 2009-06-19 09:52:54
|
True. Let's have a look at the EP. Each individual would maintain a list of phenotypes that would be used to drive the mutation operator. In this instance, we could initialise the strategy parameters, ouldn't we? Regards, Gary On Friday 19 June 2009 11:41:08 engel wrote: > Hi Gary, > > It depends on what was meant by the phenotypes, which is supposed to refer > to the behavioral characteristics of the individual, which is a consequence > of the algorithm dynamics. I can not see where it will be useful to > initialize > phenotypes, unless I miss something with the intended meaning as currently > implemented in CIlib. > > Regards > > On Fri, 19 Jun 2009 11:34:39 +0200, Gary Pampara <gpa...@gm...> > > wrote: > > Hi all, > > > > I'm looking at extracting the initialisation strategies into something > > more > > > generic. Currently, we have initialisation strategies for the velocity > > vectors > > in Particles. > > > > The thing is that what about phenotypes within individuals? You may want > > them > > to be initialised in specific manners (randomized / fixed value etc). > > > > Would anyone regard this as a valid change? > > > > Regards, > > Gary > > --------------------------------------------------------------------------- >--- > > > Crystal Reports - New Free Runtime and 30 Day Trial > > Check out the new simplified licensing option that enables unlimited > > royalty-free distribution of the report engine for externally facing > > server and web deployment. > > http://p.sf.net/sfu/businessobjects > > _______________________________________________ > > cilib-devel mailing list > > cil...@li... > > https://lists.sourceforge.net/lists/listinfo/cilib-devel > > --------------------------------------------------------------------------- >--- Crystal Reports - New Free Runtime and 30 Day Trial > Check out the new simplified licensing option that enables unlimited > royalty-free distribution of the report engine for externally facing > server and web deployment. > http://p.sf.net/sfu/businessobjects > _______________________________________________ > cilib-devel mailing list > cil...@li... > https://lists.sourceforge.net/lists/listinfo/cilib-devel |
From: Theuns C. <the...@gm...> - 2009-06-19 09:47:24
|
Hi all, If I understand it correctly, this could be a good idea. I keep thinking of a pipelined technique. We can even go as generic as having an initialisation pipeline for all types of algorithms (whether singular, population based or multi-population based) and each specific algorithm (PSO, GA, etc) can then hook into the pipeline and initialises its own entities (or whatever) by initialising its positions or velocities or whatever. Does that make sense? Regards -- Theuns On Fri, Jun 19, 2009 at 11:34 AM, Gary Pampara<gpa...@gm...> wrote: > Hi all, > > I'm looking at extracting the initialisation strategies into something more > generic. Currently, we have initialisation strategies for the velocity vectors > in Particles. > > The thing is that what about phenotypes within individuals? You may want them > to be initialised in specific manners (randomized / fixed value etc). > > Would anyone regard this as a valid change? > > Regards, > Gary |
From: engel <en...@cs...> - 2009-06-19 09:41:25
|
Hi Gary, It depends on what was meant by the phenotypes, which is supposed to refer to the behavioral characteristics of the individual, which is a consequence of the algorithm dynamics. I can not see where it will be useful to initialize phenotypes, unless I miss something with the intended meaning as currently implemented in CIlib. Regards On Fri, 19 Jun 2009 11:34:39 +0200, Gary Pampara <gpa...@gm...> wrote: > Hi all, > > I'm looking at extracting the initialisation strategies into something more > > generic. Currently, we have initialisation strategies for the velocity > vectors > in Particles. > > The thing is that what about phenotypes within individuals? You may want > them > to be initialised in specific manners (randomized / fixed value etc). > > Would anyone regard this as a valid change? > > Regards, > Gary > > ------------------------------------------------------------------------------ > Crystal Reports - New Free Runtime and 30 Day Trial > Check out the new simplified licensing option that enables unlimited > royalty-free distribution of the report engine for externally facing > server and web deployment. > http://p.sf.net/sfu/businessobjects > _______________________________________________ > cilib-devel mailing list > cil...@li... > https://lists.sourceforge.net/lists/listinfo/cilib-devel |
From: Gary P. <gpa...@gm...> - 2009-06-19 09:34:51
|
Hi all, I'm looking at extracting the initialisation strategies into something more generic. Currently, we have initialisation strategies for the velocity vectors in Particles. The thing is that what about phenotypes within individuals? You may want them to be initialised in specific manners (randomized / fixed value etc). Would anyone regard this as a valid change? Regards, Gary |
From: Gary P. <gpa...@gm...> - 2009-06-12 05:10:06
|
Any randomization should be applied by providing the RNG to use. The additional benefit is that static random state has now been removed resulting in simplified testing. Signed-off-by: Gary Pampara <gpa...@gm...> --- .../cilib/bioinf/rnaprediction/RNAParticle.java | 2 +- .../net/sourceforge/cilib/boa/bee/AbstractBee.java | 4 +- .../java/net/sourceforge/cilib/ec/Individual.java | 10 +++++-- .../java/net/sourceforge/cilib/entity/Harmony.java | 7 +++- .../boundaryconstraint/BoundaryConstraint.java | 1 + .../PerElementReinitialisation.java | 11 +++++++- .../RandomBoundaryConstraint.java | 11 +++++++- .../NeighbourhoodBestSentriesReactionStrategy.java | 8 ++++- .../PartialReinitialisationResponseStrategy.java | 5 +-- .../ReinitializationReactionStrategy.java | 3 +- .../RandomizedPositionInitialisationStrategy.java | 12 +++++++- .../type/types/{container => }/Randomizable.java | 12 ++++---- .../net/sourceforge/cilib/type/types/TypeUtil.java | 28 +------------------- .../cilib/type/types/container/TypeList.java | 18 ++++++++++++ .../cilib/type/types/container/Vector.java | 19 ++++--------- .../java/net/sourceforge/cilib/pso/PSOTest.java | 5 +-- .../sourceforge/cilib/type/types/TypeUtilTest.java | 28 ++++++++++---------- 17 files changed, 103 insertions(+), 81 deletions(-) rename src/main/java/net/sourceforge/cilib/type/types/{container => }/Randomizable.java (73%) diff --git a/src/main/java/net/sourceforge/cilib/bioinf/rnaprediction/RNAParticle.java b/src/main/java/net/sourceforge/cilib/bioinf/rnaprediction/RNAParticle.java index f91a85c..80d2c20 100644 --- a/src/main/java/net/sourceforge/cilib/bioinf/rnaprediction/RNAParticle.java +++ b/src/main/java/net/sourceforge/cilib/bioinf/rnaprediction/RNAParticle.java @@ -28,8 +28,8 @@ import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.problem.OptimisationProblem; import net.sourceforge.cilib.pso.particle.AbstractParticle; import net.sourceforge.cilib.type.types.Type; +import net.sourceforge.cilib.type.types.container.StructuredType; import net.sourceforge.cilib.type.types.container.TypeList; -import net.sourceforge.cilib.type.types.container.Vector; /** * @author marais diff --git a/src/main/java/net/sourceforge/cilib/boa/bee/AbstractBee.java b/src/main/java/net/sourceforge/cilib/boa/bee/AbstractBee.java index 0623861..688823e 100644 --- a/src/main/java/net/sourceforge/cilib/boa/bee/AbstractBee.java +++ b/src/main/java/net/sourceforge/cilib/boa/bee/AbstractBee.java @@ -29,6 +29,7 @@ import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.entity.operators.selection.RandomSelectionStrategy; import net.sourceforge.cilib.entity.operators.selection.SelectionStrategy; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.problem.OptimisationProblem; import net.sourceforge.cilib.type.types.container.Vector; @@ -136,8 +137,7 @@ public abstract class AbstractBee extends AbstractEntity implements HoneyBee { @Override public void initialise(OptimisationProblem problem) { this.setCandidateSolution(problem.getDomain().getBuiltRepresenation().getClone()); - TypeUtil.randomize(this.getCandidateSolution()); -// this.getCandidateSolution().randomise(); + this.getCandidateSolution().randomize(new MersenneTwister()); this.dimension = this.getCandidateSolution().size(); this.getProperties().put(EntityType.FITNESS, InferiorFitness.instance()); diff --git a/src/main/java/net/sourceforge/cilib/ec/Individual.java b/src/main/java/net/sourceforge/cilib/ec/Individual.java index af063c1..060ca12 100644 --- a/src/main/java/net/sourceforge/cilib/ec/Individual.java +++ b/src/main/java/net/sourceforge/cilib/ec/Individual.java @@ -24,7 +24,7 @@ package net.sourceforge.cilib.ec; import net.sourceforge.cilib.entity.AbstractEntity; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.problem.OptimisationProblem; import net.sourceforge.cilib.type.types.Type; @@ -108,13 +108,17 @@ public class Individual extends AbstractEntity { public void initialise(OptimisationProblem problem) { // ID initialization is done in the clone method... // which is always enforced due to the semantics of the performInitialisation methods + MersenneTwister random = new MersenneTwister(); this.setCandidateSolution(problem.getDomain().getBuiltRepresenation().getClone()); - TypeUtil.randomize(this.getCandidateSolution()); + this.getCandidateSolution().randomize(random); +// TypeUtil.randomize(this.getCandidateSolution()); if (problem.getBehaviouralDomain().getBuiltRepresenation() != null) { this.getProperties().put(EntityType.Individual.PHENOTYPES, problem.getBehaviouralDomain().getBuiltRepresenation().getClone()); - TypeUtil.randomize((StructuredType) this.getProperties().get(EntityType.Individual.PHENOTYPES)); + StructuredType phenotypes = (StructuredType) this.getProperties().get(EntityType.Individual.PHENOTYPES); + phenotypes.randomize(random); +// TypeUtil.randomize(); } this.dimension = this.getCandidateSolution().size(); diff --git a/src/main/java/net/sourceforge/cilib/entity/Harmony.java b/src/main/java/net/sourceforge/cilib/entity/Harmony.java index f3122e2..fbddccc 100644 --- a/src/main/java/net/sourceforge/cilib/entity/Harmony.java +++ b/src/main/java/net/sourceforge/cilib/entity/Harmony.java @@ -21,6 +21,7 @@ */ package net.sourceforge.cilib.entity; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.type.types.TypeUtil; import net.sourceforge.cilib.problem.Fitness; import net.sourceforge.cilib.problem.InferiorFitness; @@ -116,7 +117,8 @@ public class Harmony extends AbstractEntity { @Override public void initialise(OptimisationProblem problem) { StructuredType harmony = problem.getDomain().getBuiltRepresenation().getClone(); - TypeUtil.randomize(harmony); +// TypeUtil.randomize(harmony); + harmony.randomize(new MersenneTwister()); setCandidateSolution(harmony); this.getProperties().put(EntityType.FITNESS, InferiorFitness.instance()); @@ -127,7 +129,8 @@ public class Harmony extends AbstractEntity { */ @Override public void reinitialise() { - TypeUtil.randomize(getCandidateSolution()); +// TypeUtil.randomize(getCandidateSolution()); + throw new UnsupportedOperationException("Not implemetned yet."); } } diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/BoundaryConstraint.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/BoundaryConstraint.java index 7d4adf9..310bd1b 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/BoundaryConstraint.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/BoundaryConstraint.java @@ -34,6 +34,7 @@ public interface BoundaryConstraint extends Cloneable { /** * {@inheritDoc} */ + @Override public BoundaryConstraint getClone(); /** diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/PerElementReinitialisation.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/PerElementReinitialisation.java index 13a300e..9d223e1 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/PerElementReinitialisation.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/PerElementReinitialisation.java @@ -22,6 +22,8 @@ package net.sourceforge.cilib.problem.boundaryconstraint; import net.sourceforge.cilib.entity.Entity; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.math.random.generator.Random; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.Type; import net.sourceforge.cilib.type.types.TypeUtil; @@ -37,6 +39,12 @@ import net.sourceforge.cilib.type.types.container.Vector; public class PerElementReinitialisation extends ReinitialisationBoundary { private static final long serialVersionUID = 7080824227269710787L; + private Random random; + + public PerElementReinitialisation() { + this.random = new MersenneTwister(); + } + /** * {@inheritDoc} */ @@ -68,7 +76,8 @@ public class PerElementReinitialisation extends ReinitialisationBoundary { private void enforce(Numeric numeric) { if (!TypeUtil.isInsideBounds(numeric)) { - TypeUtil.randomize(numeric); + numeric.randomize(random); +// TypeUtil.randomize(numeric); } } } diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/RandomBoundaryConstraint.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/RandomBoundaryConstraint.java index 6ff98ee..5df0917 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/RandomBoundaryConstraint.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/RandomBoundaryConstraint.java @@ -24,6 +24,8 @@ package net.sourceforge.cilib.problem.boundaryconstraint; import java.util.Iterator; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.math.random.generator.Random; import net.sourceforge.cilib.type.types.Bounds; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.TypeUtil; @@ -53,6 +55,12 @@ import net.sourceforge.cilib.type.types.container.StructuredType; public class RandomBoundaryConstraint implements BoundaryConstraint { private static final long serialVersionUID = -4090871319456989303L; + private Random random; + + public RandomBoundaryConstraint() { + this.random = new MersenneTwister(); + } + /** * {@inheritDoc} */ @@ -96,7 +104,8 @@ public class RandomBoundaryConstraint implements BoundaryConstraint { */ private void constrain(Numeric position, Numeric velocity) { Numeric previousPosition = position.getClone(); - TypeUtil.randomize(position); +// TypeUtil.randomize(position); + position.randomize(random); velocity.set(position.getReal() - previousPosition.getReal()); } } diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/NeighbourhoodBestSentriesReactionStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/NeighbourhoodBestSentriesReactionStrategy.java index 2c7d2b0..e294579 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/NeighbourhoodBestSentriesReactionStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/NeighbourhoodBestSentriesReactionStrategy.java @@ -25,7 +25,8 @@ package net.sourceforge.cilib.pso.dynamic.responsestrategies; import net.sourceforge.cilib.algorithm.population.PopulationBasedAlgorithm; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.Topologies; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.math.random.generator.Random; public class NeighbourhoodBestSentriesReactionStrategy<E extends PopulationBasedAlgorithm> extends EnvironmentChangeResponseStrategy<E> { private static final long serialVersionUID = -2142727048293776335L; @@ -45,8 +46,11 @@ public class NeighbourhoodBestSentriesReactionStrategy<E extends PopulationBased @Override public void performReaction(PopulationBasedAlgorithm algorithm) { + Random random = new MersenneTwister(); + for (Entity entity : Topologies.getNeighbourhoodBestEntities(algorithm.getTopology())) - TypeUtil.randomize(entity.getCandidateSolution()); + entity.getCandidateSolution().randomize(random); +// TypeUtil.randomize(entity.getCandidateSolution()); // TODO: What is the influence of reevaluation? // entity.calculateFitness(false); } diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java index e8e00f5..e949bfd 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java @@ -27,8 +27,6 @@ import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.entity.Topology; import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.math.random.generator.Random; -import net.sourceforge.cilib.type.types.Type; -import net.sourceforge.cilib.type.types.TypeUtil; import net.sourceforge.cilib.type.types.container.StructuredType; /** @@ -80,7 +78,8 @@ public class PartialReinitialisationResponseStrategy<E extends PopulationBasedAl // ELSE Particle aParticle = (Particle) topology.get(index); StructuredType position = aParticle.getPosition(); - TypeUtil.randomize(position); +// TypeUtil.randomize(position); + position.randomize(randomiser); used[index] = true; gotParticle = true; } diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/ReinitializationReactionStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/ReinitializationReactionStrategy.java index 66e07be..67ec2e2 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/ReinitializationReactionStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/ReinitializationReactionStrategy.java @@ -87,7 +87,8 @@ public class ReinitializationReactionStrategy<E extends PopulationBasedAlgorithm for (int i = 0; i < reinitializeCount; i++) { int random = randomGenerator.nextInt(entities.size()); Entity entity = entities.get(random); - TypeUtil.randomize(entity.getCandidateSolution()); // entity contents -> current position +// TypeUtil.randomize(entity.getCandidateSolution()); // entity contents -> current position + entity.getCandidateSolution().randomize(randomGenerator); // remove the selected element from the all list preventing it from being selected again entities.remove(random); } diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java index 4e90b18..193d966 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java @@ -23,8 +23,9 @@ package net.sourceforge.cilib.pso.particle.initialisation; import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.math.random.generator.Random; import net.sourceforge.cilib.problem.OptimisationProblem; -import net.sourceforge.cilib.type.types.TypeUtil; /** @@ -40,6 +41,12 @@ public class RandomizedPositionInitialisationStrategy implements PositionInitialisationStrategy { private static final long serialVersionUID = -47429588645761362L; + private Random random; + + public RandomizedPositionInitialisationStrategy() { + this.random = new MersenneTwister(); + } + public RandomizedPositionInitialisationStrategy getClone() { return new RandomizedPositionInitialisationStrategy(); } @@ -47,7 +54,8 @@ public class RandomizedPositionInitialisationStrategy implements public void initialise(Particle particle, OptimisationProblem problem) { particle.setCandidateSolution(problem.getDomain().getBuiltRepresenation().getClone()); // particle.getPosition().randomise(); - TypeUtil.randomize(particle.getPosition()); +// TypeUtil.randomize(particle.getPosition()); + particle.getPosition().randomize(random); particle.getProperties().put(EntityType.Particle.BEST_POSITION, particle.getPosition().getClone()); } diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/Randomizable.java b/src/main/java/net/sourceforge/cilib/type/types/Randomizable.java similarity index 73% rename from src/main/java/net/sourceforge/cilib/type/types/container/Randomizable.java rename to src/main/java/net/sourceforge/cilib/type/types/Randomizable.java index d09a8b3..5f5f9ba 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/Randomizable.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Randomizable.java @@ -19,20 +19,20 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +package net.sourceforge.cilib.type.types; -package net.sourceforge.cilib.type.types.container; +import net.sourceforge.cilib.math.random.generator.Random; /** - * Implementing this interface allows an object to be "randomizable". - * This implies that the object is able to be set into a state that is random. + * * @author gpampara */ public interface Randomizable { /** - * Alter the state of the object in a random manner. - * @return {@code true} if successful, {@code false} otherwise. + * Apply a randomization using the provided {@code Random}. + * @param random The {@code Random} to use for the randomization. */ - public boolean randomize(); + public void randomize(Random random); } diff --git a/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java b/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java index bbff3f8..5ebf946 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java +++ b/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java @@ -23,8 +23,6 @@ package net.sourceforge.cilib.type.types; import java.util.Iterator; import net.sourceforge.cilib.container.visitor.Visitor; -import net.sourceforge.cilib.math.random.generator.MersenneTwister; -import net.sourceforge.cilib.math.random.generator.Random; import net.sourceforge.cilib.type.types.container.StructuredType; /** @@ -37,33 +35,9 @@ public final class TypeUtil { } /** - * Utility method. Change the values within the <code>Type</code>, randomly, based on the - * upper and lower bounds that are defined for that <code>Type</code> - */ - public static void randomize(Randomizable randomizable) { - Random random = new MersenneTwister(); - randomizable.randomize(random); -// if (candidateSolution instanceof StructuredType) { -// StructuredType<?> structuredType = (StructuredType<?>) candidateSolution; -// -// for (Iterator<?> iterator = structuredType.iterator(); iterator.hasNext();) { -// Type type = (Type) iterator.next(); -// randomize(type); -// } -// -// return; -// } -// -// if (candidateSolution instanceof BoundedType) { -// BoundedType boundedType = (BoundedType) candidateSolution; -// boundedType.randomize(); -// return; -// } - } - - /** * Determine if the current type instance is within the defined bounds * of the domain. + * @param candidateSolution * @return {@literal true} if it is in the bounds, {@literal false} otherwise. */ public static boolean isInsideBounds(Type candidateSolution) { diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/TypeList.java b/src/main/java/net/sourceforge/cilib/type/types/container/TypeList.java index a257e95..f13cef7 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/TypeList.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/TypeList.java @@ -26,6 +26,8 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; import net.sourceforge.cilib.container.visitor.Visitor; +import net.sourceforge.cilib.math.random.generator.Random; +import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.Type; /** @@ -265,4 +267,20 @@ public class TypeList extends AbstractList<Type> { visitor.visit(type); } + @Override + public void randomize(Random random) { + for (int i = 0; i < components.size(); i++) { + Type type = components.get(i); + if (type instanceof Numeric) { + Numeric numeric = (Numeric) type; + numeric.randomize(random); + } + + if (type instanceof StructuredType) { + StructuredType structuredType = (StructuredType) type; + structuredType.randomize(random); + } + } + } + } diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java b/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java index b017af7..e0c3e57 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java @@ -27,9 +27,8 @@ import java.util.List; import net.sourceforge.cilib.container.visitor.Visitor; import net.sourceforge.cilib.math.VectorMath; import net.sourceforge.cilib.math.random.generator.Random; -import net.sourceforge.cilib.type.types.Randomizable; -import net.sourceforge.cilib.type.types.TypeUtil; import net.sourceforge.cilib.type.types.Numeric; +import net.sourceforge.cilib.type.types.Randomizable; import net.sourceforge.cilib.type.types.Resetable; /** @@ -314,11 +313,6 @@ public class Vector extends AbstractList<Numeric> implements VectorMath, Resetab return this.components.size(); } - //public void randomize(Random random) { - // for (int i = 0; i < components.size(); i++) { - // TypeUtil.randomize((Randomizable) getType(i)); - // } - /** * Apply the {@code visitor} to all elements contained in this {@code Vector}. * @param visitor The {@code Visitor} to apply. @@ -463,14 +457,13 @@ public class Vector extends AbstractList<Numeric> implements VectorMath, Resetab /** * Randomize all the elements contained within the {@code Vector}. - * @return {@code true} if successful. + * @param random The {@code Random} to use to randomize the {@code Vector}. */ @Override - public boolean randomize() { - for(Numeric numeric : this.components) - numeric.randomize(); - - return true; + public void randomize(Random random) { + for (int i = 0; i < components.size(); i++) { + this.components.get(i).randomize(random); + } } /** diff --git a/src/test/java/net/sourceforge/cilib/pso/PSOTest.java b/src/test/java/net/sourceforge/cilib/pso/PSOTest.java index 1791bdb..e684155 100644 --- a/src/test/java/net/sourceforge/cilib/pso/PSOTest.java +++ b/src/test/java/net/sourceforge/cilib/pso/PSOTest.java @@ -57,7 +57,6 @@ public class PSOTest { */ @Test public void algorithmExecution() { - /* SeedSelectionStrategy seedStrategy = Seeder.getSeederStrategy(); Seeder.setSeederStrategy(new ZeroSeederStrategy()); @@ -72,12 +71,12 @@ public class PSOTest { pso.initialise(); pso.run(); - Assert.assertThat(pso.getBestSolution().getFitness().getValue(), is(311.5875022791459)); +// System.out.println(pso.getBestSolution().getFitness().getValue()); + Assert.assertThat(pso.getBestSolution().getFitness().getValue(), is(400.5332366469983)); } finally { Seeder.setSeederStrategy(seedStrategy); } - */ } } diff --git a/src/test/java/net/sourceforge/cilib/type/types/TypeUtilTest.java b/src/test/java/net/sourceforge/cilib/type/types/TypeUtilTest.java index 53478dc..984b0b1 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/TypeUtilTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/TypeUtilTest.java @@ -36,20 +36,20 @@ public class TypeUtilTest { @Test public void randomizeStructuredType() { - Vector vector = new Vector(30, new Real(-5.0, 5.0)); - Vector original = vector.getClone(); - - TypeUtil.randomize(vector); - - for (Type type : vector) { - Real r = (Real) type; - Assert.assertFalse(Double.compare(0.0, r.getReal()) == 0); - Assert.assertTrue(r.getBounds().getLowerBound() <= r.getReal() && r.getBounds().getUpperBound() >= r.getReal()); - } - - for (int i = 0; i < vector.size(); i++) { - Assert.assertThat(original.getReal(i), is(not(vector.getReal(i)))); - } +// Vector vector = new Vector(30, new Real(-5.0, 5.0)); +// Vector original = vector.getClone(); +// +// TypeUtil.randomize(vector); +// +// for (Type type : vector) { +// Real r = (Real) type; +// Assert.assertFalse(Double.compare(0.0, r.getReal()) == 0); +// Assert.assertTrue(r.getBounds().getLowerBound() <= r.getReal() && r.getBounds().getUpperBound() >= r.getReal()); +// } +// +// for (int i = 0; i < vector.size(); i++) { +// Assert.assertThat(original.getReal(i), is(not(vector.getReal(i)))); +// } } @Test -- 1.6.2.3 |
From: Gary P. <gpa...@gm...> - 2009-06-12 05:10:01
|
The management of static state within MathUtil is not very attractive and as a result, causes many issues with unit tests. The state has been removed and modifications to remaining classes have been made. Added the Randomizable interface to add randomizable support to StructuredTypes and Numerics. The randomization process now requires a provided random number generator to be provided. Signed-off-by: Gary Pampara <gpa...@gm...> --- .../cilib/bioinf/rnaprediction/RNAParticle.java | 6 ++-- .../net/sourceforge/cilib/boa/bee/ExplorerBee.java | 2 +- .../RandomCentroidsInitialisationStrategy.java | 3 +- .../java/net/sourceforge/cilib/ec/Individual.java | 2 +- .../net/sourceforge/cilib/entity/Particle.java | 7 ++-- .../java/net/sourceforge/cilib/math/MathUtil.java | 14 +++---- .../NearestBoundaryConstraint.java | 11 ++++-- .../PartialReinitialisationResponseStrategy.java | 3 +- .../cilib/pso/particle/AbstractParticle.java | 8 ++-- .../cilib/pso/particle/ParticleDecorator.java | 6 ++-- .../RandomInitialVelocityStrategy.java | 3 +- .../java/net/sourceforge/cilib/type/types/Bit.java | 5 ++- .../sourceforge/cilib/type/types/BoundedType.java | 2 - .../java/net/sourceforge/cilib/type/types/Int.java | 10 ++---- .../net/sourceforge/cilib/type/types/Long.java | 6 ++-- .../net/sourceforge/cilib/type/types/Numeric.java | 2 +- .../net/sourceforge/cilib/type/types/Real.java | 13 ++----- .../net/sourceforge/cilib/type/types/TypeUtil.java | 38 +++++++++++--------- .../cilib/type/types/container/AbstractTree.java | 6 +++ .../cilib/type/types/container/Set.java | 6 +++ .../cilib/type/types/container/StandardGraph.java | 6 +++ .../cilib/type/types/container/StructuredType.java | 3 +- .../cilib/type/types/container/Vector.java | 8 ++++ .../java/net/sourceforge/cilib/boa/ABCTest.java | 2 +- .../net/sourceforge/cilib/type/types/BitTest.java | 3 +- .../net/sourceforge/cilib/type/types/IntTest.java | 6 +++- .../net/sourceforge/cilib/type/types/RealTest.java | 6 +++- .../cilib/type/types/container/VectorTest.java | 3 +- 28 files changed, 113 insertions(+), 77 deletions(-) diff --git a/src/main/java/net/sourceforge/cilib/bioinf/rnaprediction/RNAParticle.java b/src/main/java/net/sourceforge/cilib/bioinf/rnaprediction/RNAParticle.java index 2483428..f91a85c 100644 --- a/src/main/java/net/sourceforge/cilib/bioinf/rnaprediction/RNAParticle.java +++ b/src/main/java/net/sourceforge/cilib/bioinf/rnaprediction/RNAParticle.java @@ -180,14 +180,14 @@ public class RNAParticle extends AbstractParticle { /** * {@inheritDoc} */ - public Type getPosition() { + public StructuredType getPosition() { return position; } /** * {@inheritDoc} */ - public Type getBestPosition() { + public StructuredType getBestPosition() { return bestPosition; } @@ -202,7 +202,7 @@ public class RNAParticle extends AbstractParticle { /** * {@inheritDoc} */ - public Type getVelocity() { + public StructuredType getVelocity() { return velocity; } diff --git a/src/main/java/net/sourceforge/cilib/boa/bee/ExplorerBee.java b/src/main/java/net/sourceforge/cilib/boa/bee/ExplorerBee.java index 3d9ff53..62826ee 100644 --- a/src/main/java/net/sourceforge/cilib/boa/bee/ExplorerBee.java +++ b/src/main/java/net/sourceforge/cilib/boa/bee/ExplorerBee.java @@ -105,7 +105,7 @@ public class ExplorerBee implements Cloneable { numberOfUpdates++; Vector newPosition = position.getClone(); - newPosition.randomize(); + newPosition.randomize(new MersenneTwister()); return newPosition; } diff --git a/src/main/java/net/sourceforge/cilib/clustering/kmeans/RandomCentroidsInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/clustering/kmeans/RandomCentroidsInitialisationStrategy.java index f72d3cc..4cd3170 100644 --- a/src/main/java/net/sourceforge/cilib/clustering/kmeans/RandomCentroidsInitialisationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/clustering/kmeans/RandomCentroidsInitialisationStrategy.java @@ -21,6 +21,7 @@ */ package net.sourceforge.cilib.clustering.kmeans; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.problem.ClusteringProblem; import net.sourceforge.cilib.problem.dataset.ClusterableDataSet; import net.sourceforge.cilib.type.types.container.Vector; @@ -53,7 +54,7 @@ public class RandomCentroidsInitialisationStrategy implements CentroidsInitialis public Vector initialise(ClusteringProblem problem, ClusterableDataSet dataset) { Vector centroids = (Vector) problem.getDomain().getBuiltRepresenation().getClone(); - centroids.randomize(); + centroids.randomize(new MersenneTwister()); return centroids; } } diff --git a/src/main/java/net/sourceforge/cilib/ec/Individual.java b/src/main/java/net/sourceforge/cilib/ec/Individual.java index 5557fbe..af063c1 100644 --- a/src/main/java/net/sourceforge/cilib/ec/Individual.java +++ b/src/main/java/net/sourceforge/cilib/ec/Individual.java @@ -114,7 +114,7 @@ public class Individual extends AbstractEntity { if (problem.getBehaviouralDomain().getBuiltRepresenation() != null) { this.getProperties().put(EntityType.Individual.PHENOTYPES, problem.getBehaviouralDomain().getBuiltRepresenation().getClone()); - TypeUtil.randomize(this.getProperties().get(EntityType.Individual.PHENOTYPES)); + TypeUtil.randomize((StructuredType) this.getProperties().get(EntityType.Individual.PHENOTYPES)); } this.dimension = this.getCandidateSolution().size(); diff --git a/src/main/java/net/sourceforge/cilib/entity/Particle.java b/src/main/java/net/sourceforge/cilib/entity/Particle.java index 51998fc..0881e63 100644 --- a/src/main/java/net/sourceforge/cilib/entity/Particle.java +++ b/src/main/java/net/sourceforge/cilib/entity/Particle.java @@ -27,6 +27,7 @@ import net.sourceforge.cilib.pso.particle.initialisation.VelocityInitialisationS import net.sourceforge.cilib.pso.positionupdatestrategies.PositionUpdateStrategy; import net.sourceforge.cilib.pso.velocityupdatestrategies.VelocityUpdateStrategy; import net.sourceforge.cilib.type.types.Type; +import net.sourceforge.cilib.type.types.container.StructuredType; /** * Definition of a particle. @@ -42,19 +43,19 @@ public interface Particle extends Entity, SocialEntity { * Get the current position of the {@linkplain Particle}. * @return The {@linkplain Type} representing the position. */ - public Type getPosition(); + public StructuredType getPosition(); /** * Get the best position of the {@linkplain Particle}. * @return The {@linkplain Type} representing the best position. */ - public Type getBestPosition(); + public StructuredType getBestPosition(); /** * Get the current velocity of the {@linkplain Particle}. * @return The {@linkplain Type} representing the velocity. */ - public Type getVelocity(); + public StructuredType getVelocity(); /** * Get the current best particle within the {@linkplain Particle}s neighbourhood. diff --git a/src/main/java/net/sourceforge/cilib/math/MathUtil.java b/src/main/java/net/sourceforge/cilib/math/MathUtil.java index 71a9216..4a787f8 100644 --- a/src/main/java/net/sourceforge/cilib/math/MathUtil.java +++ b/src/main/java/net/sourceforge/cilib/math/MathUtil.java @@ -37,8 +37,6 @@ public final class MathUtil { public static double EPSILON = 1.0E-15d; - private static Random random; - private MathUtil() { } @@ -102,12 +100,12 @@ public final class MathUtil { * method. * @return A uniform random number in the range [0,1). */ - public static synchronized double random() { - if (random == null) - random = new MersenneTwister(); - - return random.nextDouble(); - } +// public static synchronized double random() { +// if (random == null) +// random = new MersenneTwister(); +// +// return random.nextDouble(); +// } /** * Determine if a "flip" would occur given the provided probability value. diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/NearestBoundaryConstraint.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/NearestBoundaryConstraint.java index 5a81997..36bdc62 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/NearestBoundaryConstraint.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/NearestBoundaryConstraint.java @@ -28,6 +28,7 @@ import net.sourceforge.cilib.controlparameter.ControlParameter; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.random.RandomNumber; import net.sourceforge.cilib.type.types.Bounds; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.container.StructuredType; @@ -57,6 +58,7 @@ public class NearestBoundaryConstraint implements BoundaryConstraint { private static final long serialVersionUID = 3177150919194273857L; private ControlParameter turbulenceProbability; + private RandomNumber random; /** * Create an instance of the constraint with a turbulence probability @@ -64,6 +66,7 @@ public class NearestBoundaryConstraint implements BoundaryConstraint { */ public NearestBoundaryConstraint() { turbulenceProbability = new ConstantControlParameter(0.0); + this.random = new RandomNumber(); } /** @@ -106,15 +109,15 @@ public class NearestBoundaryConstraint implements BoundaryConstraint { if (Double.compare(position.getReal(), bounds.getLowerBound()) < 0) { position.set(bounds.getLowerBound()); // lower boundary is inclusive - if (MathUtil.random() < turbulenceProbability.getParameter()) { - position.set(position.getReal() + MathUtil.random() * bounds.getRange()); + if (random.getUniform() < turbulenceProbability.getParameter()) { + position.set(position.getReal() + random.getUniform() * bounds.getRange()); } velocity.set(position.getReal() - previousPosition); } else if (Double.compare(position.getReal(), bounds.getUpperBound()) > 0) { position.set(bounds.getUpperBound() - MathUtil.EPSILON); // upper boundary is exclusive - if (MathUtil.random() < turbulenceProbability.getParameter()) { - position.set(position.getReal() - MathUtil.random() * bounds.getRange()); + if (random.getUniform() < turbulenceProbability.getParameter()) { + position.set(position.getReal() - random.getUniform() * bounds.getRange()); } velocity.set(position.getReal() - previousPosition); } diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java index f40e7cb..e8e00f5 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java @@ -29,6 +29,7 @@ import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.math.random.generator.Random; import net.sourceforge.cilib.type.types.Type; import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.container.StructuredType; /** * @author Anna Rakitianskaia @@ -78,7 +79,7 @@ public class PartialReinitialisationResponseStrategy<E extends PopulationBasedAl if(used[index]) continue; // ELSE Particle aParticle = (Particle) topology.get(index); - Type position = aParticle.getPosition(); + StructuredType position = aParticle.getPosition(); TypeUtil.randomize(position); used[index] = true; gotParticle = true; diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java b/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java index ae8675f..1ef20ac 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/AbstractParticle.java @@ -37,7 +37,7 @@ import net.sourceforge.cilib.pso.positionupdatestrategies.PositionUpdateStrategy import net.sourceforge.cilib.pso.positionupdatestrategies.StandardPositionUpdateStrategy; import net.sourceforge.cilib.pso.velocityupdatestrategies.StandardVelocityUpdate; import net.sourceforge.cilib.pso.velocityupdatestrategies.VelocityUpdateStrategy; -import net.sourceforge.cilib.type.types.Type; +import net.sourceforge.cilib.type.types.container.StructuredType; /** * This class defines the common behaviour available for all {@linkplain Particle} @@ -155,21 +155,21 @@ public abstract class AbstractParticle extends AbstractEntity implements Particl * @return A <tt>Type</tt> representing the <tt>Particle</tt>'s position. */ @Override - public abstract Type getPosition(); + public abstract StructuredType getPosition(); /** * Get the best position of the <tt>Particle</tt>. * @return A <tt>Type</tt> representng the <tt>Particle</tt>'s best position. */ @Override - public abstract Type getBestPosition(); + public abstract StructuredType getBestPosition(); /** * Get the velocity representation of the <tt>Particle</tt>. * @return A <tt>Type</tt> representing the <tt>Particle</tt>'s velocity. */ @Override - public abstract Type getVelocity(); + public abstract StructuredType getVelocity(); /** * Set the neighbourhood best particle for the current Particle based on the diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/ParticleDecorator.java b/src/main/java/net/sourceforge/cilib/pso/particle/ParticleDecorator.java index 7abead8..a7f8033 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/ParticleDecorator.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/ParticleDecorator.java @@ -83,7 +83,7 @@ public abstract class ParticleDecorator extends AbstractParticle { return target.getBestFitness(); } - public Type getBestPosition() { + public StructuredType getBestPosition() { return target.getBestPosition(); } @@ -103,11 +103,11 @@ public abstract class ParticleDecorator extends AbstractParticle { return target.getNeighbourhoodBest(); } - public Type getPosition() { + public StructuredType getPosition() { return target.getPosition(); } - public Type getVelocity() { + public StructuredType getVelocity() { return target.getVelocity(); } diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomInitialVelocityStrategy.java b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomInitialVelocityStrategy.java index 6299486..4ffd56c 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomInitialVelocityStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomInitialVelocityStrategy.java @@ -22,6 +22,7 @@ package net.sourceforge.cilib.pso.particle.initialisation; import net.sourceforge.cilib.entity.Particle; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.type.types.container.Vector; /** @@ -45,7 +46,7 @@ public class RandomInitialVelocityStrategy implements VelocityInitialisationStra public void initialise(Particle particle) { Vector velocity = (Vector) particle.getVelocity(); - velocity.randomize(); + velocity.randomize(new MersenneTwister()); } } diff --git a/src/main/java/net/sourceforge/cilib/type/types/Bit.java b/src/main/java/net/sourceforge/cilib/type/types/Bit.java index df6ad1c..1d0a5c9 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Bit.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Bit.java @@ -26,6 +26,7 @@ import java.io.ObjectInput; import java.io.ObjectOutput; import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.math.random.generator.Random; /** @@ -242,8 +243,8 @@ public class Bit extends Numeric { /** * Randomly choose a new valid for the <code>Bit</code> object. */ - public void randomize() { - this.state = new MersenneTwister().nextBoolean(); + public void randomize(Random random) { + this.state = random.nextBoolean(); } /** diff --git a/src/main/java/net/sourceforge/cilib/type/types/BoundedType.java b/src/main/java/net/sourceforge/cilib/type/types/BoundedType.java index 6448f7c..da6ca0e 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/BoundedType.java +++ b/src/main/java/net/sourceforge/cilib/type/types/BoundedType.java @@ -43,6 +43,4 @@ public interface BoundedType { public void setBounds(double lower, double upper); - public void randomize(); - } diff --git a/src/main/java/net/sourceforge/cilib/type/types/Int.java b/src/main/java/net/sourceforge/cilib/type/types/Int.java index 2b411ab..90ee89c 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Int.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Int.java @@ -26,6 +26,7 @@ import java.io.ObjectInput; import java.io.ObjectOutput; import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.random.generator.Random; /** @@ -34,10 +35,6 @@ import net.sourceforge.cilib.math.MathUtil; * */ public class Int extends Numeric { - - /** - * - */ private static final long serialVersionUID = 271271478995857543L; private int value; @@ -55,7 +52,6 @@ public class Int extends Numeric { * @param upper The upper bound. */ public Int(int lower, int upper) { - value = Double.valueOf(MathUtil.random()*(upper-lower)).intValue() + lower; this.setBounds(BoundsFactory.create(lower, upper)); } @@ -222,8 +218,8 @@ public class Int extends Numeric { /** * {@inheritDoc} */ - public void randomize() { - double tmp = MathUtil.random()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); + public void randomize(Random random) { + double tmp = random.nextDouble()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); this.value = Double.valueOf(tmp).intValue(); } diff --git a/src/main/java/net/sourceforge/cilib/type/types/Long.java b/src/main/java/net/sourceforge/cilib/type/types/Long.java index 5fede48..ce54da5 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Long.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Long.java @@ -26,6 +26,7 @@ import java.io.ObjectInput; import java.io.ObjectOutput; import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.random.generator.Random; /** * * @author leo @@ -50,7 +51,6 @@ public class Long extends Numeric { * @param upper The upper bound. */ public Long(long lower, long upper) { - value = Double.valueOf(MathUtil.random()*(upper-lower)).longValue() + lower; this.setBounds(BoundsFactory.create(lower, upper)); } @@ -224,8 +224,8 @@ public class Long extends Numeric { /** * {@inheritDoc} */ - public void randomize() { - double tmp = MathUtil.random()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); + public void randomize(Random random) { + double tmp = random.nextDouble()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); this.value = Double.valueOf(tmp).intValue(); } diff --git a/src/main/java/net/sourceforge/cilib/type/types/Numeric.java b/src/main/java/net/sourceforge/cilib/type/types/Numeric.java index 0508b74..c84941d 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Numeric.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Numeric.java @@ -26,7 +26,7 @@ package net.sourceforge.cilib.type.types; * * @author Gary Pampara */ -public abstract class Numeric implements Type, BoundedType, Resetable, Comparable<Numeric> { +public abstract class Numeric implements Type, BoundedType, Resetable, Comparable<Numeric>, Randomizable { private static final long serialVersionUID = 3795529161693499589L; private Bounds bounds; diff --git a/src/main/java/net/sourceforge/cilib/type/types/Real.java b/src/main/java/net/sourceforge/cilib/type/types/Real.java index c5a4f81..309b6e4 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Real.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Real.java @@ -25,7 +25,7 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.random.generator.Random; /** @@ -49,8 +49,7 @@ public class Real extends Numeric { */ public Real(double value) { this.value = value; - Bounds bounds = BoundsFactory.create(-Double.MAX_VALUE, Double.MAX_VALUE); - this.setBounds(bounds); + this.setBounds(BoundsFactory.create(-Double.MAX_VALUE, Double.MAX_VALUE)); } @@ -60,10 +59,6 @@ public class Real extends Numeric { * @param upper The upper boundary for the random number. */ public Real(double lower, double upper) { - double bottom = (lower == Double.NEGATIVE_INFINITY) ? -Double.MAX_VALUE : lower; - double top = (upper == Double.POSITIVE_INFINITY) ? Double.MAX_VALUE : upper; - value = (top-bottom)*MathUtil.random() + bottom; - this.setBounds(BoundsFactory.create(lower, upper)); } @@ -226,8 +221,8 @@ public class Real extends Numeric { /** * Re-randomize the <code>Real</code> object based on the upper and lower bounds. */ - public void randomize() { - this.value = (getBounds().getUpperBound()-getBounds().getLowerBound())*MathUtil.random() + getBounds().getLowerBound(); + public void randomize(Random random) { + this.value = random.nextDouble()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); } diff --git a/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java b/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java index 2b62a7f..bbff3f8 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java +++ b/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java @@ -23,6 +23,8 @@ package net.sourceforge.cilib.type.types; import java.util.Iterator; import net.sourceforge.cilib.container.visitor.Visitor; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; +import net.sourceforge.cilib.math.random.generator.Random; import net.sourceforge.cilib.type.types.container.StructuredType; /** @@ -38,23 +40,25 @@ public final class TypeUtil { * Utility method. Change the values within the <code>Type</code>, randomly, based on the * upper and lower bounds that are defined for that <code>Type</code> */ - public static void randomize(Type candidateSolution) { - if (candidateSolution instanceof StructuredType) { - StructuredType<?> structuredType = (StructuredType<?>) candidateSolution; - - for (Iterator<?> iterator = structuredType.iterator(); iterator.hasNext();) { - Type type = (Type) iterator.next(); - randomize(type); - } - - return; - } - - if (candidateSolution instanceof BoundedType) { - BoundedType boundedType = (BoundedType) candidateSolution; - boundedType.randomize(); - return; - } + public static void randomize(Randomizable randomizable) { + Random random = new MersenneTwister(); + randomizable.randomize(random); +// if (candidateSolution instanceof StructuredType) { +// StructuredType<?> structuredType = (StructuredType<?>) candidateSolution; +// +// for (Iterator<?> iterator = structuredType.iterator(); iterator.hasNext();) { +// Type type = (Type) iterator.next(); +// randomize(type); +// } +// +// return; +// } +// +// if (candidateSolution instanceof BoundedType) { +// BoundedType boundedType = (BoundedType) candidateSolution; +// boundedType.randomize(); +// return; +// } } /** diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/AbstractTree.java b/src/main/java/net/sourceforge/cilib/type/types/container/AbstractTree.java index 90fa084..9669232 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/AbstractTree.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/AbstractTree.java @@ -29,6 +29,7 @@ import java.util.Stack; import net.sourceforge.cilib.container.visitor.PreOrderVisitorDecorator; import net.sourceforge.cilib.container.visitor.PrePostVisitor; import net.sourceforge.cilib.container.visitor.Visitor; +import net.sourceforge.cilib.math.random.generator.Random; import net.sourceforge.cilib.util.Cloneable; /** @@ -164,6 +165,11 @@ public abstract class AbstractTree<E extends Cloneable & Comparable<? super E>> return buffer.toString(); } + @Override + public void randomize(Random random) { + throw new UnsupportedOperationException("Not supported yet."); + } + /** * {@linkplain PrePostVisitor} to simply print {@linkplain Tree} instances out * in a flaw textual representation. diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/Set.java b/src/main/java/net/sourceforge/cilib/type/types/container/Set.java index a534b09..89fd729 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/Set.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/Set.java @@ -26,6 +26,7 @@ import java.util.HashSet; import java.util.Iterator; import net.sourceforge.cilib.container.visitor.Visitor; +import net.sourceforge.cilib.math.random.generator.Random; /** @@ -243,4 +244,9 @@ public class Set<E> implements StructuredType<E> { return false; } + @Override + public void randomize(Random random) { + throw new UnsupportedOperationException("Not supported yet."); + } + } diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/StandardGraph.java b/src/main/java/net/sourceforge/cilib/type/types/container/StandardGraph.java index 228157a..30a23a0 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/StandardGraph.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/StandardGraph.java @@ -34,6 +34,7 @@ import java.util.Set; import net.sourceforge.cilib.container.Pair; import net.sourceforge.cilib.container.visitor.Visitor; +import net.sourceforge.cilib.math.random.generator.Random; /** * TODO: Complete this javadoc. @@ -359,6 +360,11 @@ public class StandardGraph<E extends Comparable<E>> implements Graph<E> { return edgeSet; } + @Override + public void randomize(Random random) { + throw new UnsupportedOperationException("Not supported yet."); + } + /** * Class to represent the element, cost and weight associated to the connection between diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/StructuredType.java b/src/main/java/net/sourceforge/cilib/type/types/container/StructuredType.java index c63fec5..ad7158d 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/StructuredType.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/StructuredType.java @@ -24,6 +24,7 @@ package net.sourceforge.cilib.type.types.container; import java.util.Iterator; import net.sourceforge.cilib.container.visitor.Visitor; +import net.sourceforge.cilib.type.types.Randomizable; import net.sourceforge.cilib.type.types.Type; /** @@ -31,7 +32,7 @@ import net.sourceforge.cilib.type.types.Type; * * @param <E> the type of object the {@linkplain Structure} may contain. */ -public interface StructuredType<E> extends Iterable<E>, Type { +public interface StructuredType<E> extends Iterable<E>, Type, Randomizable { @Override public StructuredType getClone(); diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java b/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java index 22dc036..b017af7 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java @@ -26,6 +26,9 @@ import java.util.Iterator; import java.util.List; import net.sourceforge.cilib.container.visitor.Visitor; import net.sourceforge.cilib.math.VectorMath; +import net.sourceforge.cilib.math.random.generator.Random; +import net.sourceforge.cilib.type.types.Randomizable; +import net.sourceforge.cilib.type.types.TypeUtil; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.Resetable; @@ -311,6 +314,11 @@ public class Vector extends AbstractList<Numeric> implements VectorMath, Resetab return this.components.size(); } + //public void randomize(Random random) { + // for (int i = 0; i < components.size(); i++) { + // TypeUtil.randomize((Randomizable) getType(i)); + // } + /** * Apply the {@code visitor} to all elements contained in this {@code Vector}. * @param visitor The {@code Visitor} to apply. diff --git a/src/test/java/net/sourceforge/cilib/boa/ABCTest.java b/src/test/java/net/sourceforge/cilib/boa/ABCTest.java index 34fe449..95807f9 100644 --- a/src/test/java/net/sourceforge/cilib/boa/ABCTest.java +++ b/src/test/java/net/sourceforge/cilib/boa/ABCTest.java @@ -69,7 +69,7 @@ public class ABCTest { map.put(bee.getCandidateSolution(), bee.getCandidateSolution()); } - assertEquals(map.size(), 100); + assertEquals(100, map.size()); } } diff --git a/src/test/java/net/sourceforge/cilib/type/types/BitTest.java b/src/test/java/net/sourceforge/cilib/type/types/BitTest.java index 9c945f8..79e789e 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/BitTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/BitTest.java @@ -22,6 +22,7 @@ package net.sourceforge.cilib.type.types; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; @@ -97,7 +98,7 @@ public class BitTest { public void testRandomize() { Bit b1 = new Bit(true); Bit b2 = new Bit(true); - b2.randomize(); + b2.randomize(new MersenneTwister()); if (b2.getBit()) assertTrue(b1.getBit() == b2.getBit()); diff --git a/src/test/java/net/sourceforge/cilib/type/types/IntTest.java b/src/test/java/net/sourceforge/cilib/type/types/IntTest.java index 379a6a8..2df222f 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/IntTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/IntTest.java @@ -22,6 +22,7 @@ package net.sourceforge.cilib.type.types; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; @@ -66,6 +67,9 @@ public class IntTest { public void testCompareTo() { Int i1 = new Int(0, 30); Int i2 = new Int(-30, 0); + + i1.setInt(15); + i2.setInt(-15); assertEquals(0, i1.compareTo(i1)); assertEquals(0, i2.compareTo(i2)); @@ -79,7 +83,7 @@ public class IntTest { Int i2 = i1.getClone(); assertTrue(i1.getInt() == i2.getInt()); - i1.randomize(); + i1.randomize(new MersenneTwister()); assertTrue(i1.getInt() != i2.getInt()); } diff --git a/src/test/java/net/sourceforge/cilib/type/types/RealTest.java b/src/test/java/net/sourceforge/cilib/type/types/RealTest.java index c1ecd02..49b2324 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/RealTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/RealTest.java @@ -22,6 +22,7 @@ package net.sourceforge.cilib.type.types; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotSame; @@ -76,6 +77,9 @@ public class RealTest { public void testCompareTo() { Real r1 = new Real(0.0, 30.0); Real r2 = new Real(-30.0, 0.0); + + r1.setReal(15.0); + r2.setReal(-15.0); assertEquals(0, r1.compareTo(r1)); assertEquals(0, r2.compareTo(r2)); @@ -102,7 +106,7 @@ public class RealTest { Real r2 = r1.getClone(); assertTrue(r1.getReal() == r2.getReal()); - r1.randomize(); + r1.randomize(new MersenneTwister()); assertTrue(r1.getReal() != r2.getReal()); } diff --git a/src/test/java/net/sourceforge/cilib/type/types/container/VectorTest.java b/src/test/java/net/sourceforge/cilib/type/types/container/VectorTest.java index 86ef5d9..9acab26 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/container/VectorTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/container/VectorTest.java @@ -22,6 +22,7 @@ package net.sourceforge.cilib.type.types.container; +import net.sourceforge.cilib.math.random.generator.MersenneTwister; import static java.lang.Math.sqrt; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -253,7 +254,7 @@ public class VectorTest { m.add(new Real(1.0)); m.add(new Real(2.0)); m.add(new Real(3.0)); - m.randomize(); + m.randomize(new MersenneTwister()); assertFalse(m.getReal(0) == 1.0); assertFalse(m.getReal(1) == 2.0); -- 1.6.2.3 |
From: Gary P. <gpa...@gm...> - 2009-06-11 10:26:05
|
The readability of some of the utility classes was rather annoying. Applied the current new trend of naming: - Types instead of TypeUtil - Stats instead of StatUtil - etc Signed-off-by: Gary Pampara <gpa...@gm...> --- .../net/sourceforge/cilib/boa/bee/AbstractBee.java | 4 +- .../cilib/clustering/kmeans/KMeans.java | 4 +- .../java/net/sourceforge/cilib/ec/Individual.java | 6 ++-- .../java/net/sourceforge/cilib/entity/Harmony.java | 6 ++-- .../cilib/functions/activation/Sigmoid.java | 6 ++-- .../clustering/ParametricClusteringFunction.java | 6 ++-- .../ClusterMeanStrategy.java | 4 +- .../validityindices/HalkidiVazirgiannisIndex.java | 4 +- .../VeenmanReindersBackerIndex.java | 4 +- .../cilib/math/{MathUtil.java => Maths.java} | 4 +- .../cilib/math/{StatUtils.java => Stats.java} | 4 +- .../cilib/math/random/DiscreteRandomNumber.java | 6 ++-- .../cilib/neuralnetwork/generic/Weight.java | 4 +- .../CooperativeOptimisationProblemAdapter.java | 4 +- .../BouncingBoundaryConstraint.java | 4 +- .../ClampingBoundaryConstraint.java | 4 +- .../NearestBoundaryConstraint.java | 12 ++++---- .../PerElementReinitialisation.java | 8 +++--- .../RandomBoundaryConstraint.java | 4 +- .../ReinitialisationBoundary.java | 6 ++-- .../dataset/AssociatedPairDataSetBuilder.java | 10 +++---- .../NeighbourhoodBestSentriesReactionStrategy.java | 4 +- .../PartialReinitialisationResponseStrategy.java | 4 +- .../ReinitializationReactionStrategy.java | 4 +- .../RandomizedPositionInitialisationStrategy.java | 4 +- .../BoundedPersonalBestUpdateStrategy.java | 4 +- .../java/net/sourceforge/cilib/type/types/Int.java | 6 ++-- .../net/sourceforge/cilib/type/types/Long.java | 6 ++-- .../net/sourceforge/cilib/type/types/Real.java | 6 ++-- .../cilib/type/types/{TypeUtil.java => Types.java} | 4 +- .../cilib/type/types/container/AbstractList.java | 6 ++-- .../cilib/type/types/container/Vector.java | 1 + .../cilib/util/{VectorUtils.java => Vectors.java} | 4 +- .../crossover/BlendCrossoverStrategyTest.java | 6 ++-- .../crossover/OnePointCrossoverStrategyTest.java | 6 ++-- .../crossover/UniformCrossoverStrategyTest.java | 6 ++-- .../math/{MathUtilTest.java => MathsTest.java} | 28 ++++++++++---------- .../math/{StatUtilsTest.java => StatsTest.java} | 12 ++++---- .../ClampingBoundaryConstraintTest.java | 4 +- .../cilib/type/StringBasedDomainRegistryTest.java | 10 +++--- .../sourceforge/cilib/type/types/NumericTest.java | 6 ++-- .../cilib/type/types/StringTypeTest.java | 2 +- .../types/{TypeUtilTest.java => TypesTest.java} | 12 ++++---- .../cilib/type/types/container/VectorTest.java | 4 +- .../{VectorUtilsTest.java => VectorsTest.java} | 24 ++++++++-------- 45 files changed, 143 insertions(+), 144 deletions(-) rename src/main/java/net/sourceforge/cilib/math/{MathUtil.java => Maths.java} (98%) rename src/main/java/net/sourceforge/cilib/math/{StatUtils.java => Stats.java} (98%) rename src/main/java/net/sourceforge/cilib/type/types/{TypeUtil.java => Types.java} (99%) rename src/main/java/net/sourceforge/cilib/util/{VectorUtils.java => Vectors.java} (98%) rename src/test/java/net/sourceforge/cilib/math/{MathUtilTest.java => MathsTest.java} (66%) rename src/test/java/net/sourceforge/cilib/math/{StatUtilsTest.java => StatsTest.java} (89%) rename src/test/java/net/sourceforge/cilib/type/types/{TypeUtilTest.java => TypesTest.java} (87%) rename src/test/java/net/sourceforge/cilib/util/{VectorUtilsTest.java => VectorsTest.java} (84%) diff --git a/src/main/java/net/sourceforge/cilib/boa/bee/AbstractBee.java b/src/main/java/net/sourceforge/cilib/boa/bee/AbstractBee.java index 0623861..5627183 100644 --- a/src/main/java/net/sourceforge/cilib/boa/bee/AbstractBee.java +++ b/src/main/java/net/sourceforge/cilib/boa/bee/AbstractBee.java @@ -21,7 +21,7 @@ */ package net.sourceforge.cilib.boa.bee; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; import net.sourceforge.cilib.boa.positionupdatestrategies.BeePositionUpdateStrategy; import net.sourceforge.cilib.boa.positionupdatestrategies.VisualPositionUpdateStategy; import net.sourceforge.cilib.entity.AbstractEntity; @@ -136,7 +136,7 @@ public abstract class AbstractBee extends AbstractEntity implements HoneyBee { @Override public void initialise(OptimisationProblem problem) { this.setCandidateSolution(problem.getDomain().getBuiltRepresenation().getClone()); - TypeUtil.randomize(this.getCandidateSolution()); + Types.randomize(this.getCandidateSolution()); // this.getCandidateSolution().randomise(); this.dimension = this.getCandidateSolution().size(); diff --git a/src/main/java/net/sourceforge/cilib/clustering/kmeans/KMeans.java b/src/main/java/net/sourceforge/cilib/clustering/kmeans/KMeans.java index beba140..ff40a13 100644 --- a/src/main/java/net/sourceforge/cilib/clustering/kmeans/KMeans.java +++ b/src/main/java/net/sourceforge/cilib/clustering/kmeans/KMeans.java @@ -28,7 +28,7 @@ import java.util.List; import net.sourceforge.cilib.algorithm.Algorithm; import net.sourceforge.cilib.algorithm.SingularAlgorithm; -import net.sourceforge.cilib.math.StatUtils; +import net.sourceforge.cilib.math.Stats; import net.sourceforge.cilib.problem.OptimisationSolution; import net.sourceforge.cilib.problem.dataset.ClusterableDataSet.Pattern; import net.sourceforge.cilib.type.types.container.Vector; @@ -121,7 +121,7 @@ public class KMeans extends SingularAlgorithm { centroid = reinitialiseCentroid(centroid); } else { // the centroid becomes the mean of cluster i - centroid = StatUtils.meanVector(cluster.values()); + centroid = Stats.meanVector(cluster.values()); } updateCentroid(centroid, i); } diff --git a/src/main/java/net/sourceforge/cilib/ec/Individual.java b/src/main/java/net/sourceforge/cilib/ec/Individual.java index 5557fbe..848a1a3 100644 --- a/src/main/java/net/sourceforge/cilib/ec/Individual.java +++ b/src/main/java/net/sourceforge/cilib/ec/Individual.java @@ -24,7 +24,7 @@ package net.sourceforge.cilib.ec; import net.sourceforge.cilib.entity.AbstractEntity; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.problem.OptimisationProblem; import net.sourceforge.cilib.type.types.Type; @@ -110,11 +110,11 @@ public class Individual extends AbstractEntity { // which is always enforced due to the semantics of the performInitialisation methods this.setCandidateSolution(problem.getDomain().getBuiltRepresenation().getClone()); - TypeUtil.randomize(this.getCandidateSolution()); + Types.randomize(this.getCandidateSolution()); if (problem.getBehaviouralDomain().getBuiltRepresenation() != null) { this.getProperties().put(EntityType.Individual.PHENOTYPES, problem.getBehaviouralDomain().getBuiltRepresenation().getClone()); - TypeUtil.randomize(this.getProperties().get(EntityType.Individual.PHENOTYPES)); + Types.randomize(this.getProperties().get(EntityType.Individual.PHENOTYPES)); } this.dimension = this.getCandidateSolution().size(); diff --git a/src/main/java/net/sourceforge/cilib/entity/Harmony.java b/src/main/java/net/sourceforge/cilib/entity/Harmony.java index f3122e2..ea0188e 100644 --- a/src/main/java/net/sourceforge/cilib/entity/Harmony.java +++ b/src/main/java/net/sourceforge/cilib/entity/Harmony.java @@ -21,7 +21,7 @@ */ package net.sourceforge.cilib.entity; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; import net.sourceforge.cilib.problem.Fitness; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.problem.OptimisationProblem; @@ -116,7 +116,7 @@ public class Harmony extends AbstractEntity { @Override public void initialise(OptimisationProblem problem) { StructuredType harmony = problem.getDomain().getBuiltRepresenation().getClone(); - TypeUtil.randomize(harmony); + Types.randomize(harmony); setCandidateSolution(harmony); this.getProperties().put(EntityType.FITNESS, InferiorFitness.instance()); @@ -127,7 +127,7 @@ public class Harmony extends AbstractEntity { */ @Override public void reinitialise() { - TypeUtil.randomize(getCandidateSolution()); + Types.randomize(getCandidateSolution()); } } diff --git a/src/main/java/net/sourceforge/cilib/functions/activation/Sigmoid.java b/src/main/java/net/sourceforge/cilib/functions/activation/Sigmoid.java index 01c1dfa..947092c 100644 --- a/src/main/java/net/sourceforge/cilib/functions/activation/Sigmoid.java +++ b/src/main/java/net/sourceforge/cilib/functions/activation/Sigmoid.java @@ -26,7 +26,7 @@ import net.sourceforge.cilib.controlparameter.ControlParameter; import net.sourceforge.cilib.type.types.Real; import net.sourceforge.cilib.type.types.Type; import net.sourceforge.cilib.type.types.container.Vector; -import net.sourceforge.cilib.util.VectorUtils; +import net.sourceforge.cilib.util.Vectors; /** * The generalised sigmoid function. The function is the general case of the sigmoid function @@ -108,7 +108,7 @@ public class Sigmoid extends ActivationFunction { double valueAtPoint = evaluate(point); double result = valueAtPoint * (1 - valueAtPoint); - return VectorUtils.create(result); + return Vectors.create(result); } /** @@ -116,7 +116,7 @@ public class Sigmoid extends ActivationFunction { */ @Override public Double getGradient(Number number) { - return getGradient(VectorUtils.create(number)).getReal(0); + return getGradient(Vectors.create(number)).getReal(0); } /** diff --git a/src/main/java/net/sourceforge/cilib/functions/clustering/ParametricClusteringFunction.java b/src/main/java/net/sourceforge/cilib/functions/clustering/ParametricClusteringFunction.java index b21794e..6157557 100644 --- a/src/main/java/net/sourceforge/cilib/functions/clustering/ParametricClusteringFunction.java +++ b/src/main/java/net/sourceforge/cilib/functions/clustering/ParametricClusteringFunction.java @@ -24,7 +24,7 @@ package net.sourceforge.cilib.functions.clustering; import net.sourceforge.cilib.controlparameter.ConstantControlParameter; import net.sourceforge.cilib.controlparameter.ControlParameter; import net.sourceforge.cilib.type.types.container.Vector; -import net.sourceforge.cilib.util.VectorUtils; +import net.sourceforge.cilib.util.Vectors; /** * This class makes use of the helper/member functions defined and implemented in @@ -115,8 +115,8 @@ public class ParametricClusteringFunction extends ClusteringFitnessFunction { */ protected double zMax() { Vector prototype = (Vector) helper.getClusteringProblem().getDomain().getBuiltRepresenation(); - Vector upperBoundVector = VectorUtils.createUpperBoundVector(prototype); - Vector lowerBoundVector = VectorUtils.createLowerBoundVector(prototype); + Vector upperBoundVector = Vectors.createUpperBoundVector(prototype); + Vector lowerBoundVector = Vectors.createLowerBoundVector(prototype); return helper.calculateDistance(upperBoundVector, lowerBoundVector); } diff --git a/src/main/java/net/sourceforge/cilib/functions/clustering/clustercenterstrategies/ClusterMeanStrategy.java b/src/main/java/net/sourceforge/cilib/functions/clustering/clustercenterstrategies/ClusterMeanStrategy.java index 38b21a1..cd56219 100644 --- a/src/main/java/net/sourceforge/cilib/functions/clustering/clustercenterstrategies/ClusterMeanStrategy.java +++ b/src/main/java/net/sourceforge/cilib/functions/clustering/clustercenterstrategies/ClusterMeanStrategy.java @@ -23,7 +23,7 @@ package net.sourceforge.cilib.functions.clustering.clustercenterstrategies; import java.util.Collection; -import net.sourceforge.cilib.math.StatUtils; +import net.sourceforge.cilib.math.Stats; import net.sourceforge.cilib.problem.dataset.ClusterableDataSet.Pattern; import net.sourceforge.cilib.type.types.container.Vector; import net.sourceforge.cilib.util.ClusteringUtils; @@ -48,6 +48,6 @@ public class ClusterMeanStrategy implements ClusterCenterStrategy { public Vector getCenter(int i) { Collection<Pattern> cluster = ClusteringUtils.get().getArrangedClusters().get(i).values(); - return StatUtils.meanVector(cluster); + return Stats.meanVector(cluster); } } diff --git a/src/main/java/net/sourceforge/cilib/functions/clustering/validityindices/HalkidiVazirgiannisIndex.java b/src/main/java/net/sourceforge/cilib/functions/clustering/validityindices/HalkidiVazirgiannisIndex.java index 11a6684..3a6ee17 100644 --- a/src/main/java/net/sourceforge/cilib/functions/clustering/validityindices/HalkidiVazirgiannisIndex.java +++ b/src/main/java/net/sourceforge/cilib/functions/clustering/validityindices/HalkidiVazirgiannisIndex.java @@ -22,7 +22,7 @@ package net.sourceforge.cilib.functions.clustering.validityindices; import net.sourceforge.cilib.functions.clustering.ClusteringFitnessFunction; -import net.sourceforge.cilib.math.StatUtils; +import net.sourceforge.cilib.math.Stats; import net.sourceforge.cilib.problem.dataset.ClusterableDataSet.Pattern; import net.sourceforge.cilib.type.types.container.Vector; @@ -68,7 +68,7 @@ public class HalkidiVazirgiannisIndex extends ClusteringFitnessFunction { stdev = 0.0; for (int i = 0; i < clustersFormed; i++) { - clusterVariance = StatUtils.variance(arrangedClusters.get(i).values(), clusterCenterStrategy.getCenter(i)); + clusterVariance = Stats.variance(arrangedClusters.get(i).values(), clusterCenterStrategy.getCenter(i)); scattering += clusterVariance; stdev += clusterVariance; } diff --git a/src/main/java/net/sourceforge/cilib/functions/clustering/validityindices/VeenmanReindersBackerIndex.java b/src/main/java/net/sourceforge/cilib/functions/clustering/validityindices/VeenmanReindersBackerIndex.java index db39f5e..b811e7f 100644 --- a/src/main/java/net/sourceforge/cilib/functions/clustering/validityindices/VeenmanReindersBackerIndex.java +++ b/src/main/java/net/sourceforge/cilib/functions/clustering/validityindices/VeenmanReindersBackerIndex.java @@ -28,7 +28,7 @@ import net.sourceforge.cilib.controlparameter.ConstantControlParameter; import net.sourceforge.cilib.controlparameter.ControlParameter; import net.sourceforge.cilib.functions.clustering.ClusteringFitnessFunction; import net.sourceforge.cilib.functions.clustering.clustercenterstrategies.ClusterMeanStrategy; -import net.sourceforge.cilib.math.StatUtils; +import net.sourceforge.cilib.math.Stats; import net.sourceforge.cilib.problem.dataset.ClusterableDataSet.Pattern; import net.sourceforge.cilib.type.types.container.Vector; @@ -82,7 +82,7 @@ public class VeenmanReindersBackerIndex extends ClusteringFitnessFunction { union.addAll(arrangedClusters.get(i).values()); union.addAll(arrangedClusters.get(j).values()); - if (StatUtils.variance(union, helper.getDataSetMean()) < getMaximumVariance()) { + if (Stats.variance(union, helper.getDataSetMean()) < getMaximumVariance()) { return false; } } diff --git a/src/main/java/net/sourceforge/cilib/math/MathUtil.java b/src/main/java/net/sourceforge/cilib/math/Maths.java similarity index 98% rename from src/main/java/net/sourceforge/cilib/math/MathUtil.java rename to src/main/java/net/sourceforge/cilib/math/Maths.java index 71a9216..30f84c6 100644 --- a/src/main/java/net/sourceforge/cilib/math/MathUtil.java +++ b/src/main/java/net/sourceforge/cilib/math/Maths.java @@ -33,13 +33,13 @@ import net.sourceforge.cilib.math.random.generator.Random; * * @author Gary Pampara */ -public final class MathUtil { +public final class Maths { public static double EPSILON = 1.0E-15d; private static Random random; - private MathUtil() { + private Maths() { } /** diff --git a/src/main/java/net/sourceforge/cilib/math/StatUtils.java b/src/main/java/net/sourceforge/cilib/math/Stats.java similarity index 98% rename from src/main/java/net/sourceforge/cilib/math/StatUtils.java rename to src/main/java/net/sourceforge/cilib/math/Stats.java index 792211c..72f9019 100644 --- a/src/main/java/net/sourceforge/cilib/math/StatUtils.java +++ b/src/main/java/net/sourceforge/cilib/math/Stats.java @@ -31,9 +31,9 @@ import net.sourceforge.cilib.type.types.container.Vector; * Some simple methods for determining some statistics. * */ -public final class StatUtils { +public final class Stats { - private StatUtils() { + private Stats() { } /** diff --git a/src/main/java/net/sourceforge/cilib/math/random/DiscreteRandomNumber.java b/src/main/java/net/sourceforge/cilib/math/random/DiscreteRandomNumber.java index 3d259e7..22e83d2 100644 --- a/src/main/java/net/sourceforge/cilib/math/random/DiscreteRandomNumber.java +++ b/src/main/java/net/sourceforge/cilib/math/random/DiscreteRandomNumber.java @@ -21,7 +21,7 @@ */ package net.sourceforge.cilib.math.random; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.Maths; /** * @@ -45,7 +45,7 @@ public final class DiscreteRandomNumber { */ public static double getPoisson(double x, double lambda) { double numerator = Math.pow(Math.E, -lambda) * Math.pow(lambda, x); - double denominator = MathUtil.factorial(x); + double denominator = Maths.factorial(x); return numerator / denominator; } @@ -58,7 +58,7 @@ public final class DiscreteRandomNumber { * @return The value of the binomial distribution. */ public static double getBinomial(double x, double p, double n) { - return MathUtil.combination(n, x) * Math.pow(p, x) * Math.pow((1-p), (n-x)); + return Maths.combination(n, x) * Math.pow(p, x) * Math.pow((1-p), (n-x)); } } diff --git a/src/main/java/net/sourceforge/cilib/neuralnetwork/generic/Weight.java b/src/main/java/net/sourceforge/cilib/neuralnetwork/generic/Weight.java index 800bece..2657c4f 100644 --- a/src/main/java/net/sourceforge/cilib/neuralnetwork/generic/Weight.java +++ b/src/main/java/net/sourceforge/cilib/neuralnetwork/generic/Weight.java @@ -22,7 +22,7 @@ package net.sourceforge.cilib.neuralnetwork.generic; import net.sourceforge.cilib.type.types.Type; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; import net.sourceforge.cilib.util.Cloneable; /** @@ -50,7 +50,7 @@ public class Weight implements Cloneable { super(); this.weightValue = w.getClone(); this.previousChange = w.getClone(); - TypeUtil.reset(this.previousChange); + Types.reset(this.previousChange); // this.previousChange.reset(); } diff --git a/src/main/java/net/sourceforge/cilib/problem/CooperativeOptimisationProblemAdapter.java b/src/main/java/net/sourceforge/cilib/problem/CooperativeOptimisationProblemAdapter.java index 37fee26..e1176d7 100644 --- a/src/main/java/net/sourceforge/cilib/problem/CooperativeOptimisationProblemAdapter.java +++ b/src/main/java/net/sourceforge/cilib/problem/CooperativeOptimisationProblemAdapter.java @@ -29,7 +29,7 @@ import net.sourceforge.cilib.type.StringBasedDomainRegistry; import net.sourceforge.cilib.type.parser.DomainParser; import net.sourceforge.cilib.type.parser.ParseException; import net.sourceforge.cilib.type.types.Type; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; import net.sourceforge.cilib.type.types.container.Vector; /** @@ -62,7 +62,7 @@ public class CooperativeOptimisationProblemAdapter extends OptimisationProblemAd domainRegistry = new StringBasedDomainRegistry(); String expandedDomain = ""; for (int i = offset; i < offset + dimension; i++) { - String tmp = TypeUtil.getRepresentation(((Vector) context.getCandidateSolution()).get(i)); + String tmp = Types.getRepresentation(((Vector) context.getCandidateSolution()).get(i)); expandedDomain += tmp;//((Vector) context.getCandidateSolution()).get(i).getRepresentation(); if (i < offset + dimension - 1) expandedDomain += ","; diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/BouncingBoundaryConstraint.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/BouncingBoundaryConstraint.java index 514ce0f..15eb36e 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/BouncingBoundaryConstraint.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/BouncingBoundaryConstraint.java @@ -25,7 +25,7 @@ package net.sourceforge.cilib.problem.boundaryconstraint; import java.util.Iterator; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.Maths; import net.sourceforge.cilib.type.types.Bounds; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.container.StructuredType; @@ -76,7 +76,7 @@ public class BouncingBoundaryConstraint implements BoundaryConstraint { velocity.set(previousPosition - position.getReal()); } else if (Double.compare(position.getReal(), bounds.getUpperBound()) > 0) { - position.set(bounds.getUpperBound() - MathUtil.EPSILON); + position.set(bounds.getUpperBound() - Maths.EPSILON); velocity.set(previousPosition - position.getReal()); } } diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/ClampingBoundaryConstraint.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/ClampingBoundaryConstraint.java index 8804bd3..d6ad51c 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/ClampingBoundaryConstraint.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/ClampingBoundaryConstraint.java @@ -24,7 +24,7 @@ package net.sourceforge.cilib.problem.boundaryconstraint; import java.util.Iterator; import net.sourceforge.cilib.entity.Entity; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.Maths; import net.sourceforge.cilib.type.types.Bounds; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.container.StructuredType; @@ -61,7 +61,7 @@ public class ClampingBoundaryConstraint implements BoundaryConstraint { numeric.setReal(bounds.getLowerBound()); } else if (Double.compare(numeric.getReal(), bounds.getUpperBound()) > 0) { // number > upper bound - numeric.setReal(bounds.getUpperBound() - MathUtil.EPSILON); + numeric.setReal(bounds.getUpperBound() - Maths.EPSILON); } } } diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/NearestBoundaryConstraint.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/NearestBoundaryConstraint.java index 5a81997..a8a5b98 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/NearestBoundaryConstraint.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/NearestBoundaryConstraint.java @@ -27,7 +27,7 @@ import net.sourceforge.cilib.controlparameter.ConstantControlParameter; import net.sourceforge.cilib.controlparameter.ControlParameter; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.Maths; import net.sourceforge.cilib.type.types.Bounds; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.container.StructuredType; @@ -106,15 +106,15 @@ public class NearestBoundaryConstraint implements BoundaryConstraint { if (Double.compare(position.getReal(), bounds.getLowerBound()) < 0) { position.set(bounds.getLowerBound()); // lower boundary is inclusive - if (MathUtil.random() < turbulenceProbability.getParameter()) { - position.set(position.getReal() + MathUtil.random() * bounds.getRange()); + if (Maths.random() < turbulenceProbability.getParameter()) { + position.set(position.getReal() + Maths.random() * bounds.getRange()); } velocity.set(position.getReal() - previousPosition); } else if (Double.compare(position.getReal(), bounds.getUpperBound()) > 0) { - position.set(bounds.getUpperBound() - MathUtil.EPSILON); // upper boundary is exclusive - if (MathUtil.random() < turbulenceProbability.getParameter()) { - position.set(position.getReal() - MathUtil.random() * bounds.getRange()); + position.set(bounds.getUpperBound() - Maths.EPSILON); // upper boundary is exclusive + if (Maths.random() < turbulenceProbability.getParameter()) { + position.set(position.getReal() - Maths.random() * bounds.getRange()); } velocity.set(position.getReal() - previousPosition); } diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/PerElementReinitialisation.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/PerElementReinitialisation.java index 13a300e..db2fc5a 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/PerElementReinitialisation.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/PerElementReinitialisation.java @@ -24,7 +24,7 @@ package net.sourceforge.cilib.problem.boundaryconstraint; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.Type; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; import net.sourceforge.cilib.type.types.container.Vector; /** @@ -32,7 +32,7 @@ import net.sourceforge.cilib.type.types.container.Vector; * it is no longer within the valid search space. Each element violating the * condition will be reinitilaised witin the domain of the problem (search space). * - * @see TypeUtil#isInsideBounds(net.sourceforge.cilib.type.types.Type) + * @see Types#isInsideBounds(net.sourceforge.cilib.type.types.Type) */ public class PerElementReinitialisation extends ReinitialisationBoundary { private static final long serialVersionUID = 7080824227269710787L; @@ -67,8 +67,8 @@ public class PerElementReinitialisation extends ReinitialisationBoundary { } private void enforce(Numeric numeric) { - if (!TypeUtil.isInsideBounds(numeric)) { - TypeUtil.randomize(numeric); + if (!Types.isInsideBounds(numeric)) { + Types.randomize(numeric); } } } diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/RandomBoundaryConstraint.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/RandomBoundaryConstraint.java index 6ff98ee..be82f80 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/RandomBoundaryConstraint.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/RandomBoundaryConstraint.java @@ -26,7 +26,7 @@ import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.type.types.Bounds; import net.sourceforge.cilib.type.types.Numeric; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; import net.sourceforge.cilib.type.types.container.StructuredType; /** @@ -96,7 +96,7 @@ public class RandomBoundaryConstraint implements BoundaryConstraint { */ private void constrain(Numeric position, Numeric velocity) { Numeric previousPosition = position.getClone(); - TypeUtil.randomize(position); + Types.randomize(position); velocity.set(position.getReal() - previousPosition.getReal()); } } diff --git a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/ReinitialisationBoundary.java b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/ReinitialisationBoundary.java index c2db3ff..1af4855 100644 --- a/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/ReinitialisationBoundary.java +++ b/src/main/java/net/sourceforge/cilib/problem/boundaryconstraint/ReinitialisationBoundary.java @@ -22,14 +22,14 @@ package net.sourceforge.cilib.problem.boundaryconstraint; import net.sourceforge.cilib.entity.Entity; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; /** * Once the entity has over shot the search space boundaries, re-initialise * the Entity once again to be witihin the search space of the problem at a * random position. * - * @see TypeUtil#isInsideBounds(net.sourceforge.cilib.type.types.Type) + * @see Types#isInsideBounds(net.sourceforge.cilib.type.types.Type) */ public class ReinitialisationBoundary implements BoundaryConstraint { private static final long serialVersionUID = -512973040124015665L; @@ -46,7 +46,7 @@ public class ReinitialisationBoundary implements BoundaryConstraint { * {@inheritDoc} */ public void enforce(Entity entity) { - if (!TypeUtil.isInsideBounds(entity.getCandidateSolution())) { + if (!Types.isInsideBounds(entity.getCandidateSolution())) { entity.reinitialise(); } } diff --git a/src/main/java/net/sourceforge/cilib/problem/dataset/AssociatedPairDataSetBuilder.java b/src/main/java/net/sourceforge/cilib/problem/dataset/AssociatedPairDataSetBuilder.java index b8e8136..caf5000 100644 --- a/src/main/java/net/sourceforge/cilib/problem/dataset/AssociatedPairDataSetBuilder.java +++ b/src/main/java/net/sourceforge/cilib/problem/dataset/AssociatedPairDataSetBuilder.java @@ -23,9 +23,7 @@ package net.sourceforge.cilib.problem.dataset; import java.util.ArrayList; -import net.sourceforge.cilib.math.StatUtils; -import net.sourceforge.cilib.problem.Problem; -import net.sourceforge.cilib.simulator.Simulation; +import net.sourceforge.cilib.math.Stats; import net.sourceforge.cilib.type.types.container.Vector; import net.sourceforge.cilib.util.ClusteringUtils; @@ -105,7 +103,7 @@ public class AssociatedPairDataSetBuilder extends DataSetBuilder implements Clus } patterns.addAll(data); - if (identifier == "") { + if (identifier.equals("")) { identifier += dataset.getFile(); } else { @@ -128,8 +126,8 @@ public class AssociatedPairDataSetBuilder extends DataSetBuilder implements Clus * Calculate and cache the mean ({@link Vector}) and variance (scalar) of the dataset. */ private void cacheMeanAndVariance() { - cachedMean = StatUtils.meanVector(patterns); - cachedVariance = StatUtils.variance(patterns, cachedMean); + cachedMean = Stats.meanVector(patterns); + cachedVariance = Stats.variance(patterns, cachedMean); } /** diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/NeighbourhoodBestSentriesReactionStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/NeighbourhoodBestSentriesReactionStrategy.java index 2c7d2b0..69630ad 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/NeighbourhoodBestSentriesReactionStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/NeighbourhoodBestSentriesReactionStrategy.java @@ -25,7 +25,7 @@ package net.sourceforge.cilib.pso.dynamic.responsestrategies; import net.sourceforge.cilib.algorithm.population.PopulationBasedAlgorithm; import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.Topologies; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; public class NeighbourhoodBestSentriesReactionStrategy<E extends PopulationBasedAlgorithm> extends EnvironmentChangeResponseStrategy<E> { private static final long serialVersionUID = -2142727048293776335L; @@ -46,7 +46,7 @@ public class NeighbourhoodBestSentriesReactionStrategy<E extends PopulationBased @Override public void performReaction(PopulationBasedAlgorithm algorithm) { for (Entity entity : Topologies.getNeighbourhoodBestEntities(algorithm.getTopology())) - TypeUtil.randomize(entity.getCandidateSolution()); + Types.randomize(entity.getCandidateSolution()); // TODO: What is the influence of reevaluation? // entity.calculateFitness(false); } diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java index f40e7cb..4b49937 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/PartialReinitialisationResponseStrategy.java @@ -28,7 +28,7 @@ import net.sourceforge.cilib.entity.Topology; import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.math.random.generator.Random; import net.sourceforge.cilib.type.types.Type; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; /** * @author Anna Rakitianskaia @@ -79,7 +79,7 @@ public class PartialReinitialisationResponseStrategy<E extends PopulationBasedAl // ELSE Particle aParticle = (Particle) topology.get(index); Type position = aParticle.getPosition(); - TypeUtil.randomize(position); + Types.randomize(position); used[index] = true; gotParticle = true; } diff --git a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/ReinitializationReactionStrategy.java b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/ReinitializationReactionStrategy.java index 66e07be..ad04349 100644 --- a/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/ReinitializationReactionStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/dynamic/responsestrategies/ReinitializationReactionStrategy.java @@ -29,7 +29,7 @@ import net.sourceforge.cilib.entity.Entity; import net.sourceforge.cilib.entity.Topology; import net.sourceforge.cilib.math.random.generator.MersenneTwister; import net.sourceforge.cilib.math.random.generator.Random; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; /** * This reaction strategy reinitializes the specified @@ -87,7 +87,7 @@ public class ReinitializationReactionStrategy<E extends PopulationBasedAlgorithm for (int i = 0; i < reinitializeCount; i++) { int random = randomGenerator.nextInt(entities.size()); Entity entity = entities.get(random); - TypeUtil.randomize(entity.getCandidateSolution()); // entity contents -> current position + Types.randomize(entity.getCandidateSolution()); // entity contents -> current position // remove the selected element from the all list preventing it from being selected again entities.remove(random); } diff --git a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java index 4e90b18..0144a36 100644 --- a/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/particle/initialisation/RandomizedPositionInitialisationStrategy.java @@ -24,7 +24,7 @@ package net.sourceforge.cilib.pso.particle.initialisation; import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.problem.OptimisationProblem; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; /** @@ -47,7 +47,7 @@ public class RandomizedPositionInitialisationStrategy implements public void initialise(Particle particle, OptimisationProblem problem) { particle.setCandidateSolution(problem.getDomain().getBuiltRepresenation().getClone()); // particle.getPosition().randomise(); - TypeUtil.randomize(particle.getPosition()); + Types.randomize(particle.getPosition()); particle.getProperties().put(EntityType.Particle.BEST_POSITION, particle.getPosition().getClone()); } diff --git a/src/main/java/net/sourceforge/cilib/pso/positionupdatestrategies/BoundedPersonalBestUpdateStrategy.java b/src/main/java/net/sourceforge/cilib/pso/positionupdatestrategies/BoundedPersonalBestUpdateStrategy.java index 99effec..3273f95 100644 --- a/src/main/java/net/sourceforge/cilib/pso/positionupdatestrategies/BoundedPersonalBestUpdateStrategy.java +++ b/src/main/java/net/sourceforge/cilib/pso/positionupdatestrategies/BoundedPersonalBestUpdateStrategy.java @@ -25,7 +25,7 @@ package net.sourceforge.cilib.pso.positionupdatestrategies; import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.entity.Particle; import net.sourceforge.cilib.problem.InferiorFitness; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; /** * Update the personal best of the particle, if it is a valid update. Valid updates are @@ -53,7 +53,7 @@ public class BoundedPersonalBestUpdateStrategy extends StandardPersonalBestUpdat */ @Override public void updatePersonalBest(Particle particle) { - if (!TypeUtil.isInsideBounds(particle.getPosition())) { + if (!Types.isInsideBounds(particle.getPosition())) { particle.getProperties().put(EntityType.FITNESS, InferiorFitness.instance()); return; } diff --git a/src/main/java/net/sourceforge/cilib/type/types/Int.java b/src/main/java/net/sourceforge/cilib/type/types/Int.java index 2b411ab..6c6a220 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Int.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Int.java @@ -25,7 +25,7 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.Maths; /** @@ -55,7 +55,7 @@ public class Int extends Numeric { * @param upper The upper bound. */ public Int(int lower, int upper) { - value = Double.valueOf(MathUtil.random()*(upper-lower)).intValue() + lower; + value = Double.valueOf(Maths.random()*(upper-lower)).intValue() + lower; this.setBounds(BoundsFactory.create(lower, upper)); } @@ -223,7 +223,7 @@ public class Int extends Numeric { * {@inheritDoc} */ public void randomize() { - double tmp = MathUtil.random()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); + double tmp = Maths.random()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); this.value = Double.valueOf(tmp).intValue(); } diff --git a/src/main/java/net/sourceforge/cilib/type/types/Long.java b/src/main/java/net/sourceforge/cilib/type/types/Long.java index 5fede48..b27f368 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Long.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Long.java @@ -25,7 +25,7 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.Maths; /** * * @author leo @@ -50,7 +50,7 @@ public class Long extends Numeric { * @param upper The upper bound. */ public Long(long lower, long upper) { - value = Double.valueOf(MathUtil.random()*(upper-lower)).longValue() + lower; + value = Double.valueOf(Maths.random()*(upper-lower)).longValue() + lower; this.setBounds(BoundsFactory.create(lower, upper)); } @@ -225,7 +225,7 @@ public class Long extends Numeric { * {@inheritDoc} */ public void randomize() { - double tmp = MathUtil.random()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); + double tmp = Maths.random()*(getBounds().getUpperBound()-getBounds().getLowerBound()) + getBounds().getLowerBound(); this.value = Double.valueOf(tmp).intValue(); } diff --git a/src/main/java/net/sourceforge/cilib/type/types/Real.java b/src/main/java/net/sourceforge/cilib/type/types/Real.java index c5a4f81..bc63470 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/Real.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Real.java @@ -25,7 +25,7 @@ import java.io.IOException; import java.io.ObjectInput; import java.io.ObjectOutput; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.Maths; /** @@ -62,7 +62,7 @@ public class Real extends Numeric { public Real(double lower, double upper) { double bottom = (lower == Double.NEGATIVE_INFINITY) ? -Double.MAX_VALUE : lower; double top = (upper == Double.POSITIVE_INFINITY) ? Double.MAX_VALUE : upper; - value = (top-bottom)*MathUtil.random() + bottom; + value = (top-bottom)*Maths.random() + bottom; this.setBounds(BoundsFactory.create(lower, upper)); } @@ -227,7 +227,7 @@ public class Real extends Numeric { * Re-randomize the <code>Real</code> object based on the upper and lower bounds. */ public void randomize() { - this.value = (getBounds().getUpperBound()-getBounds().getLowerBound())*MathUtil.random() + getBounds().getLowerBound(); + this.value = (getBounds().getUpperBound()-getBounds().getLowerBound())*Maths.random() + getBounds().getLowerBound(); } diff --git a/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java b/src/main/java/net/sourceforge/cilib/type/types/Types.java similarity index 99% rename from src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java rename to src/main/java/net/sourceforge/cilib/type/types/Types.java index 2b62a7f..b062dbe 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/TypeUtil.java +++ b/src/main/java/net/sourceforge/cilib/type/types/Types.java @@ -29,9 +29,9 @@ import net.sourceforge.cilib.type.types.container.StructuredType; * * @author gpampara */ -public final class TypeUtil { +public final class Types { - private TypeUtil() { + private Types() { } /** diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/AbstractList.java b/src/main/java/net/sourceforge/cilib/type/types/container/AbstractList.java index a3ff4b4..0e8ad79 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/AbstractList.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/AbstractList.java @@ -22,7 +22,7 @@ package net.sourceforge.cilib.type.types.container; import net.sourceforge.cilib.type.types.Type; -import net.sourceforge.cilib.type.types.TypeUtil; +import net.sourceforge.cilib.type.types.Types; /** * The basic definition for all {@linkplain Type} objects that are based on a list. @@ -77,7 +77,7 @@ public abstract class AbstractList<E extends Type> implements StructuredType<E> * @param value The {@linkplain Type} to add. */ public void append(E value) { - int position = TypeUtil.getDimension(this); + int position = Types.getDimension(this); insert(position, value); } @@ -125,7 +125,7 @@ public abstract class AbstractList<E extends Type> implements StructuredType<E> int dimension = 1; for (int i = 0; i < size(); i++) { - current = TypeUtil.getRepresentation(this.get(i)); + current = Types.getRepresentation(this.get(i)); if (current.equals(previous)) { dimension++; } diff --git a/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java b/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java index 22dc036..7503893 100644 --- a/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java +++ b/src/main/java/net/sourceforge/cilib/type/types/container/Vector.java @@ -26,6 +26,7 @@ import java.util.Iterator; import java.util.List; import net.sourceforge.cilib.container.visitor.Visitor; import net.sourceforge.cilib.math.VectorMath; +import net.sourceforge.cilib.type.types.Types; import net.sourceforge.cilib.type.types.Numeric; import net.sourceforge.cilib.type.types.Resetable; diff --git a/src/main/java/net/sourceforge/cilib/util/VectorUtils.java b/src/main/java/net/sourceforge/cilib/util/Vectors.java similarity index 98% rename from src/main/java/net/sourceforge/cilib/util/VectorUtils.java rename to src/main/java/net/sourceforge/cilib/util/Vectors.java index 150b6ba..656e0fd 100644 --- a/src/main/java/net/sourceforge/cilib/util/VectorUtils.java +++ b/src/main/java/net/sourceforge/cilib/util/Vectors.java @@ -29,13 +29,13 @@ import net.sourceforge.cilib.type.types.container.Vector; /** * Utility methods for {@linkplain Vector}s. */ -public final class VectorUtils { +public final class Vectors { /** * Default constructor. Specified constructor to be private so that an instance * of this utility class cannot be created. */ - private VectorUtils() { + private Vectors() { } /** diff --git a/src/test/java/net/sourceforge/cilib/entity/operators/crossover/BlendCrossoverStrategyTest.java b/src/test/java/net/sourceforge/cilib/entity/operators/crossover/BlendCrossoverStrategyTest.java index 8a72d58..5936d0c 100644 --- a/src/test/java/net/sourceforge/cilib/entity/operators/crossover/BlendCrossoverStrategyTest.java +++ b/src/test/java/net/sourceforge/cilib/entity/operators/crossover/BlendCrossoverStrategyTest.java @@ -31,7 +31,7 @@ import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.problem.Fitness; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.type.types.container.Vector; -import net.sourceforge.cilib.util.VectorUtils; +import net.sourceforge.cilib.util.Vectors; import net.sourceforge.cilib.util.calculator.FitnessCalculator; import org.junit.Assert; import org.junit.Test; @@ -47,8 +47,8 @@ public class BlendCrossoverStrategyTest { Individual i1 = new Individual(); Individual i2 = new Individual(); - i1.getProperties().put(EntityType.CANDIDATE_SOLUTION, VectorUtils.create(0.0, 1.0, 2.0, 3.0, 4.0)); - i2.getProperties().put(EntityType.CANDIDATE_SOLUTION, VectorUtils.create(5.0, 6.0, 7.0, 8.0, 9.0)); + i1.getProperties().put(EntityType.CANDIDATE_SOLUTION, Vectors.create(0.0, 1.0, 2.0, 3.0, 4.0)); + i2.getProperties().put(EntityType.CANDIDATE_SOLUTION, Vectors.create(5.0, 6.0, 7.0, 8.0, 9.0)); i1.setFitnessCalculator(new MockFitnessCalculator()); i2.setFitnessCalculator(new MockFitnessCalculator()); diff --git a/src/test/java/net/sourceforge/cilib/entity/operators/crossover/OnePointCrossoverStrategyTest.java b/src/test/java/net/sourceforge/cilib/entity/operators/crossover/OnePointCrossoverStrategyTest.java index afe5b59..a1a0261 100644 --- a/src/test/java/net/sourceforge/cilib/entity/operators/crossover/OnePointCrossoverStrategyTest.java +++ b/src/test/java/net/sourceforge/cilib/entity/operators/crossover/OnePointCrossoverStrategyTest.java @@ -31,7 +31,7 @@ import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.problem.Fitness; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.type.types.container.Vector; -import net.sourceforge.cilib.util.VectorUtils; +import net.sourceforge.cilib.util.Vectors; import net.sourceforge.cilib.util.calculator.FitnessCalculator; import org.junit.Assert; import org.junit.Test; @@ -47,8 +47,8 @@ public class OnePointCrossoverStrategyTest { Individual i1 = new Individual(); Individual i2 = new Individual(); - i1.getProperties().put(EntityType.CANDIDATE_SOLUTION, VectorUtils.create(0.0, 1.0, 2.0, 3.0, 4.0)); - i2.getProperties().put(EntityType.CANDIDATE_SOLUTION, VectorUtils.create(5.0, 6.0, 7.0, 8.0, 9.0)); + i1.getProperties().put(EntityType.CANDIDATE_SOLUTION, Vectors.create(0.0, 1.0, 2.0, 3.0, 4.0)); + i2.getProperties().put(EntityType.CANDIDATE_SOLUTION, Vectors.create(5.0, 6.0, 7.0, 8.0, 9.0)); i1.setFitnessCalculator(new MockFitnessCalculator()); i2.setFitnessCalculator(new MockFitnessCalculator()); diff --git a/src/test/java/net/sourceforge/cilib/entity/operators/crossover/UniformCrossoverStrategyTest.java b/src/test/java/net/sourceforge/cilib/entity/operators/crossover/UniformCrossoverStrategyTest.java index f7335dd..e42777b 100644 --- a/src/test/java/net/sourceforge/cilib/entity/operators/crossover/UniformCrossoverStrategyTest.java +++ b/src/test/java/net/sourceforge/cilib/entity/operators/crossover/UniformCrossoverStrategyTest.java @@ -31,7 +31,7 @@ import net.sourceforge.cilib.entity.EntityType; import net.sourceforge.cilib.problem.Fitness; import net.sourceforge.cilib.problem.InferiorFitness; import net.sourceforge.cilib.type.types.container.Vector; -import net.sourceforge.cilib.util.VectorUtils; +import net.sourceforge.cilib.util.Vectors; import net.sourceforge.cilib.util.calculator.FitnessCalculator; import org.junit.Assert; import org.junit.Test; @@ -47,8 +47,8 @@ public class UniformCrossoverStrategyTest { Individual i1 = new Individual(); Individual i2 = new Individual(); - i1.getProperties().put(EntityType.CANDIDATE_SOLUTION, VectorUtils.create(0.0, 1.0, 2.0, 3.0, 4.0)); - i2.getProperties().put(EntityType.CANDIDATE_SOLUTION, VectorUtils.create(5.0, 6.0, 7.0, 8.0, 9.0)); + i1.getProperties().put(EntityType.CANDIDATE_SOLUTION, Vectors.create(0.0, 1.0, 2.0, 3.0, 4.0)); + i2.getProperties().put(EntityType.CANDIDATE_SOLUTION, Vectors.create(5.0, 6.0, 7.0, 8.0, 9.0)); i1.setFitnessCalculator(new MockFitnessCalculator()); i2.setFitnessCalculator(new MockFitnessCalculator()); diff --git a/src/test/java/net/sourceforge/cilib/math/MathUtilTest.java b/src/test/java/net/sourceforge/cilib/math/MathsTest.java similarity index 66% rename from src/test/java/net/sourceforge/cilib/math/MathUtilTest.java rename to src/test/java/net/sourceforge/cilib/math/MathsTest.java index 659115e..3a2976c 100644 --- a/src/test/java/net/sourceforge/cilib/math/MathUtilTest.java +++ b/src/test/java/net/sourceforge/cilib/math/MathsTest.java @@ -31,47 +31,47 @@ import org.junit.Test; * * @author Gary Pampara */ -public class MathUtilTest { +public class MathsTest { @Test(expected = IllegalArgumentException.class) public void invalidFactorialParameter() { - MathUtil.factorial(-1.0); + Maths.factorial(-1.0); } @Test public void testFactorial() { - assertEquals(1.0, MathUtil.factorial(0.0), Double.MIN_NORMAL); - assertEquals(1.0, MathUtil.factorial(1.0), Double.MIN_NORMAL); - assertEquals(6.0, MathUtil.factorial(3), Double.MIN_NORMAL); - assertEquals(720.0, MathUtil.factorial(6), Double.MIN_NORMAL); - assertEquals(9.33262154439441E157, MathUtil.factorial(100), Double.MIN_NORMAL); + assertEquals(1.0, Maths.factorial(0.0), Double.MIN_NORMAL); + assertEquals(1.0, Maths.factorial(1.0), Double.MIN_NORMAL); + assertEquals(6.0, Maths.factorial(3), Double.MIN_NORMAL); + assertEquals(720.0, Maths.factorial(6), Double.MIN_NORMAL); + assertEquals(9.33262154439441E157, Maths.factorial(100), Double.MIN_NORMAL); } @Test public void testCombination() { - assertEquals(792.0, MathUtil.combination(12, 5), Double.MIN_NORMAL); + assertEquals(792.0, Maths.combination(12, 5), Double.MIN_NORMAL); try { - MathUtil.combination(-1, -5); + Maths.combination(-1, -5); fail("Invalid input!"); } catch (Exception e) {} try { - MathUtil.combination(-1, 5); + Maths.combination(-1, 5); fail("Invalid input!"); } catch (Exception e) {} try { - MathUtil.combination(1, -5); + Maths.combination(1, -5); fail("Invalid input!"); } catch (Exception e) {} - assertEquals(1.0, MathUtil.combination(0, 0), Double.MIN_NORMAL); - assertEquals(1.0, MathUtil.combination(1, 0), Double.MIN_NORMAL); - assertEquals(1.0, MathUtil.combination(1, 1), Double.MIN_NORMAL); + assertEquals(1.0, Maths.combination(0, 0), Double.MIN_NORMAL); + assertEquals(1.0, Maths.combination(1, 0), Double.MIN_NORMAL); + assertEquals(1.0, Maths.combination(1, 1), Double.MIN_NORMAL); } } diff --git a/src/test/java/net/sourceforge/cilib/math/StatUtilsTest.java b/src/test/java/net/sourceforge/cilib/math/StatsTest.java similarity index 89% rename from src/test/java/net/sourceforge/cilib/math/StatUtilsTest.java rename to src/test/java/net/sourceforge/cilib/math/StatsTest.java index bd7a9d3..7694e75 100644 --- a/src/test/java/net/sourceforge/cilib/math/StatUtilsTest.java +++ b/src/test/java/net/sourceforge/cilib/math/StatsTest.java @@ -1,5 +1,5 @@ /* - * StatUtilsTest.java + * StatsTest.java * * Copyright (C) 2003 - 2008 * Computational Intelligence Research Group (CIRG@UP) @@ -36,7 +36,7 @@ import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; -public class StatUtilsTest { +public class StatsTest { private static ArrayList<Pattern> set; private static Vector mean = null; private static final int SIZE = 3; @@ -75,24 +75,24 @@ public class StatUtilsTest { @Test(expected = IllegalArgumentException.class) public void testEmptySetForMeanVector() { - StatUtils.meanVector(new ArrayList<Pattern>()); + Stats.meanVector(new ArrayList<Pattern>()); } @Test(expected = IllegalArgumentException.class) public void testEmptySetForVarianceScalar() { - StatUtils.variance(new ArrayList<Pattern>(), mean); + Stats.variance(new ArrayList<Pattern>(), mean); } @Test public void testMeanVector() { Vector calculated = new Vector(SIZE, new Real(2)); - mean = StatUtils.meanVector(set); + mean = Stats.meanVector(set); assertThat(mean, equalTo(calculated)); } @Test public void testVarianceScalar() { - assertThat(StatUtils.variance(set, mean), equalTo(1.2)); // more accurate than StatUtils.varianceVector() + assertThat(Stats.variance(set, mean), equalTo(1.2)); // more accurate than Stats.varianceVector() } } diff --git a/src/test/java/net/sourceforge/cilib/problem/boundaryconstraint/ClampingBoundaryConstraintTest.java b/src/test/java/net/sourceforge/cilib/problem/boundaryconstraint/ClampingBoundaryConstraintTest.java index 7a6b885..e46d13b 100644 --- a/src/test/java/net/sourceforge/cilib/problem/boundaryconstraint/ClampingBoundaryConstraintTest.java +++ b/src/test/java/net/sourceforge/cilib/problem/boundaryconstraint/ClampingBoundaryConstraintTest.java @@ -23,7 +23,7 @@ package net.sourceforge.cilib.problem.boundaryconstraint; import net.sourceforge.cilib.ec.Individual; -import net.sourceforge.cilib.math.MathUtil; +import net.sourceforge.cilib.math.Maths; import net.sourceforge.cilib.type.types.Bounds; import net.sourceforge.cilib.type.types.Real; import net.sourceforge.cilib.type.types.container.Vector; @@ -62,7 +62,7 @@ public class ClampingBoundaryConstraintTest { Assert.assertThat(((Real)candidateSolution.get(0)).getReal(), is(-5.0)); Assert.assertThat(((Real)candidateSolution.get(1)).getReal(), is(3.0)); - Assert.assertThat(((Real)candidateSolution.get(2)).getReal(), is(5.0-MathUtil.EPSILON)); + Assert.assertThat(((Real)candidateSolution.get(2)).getReal(), is(5.0-Maths.EPSILON)); } } \ No newline at end of file diff --git a/src/test/java/net/sourceforge/cilib/type/StringBasedDomainRegistryTest.java b/src/test/java/net/sourceforge/cilib/type/StringBasedDomainRegistryTest.java index 34c52e7..d68af56 100644 --- a/src/test/java/net/sourceforge/cilib/type/StringBasedDomainRegistryTest.java +++ b/src/test/java/net/sourceforge/cilib/type/StringBasedDomainRegistryTest.java @@ -22,8 +22,8 @@ package net.sourceforge.cilib.type; -import net.sourceforge.cilib.type.types.TypeUtil; -import net.sourceforge.cilib.type.types.container.StructuredType; +import net.sourceforge.cilib.type.types.Types; +import net.sourceforge.cilib.type.types.container.Vector; import org.junit.Assert; import org.junit.Test; @@ -38,9 +38,9 @@ public class StringBasedDomainRegistryTest { DomainRegistry registry = new StringBasedDomainRegistry(); registry.setDomainString("R(-30.0, 30)^30"); - StructuredType<?> structure = registry.getBuiltRepresenation(); - Assert.assertEquals(30, structure.size()); - Assert.assertTrue(TypeUtil.isInsideBounds(structure)); + Vector vector = (Vector) registry.getBuiltRepresenation(); + Assert.assertEquals(30, vector.getDimension()); + Assert.assertTrue(Types.isInsideBounds(vector)); } } diff --git a/src/test/java/net/sourceforge/cilib/type/types/NumericTest.java b/src/test/java/net/sourceforge/cilib/type/types/NumericTest.java index b7e9c9f..3674986 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/NumericTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/NumericTest.java @@ -39,9 +39,9 @@ public class NumericTest { Int i = new Int(); Bit b = new Bit(); - assertEquals(1, TypeUtil.getDimension(r)); - assertEquals(1, TypeUtil.getDimension(i)); - assertEquals(1, TypeUtil.getDimension(b)); + assertEquals(1, Types.getDimension(r)); + assertEquals(1, Types.getDimension(i)); + assertEquals(1, Types.getDimension(b)); } @Test(expected=UnsupportedOperationException.class) diff --git a/src/test/java/net/sourceforge/cilib/type/types/StringTypeTest.java b/src/test/java/net/sourceforge/cilib/type/types/StringTypeTest.java index f6cab51..5485308 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/StringTypeTest.java +++ b/src/test/java/net/sourceforge/cilib/type/types/StringTypeTest.java @@ -48,7 +48,7 @@ public class StringTypeTest { public void testDimensionality() { StringType s = new StringType("This is a StringType"); - assertEquals(1, TypeUtil.getDimension(s)); + assertEquals(1, Types.getDimension(s)); } } diff --git a/src/test/java/net/sourceforge/cilib/type/types/TypeUtilTest.java b/src/test/java/net/sourceforge/cilib/type/types/TypesTest.java similarity index 87% rename from src/test/java/net/sourceforge/cilib/type/types/TypeUtilTest.java rename to src/test/java/net/sourceforge/cilib/type/types/TypesTest.java index 53478dc..35736ef 100644 --- a/src/test/java/net/sourceforge/cilib/type/types/TypeUtilTest... [truncated message content] |
From: Gary P. <gpa...@gm...> - 2009-06-11 06:33:48
|
For now, I don't think so. The parser is quite an important internal component. The generation side is only required for development. Once the classes are packaged it will remain to seem like "any other POJO" in the project. If the parser gets more complex and starts doing oither things, then we could consider it. As it's just focused on the domain strings, it's actually rather small. On Thursday 11 June 2009 08:28:16 Theuns Cloete wrote: > Hey Gary, > > Would it make sense to split the parser into a separate maven module? > This way the parser code only has to be generated once, and the JAR > file can just be included in the classpath. > > Regards > -- > Theuns > > On Wed, Jun 10, 2009 at 12:51 PM, Gary Pampara<gpa...@gm...> wrote: > > The need to have a decent parser for the domain strings is something > > that has been on the cards for a very long time. The main problem with > > the current implementation is that it is very non-expressive. > > > > Illegal domains such as: > > - R(8, 9)^-1 > > - R^0 > > - Any other strange combination > > > > were allowed in the previous parser. > > > > These patches propose a new generated parser based on a provided grammar > > file. > > > > JJTree and JavaCC were used to achieve the parser. > > > > Gary Pampara (3): > > Semi-complete parser definition. > > Deprecation of parser for generated parser. > > Prevent invalid values / options in domain strings. > > --------------------------------------------------------------------------- >--- Crystal Reports - New Free Runtime and 30 Day Trial > Check out the new simplified licensing option that enables unlimited > royalty-free distribution of the report engine for externally facing > server and web deployment. > http://p.sf.net/sfu/businessobjects > _______________________________________________ > cilib-devel mailing list > cil...@li... > https://lists.sourceforge.net/lists/listinfo/cilib-devel |