Subject: | |
From: | |
Reply To: | |
Date: | Thu, 9 Dec 2010 08:27:59 -0500 |
Content-Type: | text/plain |
Parts/Attachments: |
|
|
On Dec 9, 2010, at 7:49 AM, Dexter R. Brown wrote:
> Hello,
>
> I am new to ECJ and I am trying to use the system as a librarary for
> symbolic regression of data points with multiple independent
> variables.
> I have followed the tutorial 4 and built the X, Y, DoubleData and
> MultipleRegression classes. What I am not sure about is whether each
> independent variable needs a class representation or is the X class
> enhanced to include properties for each variable such that
> instanceX.x1...xn?
You could certainly represent your variables as special kinds of
ERCs. Here they'd hold the index into the array of current variable
values your Problem is dishing out (I called that "vars" below). I
slapped together code below but didn't compile it and I'm sure it'll
require some modification. But I hope it gives you the general idea.
Sean
package ec.app.regression.func;
import ec.*;
import ec.app.regression.*;
import ec.gp.*;
import ec.util.*;
import java.io.*;
public class Var extends ERC
{
public String name() { return "Var"; } // distinguish from other
ERCs you might be using
int index;
public void resetNode(final EvolutionState state, final int thread)
{
// we'll reset our index to reflect a variable in the problem
prototype
MyProblem prob = (MyProblem)(state.evaluator.p_problem);
nodeIndex = state.random[thread].nextInt(prob.vars.length);
}
public int nodeHashCode() { return this.getClass().hashCode() +
nodeIndex; }
public boolean nodeEquals(final GPNode node)
{
// check first to see if we're the same kind of ERC --
// won't work for subclasses; in that case you'll need
// to change this to isAssignableTo(...)
if (this.getClass() != node.getClass()) return false;
// now check to see if the ERCs hold the same value
return (((Var)node).index == index);
}
public void readNode(final EvolutionState state, final DataInput
dataInput) throws IOException
{
index = dataInput.readInt();
}
public void writeNode(final EvolutionState state, final
DataOutput dataOutput) throws IOException
{
dataOutput.writeInt(index);
}
public String encode() { return Code.encode(index); }
public boolean decode(DecodeReturn dret)
{
// store the position and the string in case they
// get modified by Code.java
int pos = dret.pos;
String data = dret.data;
// decode
Code.decode(dret);
if (dret.type != DecodeReturn.T_INT) // uh oh!
{
// restore the position and the string; it was an error
dret.data = data;
dret.pos = pos;
return false;
}
// store the data
infrc = dret.l;
return true;
}
public String toStringForHumans() { return "Var[" + index + "]"; }
public void eval(final EvolutionState state,
final int thread,
final GPData input,
final ADFStack stack,
final GPIndividual individual,
final Problem problem)
{
MyProblem prob = (MyProblem)(problem);
return prob.vars[index];
}
}
|
|
|