(Excuse the newbiness, pointers to FAQs gladly accepted, etc.)

I'm evolving LongVectorIndividuals.  I'd like to use the entire range
of the long type, because it's secretly a packed binary
representation of what I'm breeding.

Is there a way to not specify min-gene and max-gene?  I tried leaving
them out:

pop.subpop.0.species            = ec.vector.IntegerVectorSpecies
pop.subpop.0.species.ind        = ec.vector.LongVectorIndividual
# Other setup details omitted

and got this:

Initializing Generation 0
IntegerVectorSpecies must have a default min-gene which is <= the
default max-gene
PARAMETER: pop.subpop.0.species.max-gene
      ALSO: vector.species.max-gene

I also tried including the max and min value for a long:

pop.subpop.0.species.min-gene   = -9223372036854775808
pop.subpop.0.species.max-gene = 9223372036854775807


Initializing Generation 0
Exception in thread "main" java.lang.IllegalArgumentException: n must
be positive
        at ec.util.MersenneTwisterFast.nextLong(
        at ec.vector.LongVectorIndividual.reset(
        at ec.vector.VectorSpecies.newIndividual(
        at ec.Subpopulation.populate(
        at ec.Population.populate(
        at ec.simple.SimpleInitializer.initialPopulation
        at ec.simple.SimpleEvolutionState.startFresh
        at ec.Evolve.startFresh(
        at ec.Evolve.main(

This happens, no doubt, because LongVectorIndividual.reset() tries
something to the effect of (max-gene - min-gene), resulting in an

I was able to work around the problem by subclassing
LongVectorIndividual, overriding reset() and defaultMutate().

Is there a better way?


Peter Drake
Assistant Professor of Computer Science
Lewis & Clark College