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/