After revisiting the code, I realized that my description below is not accurate. I've written an evaluate() method in the Problem class, implementing SimpleProblemForm. This method returns a fitness value; I'm not actually implementing a fitness() method. Within the evaluate() method, I would like to output some local variable values before they are lost, since they are not returned to any calling method. I need to know how to access the parameter base from within evaluate(), so I can output variables to the statistics text file instead of stdout. I think this output will occur before postEvaluationStatistics is called, so I will probably need to output the generation and individual counters along with my local variables.
On Aug 22, 2011, at 3:10 PM, Roger Worden wrote:
> I'm still struggling to figure out how to have my fitness logic output some values to the statistics file, so I can see them in relation to the individual. I don't think I can do it from a statistics hook or from a method on the individual, because the variables are internal to the fitness algorithm. I can see how to find the statisticslog variable, but the fitness object only receives the state, not the parameter base (at least as far as I can see). In the example code, base is passed in to the setup() method, but the fitness method doesn't have a setup() method.
> I can simply output the variables, but they go to stdout instead of the statistics file, and I'd like it to be near the genome output.
> What am I missing? Is there some sample code for how to output variables to the statistics log from within the context of a fitness method?
> On Aug 1, 2011, at 12:41 PM, Sean Luke wrote:
>> On Jul 29, 2011, at 12:15 PM, Roger Worden wrote:
>>> I'm new to Java and OO but with lots of experience in procedural languages,
>>> so I'm struggling a bit with the ECJ class libraries. I have constructed an
>>> evaluator and can see correct results in the genome displayed by the default
>>> statistics methods. Now I need to customize the final results for reporting,
>>> output to a file etc. I'd like to customize finalStatistics, and it seems I need to
>>> customize printFitnessForHumans to get access to the genome so I can
>>> format it.
>>> Can someone post or point me to some sample code for finalStatistics that
>>> shows me how to access the current individual (I'm assuming finalStatistics is
>>> called once per individual), or how to access the whole state from this
>> It sounds like what you're really trying to do is write out some statistics about your genome. Fitness objects don't have anything to do with this -- instead, the genome is handled in the Individual itself. Different representations of Individuals have different kinds of genomes. For example, FloatVectorIndividual holds a genome consisting of an array of floats.
>> Additionally, finalStatistics is called only once, at the end of an evolutionary run. It's not per-individual. I presume you're trying to report stuff on each Individual in the population say. In this case, you could make a finalStatistics which does this:
>> For each subpopulation in the population
>> For each individual in the subpopulation
>> Cast the individual into the type I'm using
>> Grab genome information out of that individual and do stuff with it