|
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
|