/*! * Print simulation results to standard output */ void printSimulationResultsForTed_pedigreeDepth(PedigreeDepthStorage *pdStorage, bool cellProductionConstraintsMet, bool fecundityScheduleConstraintsMet, bool allConstraintsMet, ProgramOptionParser *opt) { // print pedigree depth (i.e., value that Ted's optimizer is minimizing) float valueBeingOptimized = 0; string option_str(opt->fitnessMetric.c_str()); if (option_str.find("meanPedigreeDepthMeioticCells:")!=string::npos) {valueBeingOptimized = pdStorage->pd_AllCellsEnterMeioticRegion->mean();} else if (strcmp(option_str.c_str(),"spermOocyteMean")==0) {valueBeingOptimized = pdStorage->pd_spermOocyte->mean();} else if (strcmp(option_str.c_str(),"spermOocyteSum")==0) {valueBeingOptimized = pdStorage->pd_spermOocyteSum->mean();} else if (strcmp(option_str.c_str(),"generationRate")==0) {float r = calculateGenerationFitness(pdStorage->simulatedFecunditySchedule,pdStorage->fecundityConstraints,pdStorage->pd_spermOocyte->mean(),opt->deleteriousMutationRate,opt->maximalGenerationRate,opt->maximalPedigreeDepth);valueBeingOptimized = -r;} else if (strcmp(option_str.c_str(),"generationRate2")==0) {float r = calculateGenerationFitness_selectionCoefficient(pdStorage->simulatedFecunditySchedule,pdStorage->fecundityConstraints,pdStorage->pd_spermOocyte->mean(),opt->deleteriousMutationRate,opt->maximalGenerationRate,opt->maximalPedigreeDepth);valueBeingOptimized = -r;} else {std::cerr << "Invalid choice of fitnessScoringMethod" << endl;exit(1);} printf("%f\n",valueBeingOptimized); // print whether cell production constraints (cpc) met printf("%d\n", cellProductionConstraintsMet); // print whether fecundity constraints (fc) met printf("%d\n", fecundityScheduleConstraintsMet); // print whether all constraints met printf("%d\n", allConstraintsMet); // print pedigree depth of individual simulations runs if (option_str.find("meanPedigreeDepthMeioticCells:")!=string::npos) {pdStorage->pd_AllCellsEnterMeioticRegion->display();} else if (strcmp(option_str.c_str(),"spermOocyteMean")==0) {pdStorage->pd_spermOocyte->display();} else if (strcmp(option_str.c_str(),"spermOocyteSum")==0) {pdStorage->pd_spermOocyteSum->display();} else if (strcmp(option_str.c_str(),"generationRate")==0) { Array1D<float> output; output.resize(pdStorage->pd_spermOocyte->size()); float r = calculateGenerationFitness(pdStorage->simulatedFecunditySchedule,pdStorage->fecundityConstraints,pdStorage->pd_spermOocyte->mean(),opt->deleteriousMutationRate,opt->maximalGenerationRate,opt->maximalPedigreeDepth); for (int i=0;i<pdStorage->pd_spermOocyte->size();i++) { output(i) = -r; } output.display(); } else if (strcmp(option_str.c_str(),"generationRate2")==0) { Array1D<float> output; output.resize(pdStorage->pd_spermOocyte->size()); float r = calculateGenerationFitness_selectionCoefficient(pdStorage->simulatedFecunditySchedule,pdStorage->fecundityConstraints,pdStorage->pd_spermOocyte->mean(),opt->deleteriousMutationRate,opt->maximalGenerationRate,opt->maximalPedigreeDepth); for (int i=0;i<pdStorage->pd_spermOocyte->size();i++) { output(i) = -r; } output.display(); } else {std::cerr << "Invalid choice of fitnessScoringMethod" << endl;exit(1);} // print whether cell production constraint is met for individual simulation runs Array2D<float>::array_index dimx_cellProduction,dimy_cellProduction; pdStorage->simulatedCellProductionSchedule->getDimensions(dimx_cellProduction,dimy_cellProduction); for (int x=0;x<dimx_cellProduction;x++) { bool constraintsSatisfied=true; for (int y=0;y<dimy_cellProduction;y++) { if ((*pdStorage->simulatedCellProductionSchedule)(x,y)>(*pdStorage->cellProductionConstraints)(0,y)) { constraintsSatisfied=false; break; } } if (opt->constraintMethod.compare("none")==0){ constraintsSatisfied=true; } printf("%d",constraintsSatisfied); if (x!=dimx_cellProduction-1) { printf(","); } } printf("\n"); // print whether fecundity constraint is met for individual simulation runs Array2D<float>::array_index dimx_simulatedFecundity, dimy_simulatedFecundity; pdStorage->simulatedFecunditySchedule->getDimensions(dimx_simulatedFecundity,dimy_simulatedFecundity); for (Array2D<float>::array_index x=0;x<dimx_simulatedFecundity;x++) { bool constraintsSatisfied=true; int sum_sim = 0; int sum_sched = 0; for (int y=0;y<dimy_simulatedFecundity;y++) { if (y==0) { // check sperm constraint int numSperm_sim = boost::math::iround((*pdStorage->simulatedFecunditySchedule)(x,y)); int numSperm_sched = opt->numSperm; // boost::math::iround((*pdStorage->fecundityConstraints)(0,y)); if (numSperm_sim!=numSperm_sched) { constraintsSatisfied=false; break; } } else { // check oocyte constraint sum_sim+=ceil((*pdStorage->simulatedFecunditySchedule)(x,y)); sum_sched+=boost::math::iround((*pdStorage->fecundityConstraints)(y)); if (sum_sim<sum_sched) { constraintsSatisfied=false; break; } } } if (opt->constraintMethod.compare("none")==0){ constraintsSatisfied=true; } printf("%d",constraintsSatisfied); if (x!=dimx_simulatedFecundity-1) { printf(","); } } printf("\n"); // print cell production time constraints for individual runs for (int i=0;i<dimy_cellProduction;i++) { printf("%f",(*pdStorage->cellProductionConstraints)(0,i)); if (i!=dimy_cellProduction-1) { printf(","); } } printf("\n"); // print cell production times for individual runs for (int i=0;i<dimy_cellProduction;i++) { for (int j=0;j<dimx_cellProduction;j++) { printf("%f",(*pdStorage->simulatedCellProductionSchedule)(j,i)); if (j!=dimx_cellProduction-1) { printf(","); } } printf("\n"); } // print fecundity constraints for individual runs int sumConstraint=0; for (int i=0;i<dimy_simulatedFecundity;i++) { int constraint; if (i==0) { constraint = opt->numSperm; } else { constraint = boost::math::iround((*pdStorage->fecundityConstraints)(i)); } sumConstraint+=constraint; printf("%d",sumConstraint); if (i!=dimy_simulatedFecundity-1) { printf(","); } } printf("\n"); // print fecundity for individual runs Array1D<float> sumGamete; sumGamete.resize(dimx_cellProduction); for (int i=0;i<dimy_simulatedFecundity;i++) { for (int j=0;j<dimx_cellProduction;j++) { sumGamete(j)+=(*pdStorage->simulatedFecunditySchedule)(j,i); printf("%d",boost::math::iround(sumGamete(j))); if (j!=dimx_cellProduction-1) { printf(","); } } printf("\n"); } }
/*! * Print simulation results to standard output when MR constraints are not satisfied. * These results fixed to very high pedigree depths / non-satisfied constraints */ void printSimulationResultsForTed_pedigreeDepth_badMR(PedigreeDepthStorage *pdStorage, ProgramOptionParser *opt) { // print pedigree depth (i.e., value that Ted's optimizer is minimizing) printf("999\n"); // print whether cell production constraints (cpc) met printf("0\n"); // print whether fecundity constraints (fc) met printf("0\n"); // print whether all constraints met printf("0\n"); // print pedigree depth of individual simulations runs Array1D<float> temp; Array1D<float>::array_index numRuns = pdStorage->pd_AllCellsEnterMeioticRegion->size(); temp.resize(numRuns); temp.fill(999); temp.display(); // print whether cell production constraint is met for individual simulation runs Array2D<float>::array_index dimx_cellProduction,dimy_cellProduction; pdStorage->simulatedCellProductionSchedule->getDimensions(dimx_cellProduction,dimy_cellProduction); for (int x=0;x<dimx_cellProduction;x++) { printf("0"); if (x!=dimx_cellProduction-1) { printf(","); } } printf("\n"); // print whether fecundity constraint is met for individual simulation runs Array2D<float>::array_index dimx_simulatedFecundity, dimy_simulatedFecundity; pdStorage->simulatedFecunditySchedule->getDimensions(dimx_simulatedFecundity,dimy_simulatedFecundity); for (Array2D<float>::array_index x=0;x<dimx_simulatedFecundity;x++) { printf("%d",false); if (x!=dimx_simulatedFecundity-1) { printf(","); } } printf("\n"); // print cell production time constraints for individual runs for (int i=0;i<dimy_cellProduction;i++) { printf("%f",(*pdStorage->cellProductionConstraints)(0,i)); if (i!=dimy_cellProduction-1) { printf(","); } } printf("\n"); // print cell production times for individual runs for (int i=0;i<dimy_cellProduction;i++) { for (int j=0;j<dimx_cellProduction;j++) { printf("999"); if (j!=dimx_cellProduction-1) { printf(","); } } printf("\n"); } // print fecundity constraints for individual runs int sumConstraint=0; for (int i=0;i<dimy_simulatedFecundity;i++) { int constraint; if (i==0) { constraint = opt->numSperm; } else { constraint = boost::math::iround((*pdStorage->fecundityConstraints)(i)); } sumConstraint+=constraint; printf("%d",sumConstraint); if (i!=dimy_simulatedFecundity-1) { printf(","); } } printf("\n"); // print fecundity for individual runs Array1D<float> sumGamete; sumGamete.resize(dimx_cellProduction); for (int i=0;i<dimy_simulatedFecundity;i++) { for (int j=0;j<dimx_cellProduction;j++) { sumGamete(j)+=(*pdStorage->simulatedFecunditySchedule)(j,i); printf("%d",boost::math::iround(sumGamete(j))); if (j!=dimx_cellProduction-1) { printf(","); } } printf("\n"); } }