Now that I think about it, I would call super.postEvaluationStatistics(state) AFTER you do the manipulation. That way no statistics are outputted until you have had a chance to manipulate the fitness values.
Sean
> My suggestion would be to create a Statistics class:
>
> public MyStatistics extends Statistics
> {
> public void postEvaluationStatistics(final EvolutionState state)
> {
> super.postEvaluationStatistics(state); // always call this
>
> // Here you can manipulate state.population.subpops[0].individuals
> // however you like
> }
> }
>
> Then I'd just add this class to the Statistics chain:
>
> stat.num-children = 1
> stat.child.0 = MyStatistics
>
> Sean
>
> On Jul 29, 2014, at 5:23 PM, Eric Scott <[log in to unmask]> wrote:
>
>> The post-evaluation stage is only for running statistics.
>>
>> Look in the evolve() method of your EvolutionState -- that has the high-level loop. You'll probably want to customize your Evaluator to add a post-processing step, leaving the EvolutionState as is.
>>
>> Siggy
>>
>>
>> On Tue, Jul 29, 2014 at 11:02 AM, Márcio Basgalupp <[log in to unmask]> wrote:
>> Thank you Ye.
>>
>> That's true.
>>
>> But my question is: where (in the code) is this post-evaluation stage?
>>
>> Best,
>> Márcio
>> --------
>> Prof. Dr. Márcio Porto Basgalupp
>> Instituto de Ciência e Tecnologia (ICT)
>> Universidade Federal de São Paulo (UNIFESP)
>> Tel: +55 12 3309-9582
>>
>>
>> On Tue, Jul 29, 2014 at 11:40 AM, Xiaomeng Ye <[log in to unmask]> wrote:
>>> It has been a while since I last used ECJ. I could be totally wrong.
>>>
>>> I remember there is a post-evaluation stage for each generation in the
>>> evolution. If I am going to divide all fitness values by the biggest one. I
>>> will do it in this post-evaluation stage.
>>>
>>> This post-evaluation stage is probably between the evaluation stage (where
>>> the fitness are calculated) and the breeding stage (where crossover/mutation
>>> happens).
>>>
>>>
>>> On Tue, Jul 29, 2014 at 10:18 AM, Márcio Basgalupp <[log in to unmask]>
>>> wrote:
>>>>
>>>> Dear all,
>>>>
>>>> I'm using ECJ for implementing a GP based-program. After evaluating
>>>> (compute fitness) all individuals, I would like to "update" these
>>>> fitness values (for example, divide all fitness values by the biggest
>>>> one). However, I couldn't find where (which class) I have to do that.
>>>> It should be where ECJ calls the method evaluate() for each
>>>> individual, then I could update before proceeding to the next steps
>>>> (select, genetic operators, ...).
>>>>
>>>> I would appreciate if someone help me.
>>>>
>>>> Best,
>>>> Márcio
>>>>
>>>> --------
>>>> Prof. Dr. Márcio Porto Basgalupp
>>>> Instituto de Ciência e Tecnologia (ICT)
>>>> Universidade Federal de São Paulo (UNIFESP)
>>>> Tel: +55 12 3309-9582
>>>
>>>
>>
>>
>>
>> --
>>
>> Ph.D student in Computer Science
>> George Mason University
>> http://mason.gmu.edu/~escott8/
>
|