How about using a hash table to implement the variable lookup? i.e. your
Variable class just holds a single String and calls
myProblem.getVariable(stringName) etc. to retrieve a value, or
myProblem.setVariable(stringName,newValue) to modify the value.
Not as fast as an array but maybe easier to debug?
Is it also possible to make this parameter-based:
ec.problem.MyProblem.num_variables = 10
ec.problem.MyProblem.variables.0 = tmp_i
ec.problem.MyProblem.variables.1 = loop_index
ec.problem.MyProblem.variables.9 = etc.
...and then modify ECJ to add instances of your Variable class for each
variable name before a run begins? I guess Sean would know the place
best way of doing this.
If you're using strong typing, you'll need a separate hash table for
each type of variable you're using, and then either one Variable class
per type or else a "type" parameter and corresponding changes to your
Variable and Problem classes.
Sean Luke wrote:
> Vlad Palnik wrote:
>> 1 Has anyone found a solution which avoids
>> building a unique class for every variable in
>> a problem. Say you have over a thousand
>> variables, is there a way to define a single
>> class which returns different variables ???
>> (I believe this is partly due to how java works)
> I'm not sure what you mean by 'variable' here, but let's assume you
> mean something like the 'X' in Symbolic Regression. The answer is:
> sure, of course. Instead of an X.java and Y.java etc., just make a
> Variable.java file. In this file, make a subclass of ERC.java.
> You're responsible for creating at least the resetNode(), encode(),
> and nodeEquals() methods, and probably will want to define the
> toString() method too. Your ERC's value will be an integer from
> 0..N-1 where N is the number of variables. You'd store that value as
> an instance variable. Your toString() method etc. would likely print
> out not the number but a pretty version of the variable (printing out
> 'X' instead of 1, 'Y' instead of 2, etc.).
> Now we just have a global array, of size N, stored in your Problem
> class. Each slot holds the current value of one of the variables.
> When your method is evaluated, you just go to that slot and return its
David R White
Dept. of Computer Science
University of York,
Heslington, YO10 5DD