void Neatzsche_MPI::outputPopulation(Population * pop, unsigned int nodes, Coevolution * c, unsigned int i, bool lastgen) { unsigned int s = pop->getMembers()->size(); unsigned int n = (s-i)/nodes; bool uneven = (floor((s-i)/(double)n)!=(s-i)/(double)n); GeneSmall * gsv = NULL; NeuralNodeSmall * nsv = NULL; Genome * genome = NULL; int genes, nnodes; int sendtag = Neatzsche_MPI::MPI_Cont; string sftype; int sc=0; if(lastgen) sendtag = MPI_Stop; else sendtag = MPI_Cont; while(i < s) { if(uneven && (s-i)<(2*n)){ n = (s-i); } sc = (sc % (size-1))+1; MPI::COMM_WORLD.Send(&n,1,MPI_INT,sc,0);//send number of genomes incoming for(size_t i2 = 0; i2 < n && i < s; i2++, i++) { genome = pop->getMembers()->at(i)->getGenome(); genome->toSmall(nsv,gsv,&nnodes,&genes); MPI::COMM_WORLD.Send(&i,1,MPI_INT,sc,0);//send genome id.. MPI::COMM_WORLD.Send(&nnodes,1,MPI_INT,sc,0);//send number of nodes MPI::COMM_WORLD.Send(&genes,1,MPI_INT,sc,0);//send number of genes nodetype = Build_neuralnode_type(&nsv[0]); MPI::COMM_WORLD.Send(nsv,nnodes,nodetype,sc,0);//send node vector for(int i=0;i<nnodes;i++){ sftype = ""; sftype = genome->getNodes()->at(i)->getTFunc()->ftype; MPI::COMM_WORLD.Send(sftype.c_str(),sftype.length(),MPI::CHAR,sc,0);//send gene vector } genetype = Build_gene_type(&gsv[0]); MPI::COMM_WORLD.Send(gsv,genes,genetype,sc,0);//send gene vector if(nnodes>0) delete[] nsv; if(genes>0) delete[] gsv; } MPI::COMM_WORLD.Send(&sendtag,1,MPI::INT,sc,0);//send stop or not } }