Hey Uday, thanks to you I got the first version of my GPTree (still not usable). I'm still not used with the representation of a rule as some tree constraints, but I think this is only a matter of usage. What do you mean with positive class and negative class? Greetings Bojan ----- Ursprüngliche Mail ----- Von: "Uday kamath" <[log in to unmask]> An: [log in to unmask] Gesendet: Freitag, 24. Mai 2013 03:52:40 Betreff: Re: Postprocessing in ec.gp Bojan As i wrote before that my Rules are of condition->action format. The action is determined by evaluating the GP Individual where fitness is the "rule coverage" for the class. The condition is a GPTree with constraints defined as below Boolean Functions: AND, OR, NOT takes condition or boolean returns boolean Operators: >,<,= takes two nodes attribute and value ranges and returns condition Attribute: (Set of all attribute values) leaf node with no child Value: ERCs or Constants, leaf node with no child Basically the GPTrees forms complex Rules like (Person.age > 45) AND (Person.state = Virginia) GPIndividual covers positive class in 80% cases and negative class in 20%, so the discrimination power of rule and coverage become the fitness value. Hope this helps Uday On Thu, May 23, 2013 at 9:40 AM, Bojan Janisch <[log in to unmask]> wrote: > 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 >>>>