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/