Print

Print


Ah, yes, it looks like both IntegerVectorSpecies and BitVectorSpecies have the same issue.  It affects any parameters that are specific to a mutation type, such as "mutation-bounded" or the Polynomial operator's "random-walk-probability".

GeneVectorSpecies and the base VectorSpecies class are not affected since they don't have different mutation types.

Siggy



On Fri, Jun 5, 2015 at 4:53 PM, Sean Luke <[log in to unmask]> wrote:
Before looking at your mutation-stdev-scale-to-range option, let me ask about the first one.  I think the only change you're making in FloatVectorSpecies is:

-        if (mtype == null) { }  // we're cool
+        if (mtype == null)
+            mutType = mutationType[index];

The question I have is: is this a problem for any of the OTHER per-gene parameter options in FloatVectorSpecies -- or in IntegerVectorSpecies, BitVectorSpecies, VectorSpecies, or GeneVectorSpecies?

Sean

On Jun 4, 2015, at 5:21 PM, Eric 'Siggy' Scott <[log in to unmask]> wrote:

> Okay, attached is a diff patch and JUnit tests for a version of FloatVectorSpecies that implements my idea of what it would mean to automagically scale the stdev.
>
> The patch does two things:
>       • Fixes an issue with setting gene-specific mutation parameters.  Before, if you attempted to set a gene-specific mutation parameter in the following way, it would be ignored:
> pop.subpop.0.species.mutation-type =    gauss
> pop.subpop.0.species.mutation-stdev =   0.1
> pop.subpop.0.species.mutation-stdev.0 =   0.5
>
> You had to add this redundant line to get the gene-specific value to register:
>
> pop.subpop.0.species.mutation-type.0 =   gauss
>
> Now this line is optional.
>
>       • Adds a Boolean parameter named "mutation-stdev-scale-to-range" for toggling scaling at the global, gene or segment level.  When it's set to true, the stdev parameter is interpreted as a relative standard deviation (i.e. the value of stdev is replaced with stdev*(max-gene - min-gene).  If it's set to false or omitted, the behavior is the same as the original.
> So this is one way of doing it.  With this feature I don't have to hand-calculate reasonable standard deviations if I don't want to. I can tweak the stdev for all the parameters by changing one number.
>
> Now, in my personal projects, I prefer to do things a different way:  I augment my parameter language so that no additional Java code is necessary for this kind of thing.  I would allow expressions made up of references to other parameters, so my settings for each gene would look like this:
>
> pop.subpop.0.species.stdev = 0.1
>
> pop.subpop.0.species.min-gene.0 = 0
> pop.subpop.0.species.max-gene.0 = 100
> pop.subpop.0.species.stdev.0 = $(%pop.subpop.0.species.stdev*(%pop.subpop.0.species.max-gene.0 - %pop.subpop.0.species.min-gene.0))
>
> pop.subpop.0.species.min-gene.1 = 2
> pop.subpop.0.species.max-gene.1 = 3
> pop.subpop.0.species.stdev.1 = $(%pop.subpop.0.species.stdev*(%pop.subpop.0.species.max-gene.1 - %pop.subpop.0.species.min-gene.1))
>
> Here the scaling is done right in the parameter specification.  It makes for a messier properties file, but would allow users to hand-specify what ever kind of scaling they want for this or other parameters.
>
> Allowing references and arithmetic expressions in the parameter language would be a major change to ECJ, though.  There are pros and cons to blurring the line between a parameters file and a declarative programming language.
>
> Siggy
>
> On Thu, Jun 4, 2015 at 12:32 PM, Eric 'Siggy' Scott <[log in to unmask]> wrote:
> It's not in the manual, it's at the top of the Javadoc for FloatVectorSpecies.
>
> On Wed, Jun 3, 2015 at 9:08 PM, Sean Luke <[log in to unmask]> wrote:
> I don't see in the documentation where it says that standard deviation is scaled.  Could you point it out?  Please use the current PDF of the manual on the SVN repository.
>
> Sean
>
> On Jun 3, 2015, at 5:04 PM, Eric Scott <[log in to unmask]> wrote:
>
> > All good questions.  That's why I was looking at the code -- to see how exactly "the standard deviation is scaled to reflect each gene's range."
> >
> > I can specify mutation-stdev's manually for each gene in my application, not a problem.  I suggest that the sentence about scaling be removed from the JavaDoc, as it seems to be erroneous.
> >
> > Thanks!
> > Siggy
> >
> > On Wed, Jun 3, 2015 at 3:38 PM, Sean Luke <[log in to unmask]> wrote:
> > No, wait, it's *not* a bug.  ECJ's stdev is not scaled to fit in bounds.  You'd have to say:
> >
> > >> pop.subpop.0.species.mutation-stdev.0 =   0.0001
> >
> > [or whatever]
> >
> > I understand your intuition here, but stdev is a fixed quantity.  Imagine if someone had the stdev set and then they needed to change the min/max gene, and found that the stdev magically changed as well.  And if it were a relative quantity, what min/max width range would it be relative *to*?
> >
> > Maybe I might be able to add some parameter like mutation-rstdev which sets the stdev on a per-gene basis based on the min and max genes.  But you'd need to give me exactly what it should be relative to and how you think it should be scaled.
> >
> > Sean
> >
> > On Jun 3, 2015, at 8:16 AM, Sean Luke <[log in to unmask]> wrote:
> >
> > > Then that must be a bug.  I can look into it, but if you want to beat me to it, you might check out FloatVectorSpecies.
> > >
> > > Sean
> > >
> > > On Jun 3, 2015, at 4:20 AM, Eric Scott <[log in to unmask]> wrote:
> > >
> > >> Dear Wizards,
> > >>
> > >> The JavaDoc for FloatVectorSpecies claims that when using Guassian mutation, "if the gene-by-gene range is used, than the standard deviation is scaled to reflect each gene's range."
> > >>
> > >> As far as I can tell, however, this doesn't actually happen.  Stepping through the debugger with the following mutation parameters, I can watch DoubleVectorIndividual.gaussianMutation() as it samples from a std of 0.1 when mutation gene 0.  I would have expected it to scale the std to be 0.0001 or such.
> > >>
> > >> pop.subpop.0.species.min-gene =         -1.0
> > >> pop.subpop.0.species.max-gene =         1.0
> > >> pop.subpop.0.species.min-gene.0 =         -.001
> > >> pop.subpop.0.species.max-gene.0 =         .001
> > >> pop.subpop.0.species.mutation-type =    gauss
> > >> pop.subpop.0.species.mutation-stdev =   0.1
> > >> pop.subpop.0.species.mutation-bounded = true
> > >> pop.subpop.0.species.mutation-prob =    0.03
> > >>
> > >> Is this an error in the documentation? Or am I missing something?
> > >>
> > >> Thanks,
> > >> Siggy
> > >>
> > >> --
> > >>
> > >> Ph.D student in Computer Science
> > >> George Mason University
> > >> http://mason.gmu.edu/~escott8/
> >
> >
> >
> > --
> >
> > Ph.D student in Computer Science
> > George Mason University
> > http://mason.gmu.edu/~escott8/
>
>
>
> --
>
> Ph.D student in Computer Science
> George Mason University
> http://mason.gmu.edu/~escott8/
>
>
>
> --
>
> Ph.D student in Computer Science
> George Mason University
> http://mason.gmu.edu/~escott8/

>





--

Ph.D student in Computer Science
George Mason University
http://mason.gmu.edu/~escott8/