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/
>