Minor GP update, mk branch merge rev. 286

This commit is contained in:
Marcel Kronfeld 2009-05-08 13:14:24 +00:00
parent 4fbd2e3e08
commit b948bb9da2
2 changed files with 56 additions and 16 deletions

View File

@ -1,5 +1,7 @@
package eva2.server.go.problems; package eva2.server.go.problems;
import eva2.server.go.individuals.codings.gp.GPArea;
/** /**
* Created by IntelliJ IDEA. * Created by IntelliJ IDEA.
* User: streiche * User: streiche
@ -21,4 +23,10 @@ public interface InterfaceProgramProblem {
* @param parameter The actuator parameter. * @param parameter The actuator parameter.
*/ */
public void setActuatorValue(String actuator, Object parameter); public void setActuatorValue(String actuator, Object parameter);
/**
* Return the GPArea associated with the program problem.
* @return
*/
public GPArea getArea();
} }

View File

@ -133,26 +133,34 @@ public class PSymbolicRegression extends AbstractOptimizationProblem implements
* @param population The populations that is to be inited * @param population The populations that is to be inited
*/ */
public void initPopulation(Population population) { public void initPopulation(Population population) {
AbstractEAIndividual tmpIndy; initPopulation(population, this, m_UseInnerConst, m_NumberOfConstants);
}
population.clear(); /** This method inits a given population
* @param population The populations that is to be inited
*/
public static void initPopulation(Population pop, InterfaceProgramProblem prob, boolean useInnerConsts, int numConsts) {
AbstractEAIndividual tmpIndy, template;
pop.clear();
template = ((AbstractOptimizationProblem)prob).getIndividualTemplate();
GPArea tmpArea[] = new GPArea[1]; GPArea tmpArea[] = new GPArea[1];
tmpArea[0] = this.m_GPArea; tmpArea[0] = prob.getArea();
((InterfaceDataTypeProgram)this.m_Template).setProgramDataLength(1); ((InterfaceDataTypeProgram)template).setProgramDataLength(1);
((InterfaceDataTypeProgram)this.m_Template).SetFunctionArea(tmpArea); ((InterfaceDataTypeProgram)template).SetFunctionArea(tmpArea);
if ((this.m_Template instanceof GAPIndividualProgramData) && (this.m_UseInnerConst)) { if ((template instanceof GAPIndividualProgramData) && useInnerConsts) {
((GAPIndividualProgramData)this.m_Template).setDoubleDataLength(this.m_NumberOfConstants); ((GAPIndividualProgramData)template).setDoubleDataLength(numConsts);
} }
for (int i = 0; i < population.getPopulationSize(); i++) { for (int i = 0; i < pop.getPopulationSize(); i++) {
tmpIndy = (AbstractEAIndividual)((AbstractEAIndividual)this.m_Template).clone(); tmpIndy = (AbstractEAIndividual)((AbstractEAIndividual)template).clone();
tmpIndy.init(this); tmpIndy.init((AbstractOptimizationProblem)prob);
population.add(tmpIndy); pop.add(tmpIndy);
} }
// population init must be last // population init must be last
// it set's fitcalls and generation to zero // it set's fitcalls and generation to zero
population.init(); pop.init();
} }
/** This method init the enviroment panel if necessary. /** This method init the enviroment panel if necessary.
*/ */
private void initEnvironmentPanel() { private void initEnvironmentPanel() {
@ -259,9 +267,33 @@ public class PSymbolicRegression extends AbstractOptimizationProblem implements
* @return Sensor value * @return Sensor value
*/ */
public Object getSensorValue(String sensor) { public Object getSensorValue(String sensor) {
for (int i = 0; i < this.m_X.length; i++) if (sensor.equalsIgnoreCase("X"+i)) return new Double(this.m_X[i]); return PSymbolicRegression.getSensorValue(sensor, m_X, m_C);
for (int i = 0; i < this.m_C.length; i++) if (sensor.equalsIgnoreCase("C"+i)) return new Double(this.m_C[i]); // for (int i = 0; i < this.m_X.length; i++) if (sensor.equalsIgnoreCase("X"+i)) return new Double(this.m_X[i]);
return new Double(0); // for (int i = 0; i < this.m_C.length; i++) if (sensor.equalsIgnoreCase("C"+i)) return new Double(this.m_C[i]);
// return new Double(0);
}
/**
* This method allows a GP program to sense the environment, e.g.
* input values, current time etc. Specialized to constants and variables
* in arrays whose identifiers have the form "Xi" and "Ci".
*
* @param sensor The identifier for the sensor.
* @param vars array of x_i
* @param consts array of c_i
* @return Sensor value
*/
public static Object getSensorValue(String sensor, double[] vars, double[] consts) {
if (sensor.charAt(0)=='X') {
int index=Integer.parseInt(sensor.substring(1));
return new Double(vars[index]);
} else if (sensor.charAt(0)=='C') {
int index=Integer.parseInt(sensor.substring(1));
return new Double(consts[index]);
} else return new Double(0);
// for (int i = 0; i < this.m_X.length; i++) if (sensor.equalsIgnoreCase("X"+i)) return new Double(this.m_X[i]);
// for (int i = 0; i < this.m_C.length; i++) if (sensor.equalsIgnoreCase("C"+i)) return new Double(this.m_C[i]);
// return new Double(0);
} }
/** This method allows a GP program to act in the environment /** This method allows a GP program to act in the environment