Print

Print


Hey Uday,

I appreciate your help and I'm sorry to bother you further but I don't get the GPTree working.
Currently I'm hanging on the problem that a GPTypeSet cannot have a GPTypeSet as it's child,
maybe because of the growth.

Could you explain me with an example how you represented a rule as a GPTree? 

Greetings from Germany

Bojan

----- Ursprüngliche Mail -----
Von: "Uday kamath" <[log in to unmask]>
An: [log in to unmask]
Gesendet: Donnerstag, 16. Mai 2013 16:45:03
Betreff: Re: Postprocessing in ec.gp

Bojan

You need to give the parameters needed, the manual specifies them and
here is the example

***************************************************************************************************
pop.subpop.0.species.pipe.source.0=ec.gp.breed.SizeFairCrossoverPipeline
gp.breed.size-fair.source.0=ec.select.TournamentSelection
gp.breed.size-fair.source.1=same
gp.breed.size-fair.ns.0=ec.gp.koza.KozaNodeSelector
gp.breed.size-fair.ns.1=ec.gp.koza.KozaNodeSelector
gp.breed.size-fair.tries=20
gp.breed.size-fair.homologous=true
gp.breed.size-fair.maxdepth=25
***********************************************************************************************************

Uday


On Thu, May 16, 2013 at 10:10 AM, Bojan Janisch
<[log in to unmask]> wrote:
> Hey Uday,
>
> I'm trying to get the SizeFairCrossoverPipeline into my BreedingPipeline, but seems that I'm missing an argument or so. I'm getting this error stack:
>
> Initializing Generation 0
> Exception in thread "main" ec.util.ParamClassLoadException:
> No class name provided.
> PARAMETER: pop.subpop.0.species.pipe.source.0.source.0
>      ALSO: gp.breed.size-fair.source.0
>         at ec.util.ParameterDatabase.getInstanceForParameter(ParameterDatabase.java:420)
>         at ec.BreedingPipeline.setup(BreedingPipeline.java:190)
>         at ec.gp.breed.SizeFairCrossoverPipeline.setup(SizeFairCrossoverPipeline.java:160)
>         at ec.BreedingPipeline.setup(BreedingPipeline.java:192)
>         at ec.breed.MultiBreedingPipeline.setup(MultiBreedingPipeline.java:66)
>         at ec.Species.setup(Species.java:218)
>         at ec.gp.GPSpecies.setup(GPSpecies.java:45)
>         at ec.Subpopulation.setup(Subpopulation.java:166)
>         at ec.Population.setup(Population.java:142)
>         at ec.simple.SimpleInitializer.setupPopulation(SimpleInitializer.java:55)
>         at ec.simple.SimpleInitializer.initialPopulation(SimpleInitializer.java:46)
>         at ec.simple.SimpleEvolutionState.startFresh(SimpleEvolutionState.java:54)
>         at ec.EvolutionState.run(EvolutionState.java:438)
>         at ec.Evolve.main(Evolve.java:750)
>
> while using these parameters for breeding pipeline:
>
> op.subpop.0.species.pipe = ec.breed.MultiBreedingPipeline
> # Koza's decision here was odd...
> pop.subpop.0.species.pipe.generate-max = false
> # Subsidiary pipelines:
> pop.subpop.0.species.pipe.num-sources = 2
> pop.subpop.0.species.pipe.source.0 = ec.gp.breed.SizeFairCrossoverPipeline
> pop.subpop.0.species.pipe.source.0.prob = 0.9
> pop.subpop.0.species.pipe.source.1 = ec.breed.ReproductionPipeline
> pop.subpop.0.species.pipe.source.1.prob = 0.1
>
> Simply changed the CrossoverPipeline to SizeFairCrossoverPipeline in the koza.params which I'm using as parent params-file. Could you please also explain
> how do you managed to get a variable amount of conditions for your rule-tree? Or does every rule has the same amount of conditions?
> Currently I'm using 5 different tree constraints where each tree represent a rule with a different amount of children. (I don't know set this to random,
> maybe if I know more about the evolution process in detail, but I don't know where I could find such an information)
>
> Greetings from Germany
>
> Bojan
>
> ----- Ursprüngliche Mail -----
> Von: "Uday kamath" <[log in to unmask]>
> An: [log in to unmask]
> Gesendet: Freitag, 26. April 2013 01:14:26
> Betreff: Re: AW: Re: Postprocessing in ec.gp
>
>
> Bojan
>
>
> Some of the measures i have in my Rules generation are
> 1. Use Homologous Crossover instead of Standard Subtree Crossover, works very effectively in reducing the size or 'bloat' of trees. ECJ now has the Homologous or SizeFair crossover.
> 2. As sean mentioned, i have mutation operator that "removes" the subtree in the pipeline. Only thing is if the fitness is not changed or below an epsilon, i accept it. ECJ has bunch of delete or raise mutation for GP trees.
> 3. In my final interpreter i have a Simplifier for Boolean Expression, which does logical reduction based on karnaugh maps.
>
>
> With these three mechanism i was able to get meaningful and pruned Rules.
> Hope that helps
> Uday
>
>
>
> On Thu, Apr 25, 2013 at 6:58 PM, Sean Luke < [log in to unmask] > wrote:
>
>
> Pruning will be up to you. But you have two ways you can hook into ECJ to do it.
>
> 1. You can create a BreedingPipeline which prunes the trees handed it by its children. This is essentially a mutation mechanism during breeding of individuals. You'd probably set this up as the top-level pipeline, with the standard Koza pipeline structure underneath it, so it's the last thing that operates on new individuals.
>
> 2. Perhaps a better approach would be simply to prune the individual during fitness evaluation prior to testing it.
>
> Sean
>
> Begin forwarded message:
>
>> From: Bojan Janisch < [log in to unmask] >
>> Date: April 25, 2013 5:27:32 PM EDT
>> To: [log in to unmask]
>> Subject: AW: Re: Postprocessing in ec.gp
>> Reply-To: ECJ Evolutionary Computation Toolkit < [log in to unmask] >
>
>
>>
>> Hi Uday,
>> I already have a plan how the represented rule should be evaluated. I'll write an
>> API to JBoss Drools, which is a rule-based System. The Output of the System will
>> be compared to a goldstandard by a comparator which I have to write. It returns a
>> F-Score or something similar to it. The Score goes into the fitness function.
>>
>> But my problem is the pruning. I need a step where I can check a syntax tree for useless
>> part-trees. Otherwise the trees have no limits on how big it can grow. I wanted to check
>> while post-processing the tree, but seems that ECJ does not support it.
>>
>> How did you solve the chunk-condition problem for rules?
>>
>> Greetings
>> Bojan
>>
>>
>> ----- Ursprüngliche Mail -----
>> Von: Uday kamath < [log in to unmask] >
>> An: [log in to unmask]
>> Gesendet: Thu, 25 Apr 2013 17:28:38 +0200 (CEST)
>> Betreff: Re: Postprocessing in ec.gp
>>
>> Bojan
>> There are no pre written post processing out of the box as it depends on
>> the problem (function set of GP). I will give a short background which you
>> may find useful for what you are doing.
>> For generating automated Rules to discriminate certain patterns, i had my
>> GP have basic terminals and non-terminals required for the Rule. I would
>> collect my "exceptional" Rules as a memory pad outside of evolutionary
>> runs, everytime i see some well performing ones. Finally i get a Rule set
>> and wrote my Custom "interpreter" that can parse the GP Individuals as
>> s-expression to evaluate. So ECJ gives you GP and Evolution for free, you
>> need to write custom functions and interpreter for them.
>> Hope that helps
>> Uday
>>
>>
>> On Thu, Apr 25, 2013 at 10:29 AM, Bojan Janisch <
>> [log in to unmask] > wrote:
>>
>>> Hello everyone,
>>>
>>> is there a post-processing-step in the Genetic Programming algorithm? I've
>>> search through the manual,
>>> but did not find an explanation about this topic.
>>>
>>> Thank you and greetings,
>>> Bojan
>>>