Here is my parameter file: parent.0 = ../moosuite/moosuite.params eval.problem = ec.app.BusStopRelocationProblem.BusStopRelocationProblem generations = 10000 quit-on-run-complete = true pop.subpop.0.size = 50 pop.subpop.0.species = ec.vector.GeneVectorSpecies pop.subpop.0.species.ind = ec.vector.GeneVectorIndividual pop.subpop.0.species.gene = ec.app.BusStopRelocationProblem.BusProblemLine pop.subpop.0.species.fitness.num-objectives = 2 pop.subpop.0.species.fitness.maximize = false pop.subpop.0.species.genome-size = 7800 pop.subpop.0.species.crossover-type = one pop.subpop.0.species.mutation-type = reset pop.subpop.0.species.mutation-prob = 0.01 pop.subpop.0.species.pipe = ec.vector.breed.VectorMutationPipeline pop.subpop.0.species.pipe.likelihood = 1.0 pop.subpop.0.species.pipe.source.0 = ec.vector.breed.VectorCrossoverPipeline pop.subpop.0.species.pipe.source.0.likelihood = 0.75 pop.subpop.0.species.pipe.source.0.source.0 = ec.select.TournamentSelection pop.subpop.0.species.pipe.source.0.source.1 = same select.tournament.size = 2 seed.0 = time Logging step by step state.population it seems to be null. However, this is the code of my reset method (inside my BusProblemLine class with extends from Gene): setK(), getK() and addStop() are functions from the class and I believe is nos important in the NPE. public void reset(EvolutionState state, int thread) { final GeneVectorSpecies species = (GeneVectorSpecies) state.population.subpops[0].species; DTMatrix[][] matrix = species.getMatrix(); Map<Integer, DTCoordinates> coordinates = species.getCoordinates(); Map<Integer, Integer> lines = species.getCorrelation(); for (Entry<Integer, Integer> entry : lines.entrySet()) { int line = entry.getKey(); int posicion = entry.getValue(); this.line = line; this.k = Parameters.getParameterInt("MaxQuantity"); Iterator<Integer> order = species.getorder().get(line).iterator(); while(order.hasNext()){ int aux = order.next(); if(matrix[posicion][aux] != null){ BusStop bps; int down = 0; int on = 0; if (matrix[posicion][aux].getdown() > 0) down = mt.nextInt(matrix[posicion][aux].getdown()); if (matrix[posicion][aux].geton() > 0) on = mt.nextInt(matrix[posicion][aux].geton()); if(getK() >= (on - down)){ bps = new BusStop(on,down,aux,coordinates.get(aux).getLatitud(),coordinates.get(aux).getLogitud(),0); } else { bps = new BusStop(getK() + down,down,aux,coordinates.get(aux).getLatitud(),coordinates.get(aux).getLogitud(),0); } setK(getK() + bps.getdown()); setK(getK() - bps.geton()); addStop(bps); } } } } Thanks a lot for your support. 2016-12-30 12:44 GMT-03:00 Eric 'Siggy' Scott <[log in to unmask]>: > Hmm. That is odd, because, from what I can see, ECJ only calls the > Gene.reset() method *via* the VectorSpecies class—so state.population. > subpops[0].species should not be null at the time your method is called. > > If you share your parameter file and the code for your reset() method I > can see if any obvious issue jumps out to me as the cause for the NPE. > > On Thu, Dec 29, 2016 at 4:08 PM, Enzo Fabbiani <[log in to unmask]> > wrote: > >> Eric, >> >> I was able to get access to problem information by adding those sentence >> in my code in the reset function (not setup), but I'm getting null pointer >> exception when trying to retrieve the Species object. >> >> 2016-12-28 21:54 GMT-03:00 Eric 'Siggy' Scott <[log in to unmask]>: >> >>> Enzo, >>> >>> Were you able to solve your problem? Or could you still use assistance? >>> >>> The usual way to access information in another class when initializing >>> an object in ECJ is to use the global EvolutionState object to walk through >>> the program's state and find what you want. >>> >>> So, in the 'setup()' method of your BusProblemLine class, you would >>> retrieve the Species object with something like this: >>> >>> final GeneVectorSpecies species = (GeneVectorSpecies) >>> state.population.subpops[0].species; >>> >>> >>> On Mon, Dec 19, 2016 at 9:11 AM, Enzo Fabbiani <[log in to unmask]> >>> wrote: >>> >>>> Hi there, I'm facing some trouble when trying to initialize population. >>>> >>>> My custom class BusProblemLine (which extends from Gene) implements >>>> reset function. >>>> >>>> In order to do that, some problem information is needed. This info is >>>> read from files and loaded into atributes in the setup function in >>>> GeneVectorSpecies and can be accessed from evaluate function in my problem >>>> class. >>>> >>>> How can I access to this information in BusProblemLine to initialize >>>> the population (as well as mutate and crossover). >>>> >>>> I've tried to read data in the reset function but it explodes for out >>>> of memory. What is more, it gets initializing more times than the >>>> population size, is this ok? >>>> >>>> Regards, >>>> Enzo >>>> >>> >>> >>> >>> -- >>> >>> Ph.D student in Computer Science, George Mason University >>> CFO and Web Director, Journal of Mason Graduate Research >>> http://mason.gmu.edu/~escott8/ >>> >> >> > > > -- > > Ph.D student in Computer Science, George Mason University > CFO and Web Director, Journal of Mason Graduate Research > http://mason.gmu.edu/~escott8/ >