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




--

Ph.D student in Computer Science, George Mason University
CFO and Web Director, Journal of Mason Graduate Research