Print

Print


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:

   1. 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.

   2. 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
> <https://cs.gmu.edu/~eclab/projects/ecj/docs/classdocs/ec/vector/FloatVectorSpecies.html>
> .
>
> 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/