Commit 91b9b23b authored by Alexis Lebis's avatar Alexis Lebis

Merge branch 'bugFixBranch' into 'master'

Bug fix branch (nbCourseFix)

See merge request !8
parents 6dfc228f f5cd7216
......@@ -3,4 +3,4 @@ build/
howto.pdf
.vscode/
.cmake/
results/
......@@ -49,6 +49,13 @@ include_directories(${PARADISEO_INCLUDE_DIR})
# the user should choose the build type on windows environments,excepted under cygwin (default=none)
set(CMAKE_DEFAULT_BUILD_TYPE "Release" CACHE STRING "Variable that stores the default CMake build type" FORCE)
add_definitions(-DDEPRECATED_MESSAGES)
set(CMAKE_CXX_FLAGS_DEBUG "-Wunknown-pragmas -O0 -g -fPIC -Wall -Wextra -ansi -pedantic -std=c++11" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_RELEASE "-Wunknown-pragmas -O2 -fPIC -std=c++11" CACHE STRING "" FORCE)
find_program(MEMORYCHECK_COMMAND
NAMES purify valgrind
PATHS
......
......@@ -5,6 +5,7 @@ INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src)
# 2) Define targets: executable and dependencies
ADD_EXECUTABLE(ceao main.cpp)
ADD_EXECUTABLE(ceao2 main2.cpp)
ADD_EXECUTABLE(ceao_competency ceao_competency.cpp)
ADD_EXECUTABLE(ceao_course ceao_course.cpp)
ADD_EXECUTABLE(ceao_profession ceao_profession.cpp)
......@@ -16,6 +17,7 @@ ADD_EXECUTABLE(tryCrossover tryCrossover.cpp)
ADD_EXECUTABLE(tryEval tryEval.cpp)
ADD_DEPENDENCIES(ceao lQueen lModel lEA lCstr)
ADD_DEPENDENCIES(ceao2 lQueen lModel lEA lCstr)
ADD_DEPENDENCIES(ceao_competency lQueen lModel)
ADD_DEPENDENCIES(ceao_course lQueen lModel)
ADD_DEPENDENCIES(ceao_profession lQueen lModel)
......@@ -29,6 +31,7 @@ ADD_DEPENDENCIES(tryEval lQueen)
# 3) Link the librairies for your executable
TARGET_LINK_LIBRARIES(ceao ${PARADISEO_LIBRARIES} lQueen lModel lEA lCstr)
TARGET_LINK_LIBRARIES(ceao2 ${PARADISEO_LIBRARIES} lQueen lModel lEA lCstr)
TARGET_LINK_LIBRARIES(ceao_competency ${PARADISEO_LIBRARIES} lQueen lModel)
TARGET_LINK_LIBRARIES(ceao_course ${PARADISEO_LIBRARIES} lQueen lModel)
TARGET_LINK_LIBRARIES(ceao_profession ${PARADISEO_LIBRARIES} lQueen lModel)
......
......@@ -10,6 +10,7 @@
#include <model/magnitude.h>
#include <model/tools.h>
#include <model/competency.h>
#include <model/decay.h>
#include <model/ea/cursus.h>
#include <model/ea/initializer.h>
......@@ -43,6 +44,7 @@ int main(int argc, char* argv[]){
unsigned int _seedParam = parser.createParam((unsigned int)(0), "seed", "Random number seed", 'S').value();
std::string _outputFile = parser.createParam(std::string("/scratch"), "outputfile", "", '\0', "Representation", true).value();
eo::rng.reseed(_seedParam);
unsigned int localDisplay = parser.createParam((unsigned int)(0), "localDisplay", "whether or not display on local output", 'd', "Param").value();
//PROBLEM PARAMETERS
unsigned int SEED = parser.createParam((unsigned int)(7777), "csdvpSeed", "Seed used for the CSDVP",'s',"Param").value();
......@@ -58,9 +60,14 @@ int main(int argc, char* argv[]){
double MAXMAGN = parser.createParam((double)(0.75), "maxMagn", "maximal magnitude", 'M', "Param").value();
unsigned int MINCBYC = parser.createParam((unsigned int)(1), "minCbyC", "minimal competency by course",'r',"Param").value();
unsigned int MAXCBYC = parser.createParam((unsigned int)(5), "maxCbyC", "maximal competency by course",'R',"Param").value();
unsigned int MINPRE = parser.createParam((unsigned int)(0), "minPre", "minimal competency by course",'p',"Param").value();
unsigned int MAXPRE = parser.createParam((unsigned int)(3), "maxPre", "maximal competency by course",'P',"Param").value();
unsigned int MINPRE = parser.createParam((unsigned int)(0), "minPre", "minimal competency by course",'q',"Param").value();
unsigned int MAXPRE = parser.createParam((unsigned int)(3), "maxPre", "maximal competency by course",'Q',"Param").value();
unsigned int CBYTF = parser.createParam((unsigned int)(2), "cbyTF", "course by time frame to pick",'A',"Param").value();
CursusEval::WEIGHT_ECTS = parser.createParam((double)(1.0), "wECTS", "Weight of ECTS in the fitness value", 'V', "Param").value();
CursusEval::WEIGHT_REPETION = parser.createParam((double)(1.0), "wREP", "Weight of Repetition in the fitness value", 'v', "Param").value();
CursusEval::WEIGHT_JOB = parser.createParam((double)(1.0), "wJob", "Weight of profession in the fitness value", 'w', "Param").value();
CursusEval::WEIGHT_PREREQ = parser.createParam((double)(1.0), "wPrereq", "Weight of prerequisites in the fitness value", 'W', "Param").value();
DecayEngine::IS_DECAY_DEACTIVATED = parser.createParam((int)(0), "decayDeactivated", "Wether or not the decay is deactivated", 'D', "Param").value();
//PROFESSION PARAMETERS
unsigned int JOB_SEED = parser.createParam((unsigned int)(7777), "jobSeed", "Seed used for the Profession", 'g', "Param").value();
......@@ -75,10 +82,12 @@ int main(int argc, char* argv[]){
double PCROSS = parser.createParam((double)(0.5), "pCross", "crossover rate", 'X', "Evolution Engine").value();
unsigned int NBGEN = parser.createParam((unsigned int)(100), "nbGen", "Number of generation",'G',"Param").value();
unsigned int SIZET = parser.createParam((unsigned int)(7), "sizeT", "Tournament Size",'F',"Param").value();
RATIO_RANDOM_VS_BEST = parser.createParam((unsigned int)(75), "ratioBest", "Ratio between full random and best while prereq check fails in mutation",'B',"Param").value();
// ===== PB CONFIG ZONE =====
CSDVP pb;
Profession job;
std::cout << "nb cours: ---> " << NBCOURSES << std::endl;
pb.set_cfg_quantityCourses(NBCOURSES);
pb.set_cfg_quantityCompetencies(NBCOMP);
pb.set_cfg_minimalTimeFrames(MINTF);
......@@ -152,7 +161,8 @@ int main(int argc, char* argv[]){
eoSGATransform<Cursus> transform(cross, PCROSS, mut, PMUT);
eoDetTournamentSelect<Cursus> selectOne(SIZET);
eoSelectPerc<Cursus> select(selectOne);
eoGenerationalReplacement<Cursus> replace;
eoGenerationalReplacement<Cursus> genReplace;
eoWeakElitistReplacement<Cursus> replace(genReplace);
//POPULATION INITIALISATION
eoPop<Cursus> pop;
......@@ -269,14 +279,45 @@ int main(int argc, char* argv[]){
// ================================= RUN ZONE ===============================
std::string filename=_outputFile + "/bestsol.";
std::ostringstream oss;
oss << _seedParam;
filename+=oss.str();
std::ofstream outputfile(filename.c_str(), std::ios::app);
oss.str("");
filename=_outputFile + "/pop.";
oss << _seedParam;
filename+=oss.str();
std::ofstream outputfile2(filename.c_str(), std::ios::app);
oss.str("");
filename=_outputFile + "/req.";
oss << _seedParam;
filename+=oss.str();
std::ofstream outputfile3(filename.c_str(), std::ios::app);
oss.str("");
filename=_outputFile + "/solsstats.";
oss << _seedParam;
filename+=oss.str();
std::ofstream outputfile4(filename.c_str(), std::ios::app);
std::pair<bool, double> resECTS;
std::pair<bool, double> resRep ;
std::pair<bool, double> resJob ;
std::pair<bool, double> resPrq ;
if(localDisplay)
{
std::cout << "===== CURRENT POP =====" << std::endl;
pop.best_element().printOn(std::cout);
std::cout << " fitness:" << pop.best_element().fitness() << std::endl;
std::cout << "Stats & metrics: \n" << std::endl;
std::pair<bool, double> resECTS = ctrECTS.integrityCheck(pop.best_element());
std::pair<bool, double> resRep = ctrRep.integrityCheck(pop.best_element());
std::pair<bool, double> resJob = ctrJob.integrityCheck(pop.best_element());
std::pair<bool, double> resPrq = ctrPrq.integrityCheck(pop.best_element());
resECTS = ctrECTS.integrityCheck(pop.best_element());
resRep = ctrRep.integrityCheck(pop.best_element());
resJob = ctrJob.integrityCheck(pop.best_element());
resPrq = ctrPrq.integrityCheck(pop.best_element());
std::cout << "ECTS: ";
if(resECTS.first)
......@@ -306,13 +347,59 @@ int main(int argc, char* argv[]){
std::cout << "failed";
std::cout << " | value: " << resPrq.second << std::endl;
std::cout << "\n==========" << std::endl;
}
// ---------- ALGO HERE
eoEasyEA<QUEEN> algo(cont,eval,select,transform,replace);
eoEasyEA<Cursus> algo(cont,eval,select,transform,replace);
//WRITE CURRENT POP
pop.best_element().printOn(outputfile4);
outputfile4 << " " << ctrECTS.integrityCheck(pop.best_element()).second << " " << ctrRep.integrityCheck(pop.best_element()).second << " " << ctrJob.integrityCheck(pop.best_element()).second << " " << ctrPrq.integrityCheck(pop.best_element()).second << std::endl;
outputfile2 << pop.size() << std::endl;
outputfile3 << pop.size() << std::endl;
for(int i=0; i<pop.size();i++){
//Write pop + prerequires values
pop[i].printOn(outputfile2);
outputfile2 << " " << ctrECTS.integrityCheck(pop[i]).second << " " << ctrRep.integrityCheck(pop[i]).second << " " << ctrJob.integrityCheck(pop[i]).second << " " << ctrPrq.integrityCheck(pop[i]).second << std::endl;
//Write prerequires values
outputfile3 << ctrECTS.integrityCheck(pop[i]).second << " " << ctrRep.integrityCheck(pop[i]).second << " " << ctrJob.integrityCheck(pop[i]).second << " " << ctrPrq.integrityCheck(pop[i]).second << std::endl;
}
//RUN ALGO
algo(pop);
//WRITE FINAL POP
pop.best_element().printOn(outputfile);
outputfile << std::endl;
pop.best_element().printOn(outputfile4);
outputfile4 << " " << ctrECTS.integrityCheck(pop.best_element()).second << " " << ctrRep.integrityCheck(pop.best_element()).second << " " << ctrJob.integrityCheck(pop.best_element()).second << " " << ctrPrq.integrityCheck(pop.best_element()).second << std::endl;
outputfile2 << pop.size() << std::endl;
outputfile3 << pop.size() << std::endl;
for(int i=0; i<pop.size();i++){
//Write pop + prerequires values
pop[i].printOn(outputfile2);
outputfile2 << " " << ctrECTS.integrityCheck(pop[i]).second << " " << ctrRep.integrityCheck(pop[i]).second << " " << ctrJob.integrityCheck(pop[i]).second << " " << ctrPrq.integrityCheck(pop[i]).second << std::endl;
//Write prerequires values
outputfile3 << ctrECTS.integrityCheck(pop[i]).second << " " << ctrRep.integrityCheck(pop[i]).second << " " << ctrJob.integrityCheck(pop[i]).second << " " << ctrPrq.integrityCheck(pop[i]).second << std::endl;
}
outputfile.close();
outputfile2.close();
outputfile3.close();
outputfile4.close();
// -------------------
if(localDisplay)
{
std::cout << "\n===== BEST INDIVIDU =====" << std::endl;
pop.best_element().printOn(std::cout);
std::cout << " fitness:" << pop.best_element().fitness() << std::endl;
......@@ -346,13 +433,13 @@ int main(int argc, char* argv[]){
std::cout << "Prereq: ";
if(resPrq.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resPrq.second << std::endl;
std::cout << "===============" << std::endl;
std::cout << "cpt: " << cross.cpt << std::endl;
}
// ================================= END RUN ZONE ===============================
......
#include <eo>
#include <queen.h>
#include <queenInit.h>
#include <queenMutation.h>
#include <queenCrossover.h>
#include <queenEval.h>
#include <model/problem.h>
#include <model/profession.h>
#include <model/magnitude.h>
#include <model/tools.h>
#include <model/competency.h>
#include <model/decay.h>
#include <model/ea/cursus.h>
#include <model/ea/initializer.h>
#include <model/ea/initConstraint.h>
#include <model/ea/mutation.h>
#include <model/ea/bestFitStat.h>
#include <model/ea/crossover.h>
#include <model/ea/evaluator.h>
#include <model/constraints/ectsConstraints.h>
#include <model/constraints/repetitionConstraints.h>
#include <model/constraints/professionConstraints.h>
#include <model/constraints/prerequisitesConstraints.h>
#include <model/exception/magnitudeException.h>
#include <model/exception/competencyEvolvingException.h>
void make_help(eoParser & _parser);
int main(int argc, char* argv[]){
/*** init ***/
eoParser parser(argc, argv); // for user-parameter reading
eoState state; // to keep all things allocate
// ================================= CEAO ZONE ===================================
//GENERAL PARAMATERS
//eoValueParam<uint32_t>& _seedParam = parser.createParam(uint32_t(0), "seed", "Random number seed", 'S');
unsigned int _seedParam = parser.createParam((unsigned int)(0), "seed", "Random number seed", 'S').value();
std::string _outputFile = parser.createParam(std::string("/scratch"), "outputfile", "", '\0', "Representation", true).value();
eo::rng.reseed(_seedParam);
unsigned int localDisplay = parser.createParam((unsigned int)(0), "localDisplay", "whether or not display on local output", 'd', "Param").value();
//PROBLEM PARAMETERS
unsigned int SEED = parser.createParam((unsigned int)(7777), "csdvpSeed", "Seed used for the CSDVP",'s',"Param").value();
unsigned int NBCOURSES = parser.createParam((unsigned int)(15), "nbCourses", "Nb of courses available in the cursus",'C',"Param").value();
unsigned int NBCOMP = parser.createParam((unsigned int)(10), "nbComp", "Nb of competencies available in the cursus",'c',"Param").value();
unsigned int MINTF = parser.createParam((unsigned int)(1), "minTF", "id of the first time frame",'t',"Param").value();
unsigned int MAXTF = parser.createParam((unsigned int)(6), "maxTF", "id of the last time frame",'T',"Param").value();
unsigned int MINECTS = parser.createParam((unsigned int)(1), "minECTS", "minimum number ECTS by course",'e',"Param").value();
unsigned int MAXECTS = parser.createParam((unsigned int)(5), "maxECTS", "maxmimum number ECTS by course",'E',"Param").value();
unsigned int MINCBYTF = parser.createParam((unsigned int)(3), "minCbyTF", "minimal course by time frame",'n',"Param").value();
unsigned int MAXCBYTF = parser.createParam((unsigned int)(8), "maxCbyTF", "maximal course by time frame",'N',"Param").value();
double MINMAGN = parser.createParam((double)(0.2), "minMagn", "miminal magnitude", 'm', "Param").value();
double MAXMAGN = parser.createParam((double)(0.75), "maxMagn", "maximal magnitude", 'M', "Param").value();
unsigned int MINCBYC = parser.createParam((unsigned int)(1), "minCbyC", "minimal competency by course",'r',"Param").value();
unsigned int MAXCBYC = parser.createParam((unsigned int)(5), "maxCbyC", "maximal competency by course",'R',"Param").value();
unsigned int MINPRE = parser.createParam((unsigned int)(0), "minPre", "minimal competency by course",'q',"Param").value();
unsigned int MAXPRE = parser.createParam((unsigned int)(3), "maxPre", "maximal competency by course",'Q',"Param").value();
unsigned int CBYTF = parser.createParam((unsigned int)(2), "cbyTF", "course by time frame to pick",'A',"Param").value();
CursusEval::WEIGHT_ECTS = parser.createParam((double)(1.0), "wECTS", "Weight of ECTS in the fitness value", 'V', "Param").value();
CursusEval::WEIGHT_REPETION = parser.createParam((double)(1.0), "wREP", "Weight of Repetition in the fitness value", 'v', "Param").value();
CursusEval::WEIGHT_JOB = parser.createParam((double)(1.0), "wJob", "Weight of profession in the fitness value", 'w', "Param").value();
CursusEval::WEIGHT_PREREQ = parser.createParam((double)(1.0), "wPrereq", "Weight of prerequisites in the fitness value", 'W', "Param").value();
DecayEngine::IS_DECAY_DEACTIVATED = parser.createParam((int)(0), "decayDeactivated", "Wether or not the decay is deactivated", 'D', "Param").value();
//PROFESSION PARAMETERS
unsigned int JOB_SEED = parser.createParam((unsigned int)(7777), "jobSeed", "Seed used for the Profession", 'g', "Param").value();
unsigned int JOB_MINPRE = parser.createParam((unsigned int)(2), "jobMinPre" , "minimum competency prerequisite by a job", 'j', "Param").value();
unsigned int JOB_MAXPRE = parser.createParam((unsigned int)(4), "jobMaxPre" , "maximal competency prerequisite by a job", 'J', "Param").value();
double JOB_MINMAG = parser.createParam((double)(0.5), "jobMinMag" , "miminal magnitude for a job" , 'h', "Param").value();
double JOB_MAXMAG = parser.createParam((double)(0.95), "jobMaxMag" , "maxima magnitude for a job" , 'H', "Param").value();
//EVOLUTION ENGINE PARAMETERS
unsigned int POPSIZE = parser.createParam((unsigned int)(100), "popSize", "Population size", 'P', "Evolution Engine").value();
double PMUT = parser.createParam((double)(0.5), "pMut", "mutation rate", 'x', "Evolution Engine").value();
double PCROSS = parser.createParam((double)(0.5), "pCross", "crossover rate", 'X', "Evolution Engine").value();
unsigned int NBGEN = parser.createParam((unsigned int)(100), "nbGen", "Number of generation",'G',"Param").value();
unsigned int SIZET = parser.createParam((unsigned int)(7), "sizeT", "Tournament Size",'F',"Param").value();
RATIO_RANDOM_VS_BEST = parser.createParam((unsigned int)(75), "ratioBest", "Ratio between full random and best while prereq check fails in mutation",'B',"Param").value();
// ===== PB CONFIG ZONE =====
CSDVP pb;
Profession job;
pb.set_cfg_quantityCourses(NBCOURSES);
pb.set_cfg_quantityCompetencies(NBCOMP);
pb.set_cfg_minimalTimeFrames(MINTF);
pb.set_cfg_maximalTimeFrames(MAXTF); //Just "Licence"
pb.set_cfg_ectsMin(MINECTS);
pb.set_cfg_ectsMax(MAXECTS);
pb.set_cfg_courseByTFMin(MINCBYTF);
pb.set_cfg_courseByTFMax(MAXCBYTF);
pb.set_cfg_minimalMagnitude(MINMAGN);
pb.set_cfg_maximalMagnitude(MAXMAGN);
pb.set_cfg_minimalCompetencyByCourse(MINCBYC);
pb.set_cfg_maximalCompetencyByCourse(MAXCBYC);
pb.set_cfg_minimalPrerequisiteByCourse(MINPRE);
pb.set_cfg_maximalPrerequisiteByCourse(MAXPRE);
pb.set_cfg_pickedCoursesByTimeFrame(CBYTF);
CSDVP::generateProblem(pb, CSDVP::GenerationType::RANDOM, SEED);
assert(pb.checkConfig());
// std::cout << "CSDVP IS : \n" << pb << std::endl;
// for(int i = 0; i < pb.coursesCatalogue().size(); i++)
// std::cout << pb.coursesCatalogue().at(i) << std::endl;
job.setRequiredECTS(Profession::GenerationType::RANDOM);
job.set_cfg_minimalPrerequisites(JOB_MINPRE);
job.set_cfg_maximalPrerequisites(JOB_MAXPRE);
job.set_cfg_minimalMagnitude(JOB_MINMAG);
job.set_cfg_maximalMagnitude(JOB_MAXMAG);
Profession::generateProfession(job, Profession::GenerationType::RANDOM, pb, JOB_SEED);
assert(job.checkConfig());
// std::cout << "JOB IS : \n" << job << std::endl;
// job.setRequiredECTS(4 * 6);
// Competency tmpC = pb.competencyCatalogue().at(0);
// tmpC = Competency::buildTMP(0.8, tmpC.c_name());
// job.addPrerequisite(tmpC);
// tmpC = pb.competencyCatalogue().at(1);
// tmpC = Competency::buildTMP(0.8, tmpC.c_name());
// job.addPrerequisite(tmpC);
// tmpC = pb.competencyCatalogue().at(2);
// tmpC = Competency::buildTMP(0.8, tmpC.c_name());
// job.addPrerequisite(tmpC);
//tmpC = Competency::build(0.5,"Wesh");
//job.addPrerequisite(tmpC);
//tmpC = pb.competencyCatalogue().at(8);
//job.addPrerequisite(tmpC);
// ===== END PB CONFIG =====
ConstraintsECTS ctrECTS(pb, job);
ConstraintsRepetition ctrRep(pb, job);
ConstraintsProfession ctrJob(pb, job);
ConstraintsPrerequisites ctrPrq(pb, job);
//std::cout << "getQuantityCoursesToPick : " << std::to_string(pb.getQuantityCoursesToPick()) << std::endl;
//std::cout << "cfg_quantityCourses() : " << std::to_string(pb.cfg_quantityCourses()) << std::endl;
/**@todo make size of the pb accessible as well as size of an individu*/
// ======================== AG CONFIG ZONE ========================
//PROBLEM DEPENDANT OPERATOR
CursusInitConstraint init(pb);
CursusEval eval(ctrPrq, ctrRep, ctrJob, ctrECTS);
CursusCrossover cross(pb, ctrRep, init);
CursusMutation mut(pb, ctrRep);
//PROBLEM INDEPENDANT OPERATOR
std::string file=_outputFile + "/convergence";
eoGenContinue<Cursus> cont2(NBGEN);
eoCheckPoint<Cursus> cont(cont2);
bestFitStat<Cursus> stat(100, file);
cont.add(stat);
eoSGATransform<Cursus> transform(cross, PCROSS, mut, PMUT);
eoDetTournamentSelect<Cursus> selectOne(SIZET);
eoSelectPerc<Cursus> select(selectOne);
eoGenerationalReplacement<Cursus> genReplace;
eoWeakElitistReplacement<Cursus> replace(genReplace);
//POPULATION INITIALISATION
eoPop<Cursus> pop;
Cursus c1;
for(int i = 0; i < POPSIZE; i++){
init(c1);
eval(c1);
pop.push_back(c1);
}
// ======================== AG CONFIG ZONE END ========================
// ================================ TEST ZONE ===========================================
/*
std::cout << "MAGNITUDE TEST ZONE" << std::endl;
Magnitude m = Magnitude::build(0.5);
Magnitude n = Magnitude::build(0.3);
Magnitude o = Magnitude::build(0.2);
o = m;
std::cout << "Magnitude" << o.value() << std::endl;
std::cout << "Magnitude" << m.value() << std::endl;
m += n;
std::cout << "New magnitude is " << m.value() << std::endl;
try{
std::cout << "After addition mag is : " << (m + m).value() << std::endl;
}
catch(MagnitudeException & e)
{
std::cout << "\nEXCEPTION CATCH !\n";
std::cout << "Memory adr of m is : " << &m << std::endl;
std::cout << "Memory adr of e is : " << &e.getMagnitude() << std::endl;
e.getMagnitude().rebase();
std::cout << "REBASE! New magnitude value is" << e.getMagnitude().rebase() << std::endl;
std::cout << "Accessing magnitude value : " << e.getMagnitude().value() << std::endl;
std::cout << "magnitude value of M : " << m.value() << std::endl;
m = e.getMagnitude();
std::cout << "before end catch" << m.value() << std::endl;
}
std::cout << "Inspect m value:" << m.value() << std::endl;
std::cout << "END MAGNITUDE TEST\n\n\n" << std::endl;
*/
/*
std::cout << "CONSTRAINT TEST ZONE" << std::endl;
std::pair<bool,double> res;
for(int i = 0; i < pop.size(); i++){
res = ctrECTS.integrityCheck(pop[i]);
std::cout << "ECTS Metric" << std::to_string(res.second) << std::endl;
//res = ctrRep.integrityCheck(pop[i]);
//res = ctrJob.integrityCheck(pop[i]);
res = ctrPrq.integrityCheck(pop[i]);
std::cout << "IND#" << std::to_string(i) << "\nFirst: " << res.first << "\nSecond: " << std::to_string((double)res.second) << std::endl;
if(res.first)
{
std::cout << "*************** OK PREREQ !! ***********" << std::endl;
}
else
{
std::cout << "$$$$$$$$$$$$$$$$ NON OK PREREQ !! $$$$$$$$$$$$$$$$$$$" << std::endl;
}
for(int i = 0 ; i < pop[i].size(); i++)
{
std::cout << pb.coursesCatalogue().at(pop[i].at(i)) << std::endl;
}
}
*/
//MUTATION TEST
/*
std::cout << "MUTATION TEST ZONE" << std::endl;
pop[0].printOn(std::cout);
std::cout << std::endl;
for(int i=0; i<50; i++){
mut(pop[0]);
pop[0].printOn(std::cout);
std::cout << std::endl;
}
*/
//CROSS TEST
/*
std::cout << "CROSSOVER TEST ZONE" << std::endl;
pop[0].printOn(std::cout);
std::cout << std::endl;
pop[1].printOn(std::cout);
std::cout << std::endl;
for(int i=0; i<50; i++){
cross(pop[0],pop[1]);
pop[0].printOn(std::cout);
std::cout << std::endl;
pop[1].printOn(std::cout);
std::cout << std::endl;
std::cout << std::endl;
}
*/
/*
for(int i = 0; i < pb.coursesCatalogue().size(); i++)
{
std::cout << pb.coursesCatalogue().at(i) << std::endl;
}
*/
// ======================== TEST ZONE END========================
// ================================= RUN ZONE ===============================
/*
std::string filename=_outputFile + "/bestsol.";
std::ostringstream oss;
oss << _seedParam;
filename+=oss.str();
std::ofstream outputfile(filename.c_str(), std::ios::app);
oss.str("");
filename=_outputFile + "/pop.";
oss << _seedParam;
filename+=oss.str();
std::ofstream outputfile2(filename.c_str(), std::ios::app);
oss.str("");
filename=_outputFile + "/req.";
oss << _seedParam;
filename+=oss.str();
std::ofstream outputfile3(filename.c_str(), std::ios::app);
oss.str("");
filename=_outputFile + "/solsstats.";
oss << _seedParam;
filename+=oss.str();
std::ofstream outputfile4(filename.c_str(), std::ios::app);
*/
std::pair<bool, double> resECTS;
std::pair<bool, double> resRep ;
std::pair<bool, double> resJob ;
std::pair<bool, double> resPrq ;
if(localDisplay)
{
std::cout << "===== CURRENT POP =====" << std::endl;
pop.best_element().printOn(std::cout);
std::cout << " fitness:" << pop.best_element().fitness() << std::endl;
std::cout << "Stats & metrics: \n" << std::endl;
resECTS = ctrECTS.integrityCheck(pop.best_element());
resRep = ctrRep.integrityCheck(pop.best_element());
resJob = ctrJob.integrityCheck(pop.best_element());
resPrq = ctrPrq.integrityCheck(pop.best_element());
std::cout << "ECTS: ";
if(resECTS.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resECTS.second << std::endl;
std::cout << "Repetition: ";
if(resRep.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resRep.second << std::endl;
std::cout << "Job: ";
if(resJob.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resJob.second << std::endl;
std::cout << "Prereq: ";
if(resPrq.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resPrq.second << std::endl;
std::cout << "\n==========" << std::endl;
}
// ---------- ALGO HERE
eoEasyEA<Cursus> algo(cont,eval,select,transform,replace);
//WRITE CURRENT POP
/*
pop.best_element().printOn(outputfile4);
outputfile4 << " " << ctrECTS.integrityCheck(pop.best_element()).second << " " << ctrRep.integrityCheck(pop.best_element()).second << " " << ctrJob.integrityCheck(pop.best_element()).second << " " << ctrPrq.integrityCheck(pop.best_element()).second << std::endl;
outputfile2 << pop.size() << std::endl;
outputfile3 << pop.size() << std::endl;
for(int i=0; i<pop.size();i++){
//Write pop + prerequires values
pop[i].printOn(outputfile2);
outputfile2 << " " << ctrECTS.integrityCheck(pop[i]).second << " " << ctrRep.integrityCheck(pop[i]).second << " " << ctrJob.integrityCheck(pop[i]).second << " " << ctrPrq.integrityCheck(pop[i]).second << std::endl;
//Write prerequires values
outputfile3 << ctrECTS.integrityCheck(pop[i]).second << " " << ctrRep.integrityCheck(pop[i]).second << " " << ctrJob.integrityCheck(pop[i]).second << " " << ctrPrq.integrityCheck(pop[i]).second << std::endl;
}
*/
//RUN ALGO
algo(pop);
//WRITE FINAL POP
/*
pop.best_element().printOn(outputfile);
outputfile << std::endl;
pop.best_element().printOn(outputfile4);
outputfile4 << " " << ctrECTS.integrityCheck(pop.best_element()).second << " " << ctrRep.integrityCheck(pop.best_element()).second << " " << ctrJob.integrityCheck(pop.best_element()).second << " " << ctrPrq.integrityCheck(pop.best_element()).second << std::endl;
outputfile2 << pop.size() << std::endl;
outputfile3 << pop.size() << std::endl;
for(int i=0; i<pop.size();i++){
//Write pop + prerequires values
pop[i].printOn(outputfile2);
outputfile2 << " " << ctrECTS.integrityCheck(pop[i]).second << " " << ctrRep.integrityCheck(pop[i]).second << " " << ctrJob.integrityCheck(pop[i]).second << " " << ctrPrq.integrityCheck(pop[i]).second << std::endl;
//Write prerequires values
outputfile3 << ctrECTS.integrityCheck(pop[i]).second << " " << ctrRep.integrityCheck(pop[i]).second << " " << ctrJob.integrityCheck(pop[i]).second << " " << ctrPrq.integrityCheck(pop[i]).second << std::endl;
}
outputfile.close();
outputfile2.close();
outputfile3.close();
outputfile4.close();
*/
// -------------------
if(localDisplay)
{
std::cout << "\n===== BEST INDIVIDU =====" << std::endl;
pop.best_element().printOn(std::cout);
std::cout << " fitness:" << pop.best_element().fitness() << std::endl;
std::cout << "Stats & metrics: \n" << std::endl;
resECTS = ctrECTS.integrityCheck(pop.best_element());
resRep = ctrRep.integrityCheck(pop.best_element());
resJob = ctrJob.integrityCheck(pop.best_element());
resPrq = ctrPrq.integrityCheck(pop.best_element());
std::cout << "ECTS: ";
if(resECTS.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resECTS.second << std::endl;
std::cout << "Repetition: ";
if(resRep.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resRep.second << std::endl;
std::cout << "Job: ";
if(resJob.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resJob.second << std::endl;
std::cout << "Prereq: ";
if(resPrq.first)
std::cout << "succeed";
else
std::cout << "failed";
std::cout << " | value: " << resPrq.second << std::endl;
std::cout << "===============" << std::endl;
}
// ================================= END RUN ZONE ===============================
return EXIT_SUCCESS;
}
using namespace std;
// temp
#include "moBitNeighbor.h"
// paradiseo
#include <eo>
#include <ga.h>
#include <mo>
#include <problems/bitString/moBitNeighbor.h>
#include <moeo>
#include <utils/moeoFullEvalByCopy.h>
// problem
#include<rmnkEval.h>
//MPI
#include <mpi.h>
// checks for help demand, and writes the status file and make_help; in libutils
void make_help(eoParser & _parser);
// objective vector of real values
typedef moeoRealObjectiveVector < moeoObjectiveVectorTraits > rmnkObjectiveVector;
// problem representation
typedef moeoBitVector < rmnkObjectiveVector > RMNK;
// neighbor
typedef moBitNeighbor<RMNK,rmnkObjectiveVector> rmnkNeighbor;
// go
int main(int argc, char* argv[]){
try{
/*** init ***/
eoParser parser(argc, argv); // for user-parameter reading
eoState state; // to keep all things allocated
// parameters
eoValueParam<uint32_t>& _seedParam = parser.createParam(uint32_t(0), "seed", "Random number seed", 'S');
std::string _inputFile = parser.createParam(std::string(), "inputfile", "", '\0', "Representation", true).value();
std::string _outputFile = parser.createParam(std::string("/scratch"), "outputfile", "", '\0', "Representation", true).value();
unsigned int PAS = parser.createParam((unsigned int)(1), "pas", "Nb of iteration between 2 print",'p',"Param").value();
unsigned int BEGIN = parser.createParam((unsigned int)(0), "begin", "Nb of iteration between 2 print",'p',"Param").value();
unsigned int _popSize = parser.createParam((unsigned int)(100), "popSize", "Population size", 'P', "Evolution Engine").value();
unsigned int NBCORES = parser.createParam((unsigned int)(32), "nbCores", "Number of cores used",'C',"Param").value();
std::string STRAT = parser.createParam(std::string(""), "strat", "Strategy for the choice of neighbors",'S',"Param").value();
unsigned int NBMUT = parser.createParam((unsigned int)(100), "nbMut", "Number of mutation",'X',"Param").value();
double _pMut = parser.createParam((double)(1.0), "pMut", "mut rate", 'M', "Evolution Engine").value();
unsigned int NBITER = parser.createParam((unsigned int)(100), "nbIter", "Number of iteration",'I',"Param").value();
//for MPI
int numtasks, rank, tag1=1, tag2=2, prev, next;
MPI_Request reqs[4];
MPI_Status stats[4];
double tmp, max, x, y, newx=1.0, newy=1.0, lambda0, lambda1, xref=0, yref=0;
// seed
if (_seedParam.value() == 0) _seedParam.value() = time(0);
rng.reseed(_seedParam.value());
//copy of objective vector for MPI
double front[2][NBCORES];
// eval function
rmnkEval<RMNK,rmnkObjectiveVector> fEval(_inputFile.c_str());
eoEvalFuncCounter<RMNK> eval(fEval);
// number of objectives
std::vector <bool> bObj(fEval.getM(), false);
moeoObjectiveVectorTraits::setup(fEval.getM(), bObj);
// initialiser
eoUniformGenerator<bool> uGen;
eoInitFixedLength<RMNK> init(fEval.getN(),uGen);
// mutation (prob = _pMut/N)
eoBitMutation<RMNK> mut (_pMut, true);
// generate initial population
RMNK sol;
moeoUnboundedArchive<RMNK> archive;
moeoUnboundedArchive<RMNK> finalArchive;
while(archive.size()<NBCORES){
init(sol);
eval(sol);
archive.push_back(sol);
}
//Print initial population
/*
std::cout << "POINTS INITIALS" << std::endl;
for (unsigned int i=0; i<archive.size(); i++){
cout << archive[i].objectiveVector() << " " << arch[i].fitness() << endl;
}
*/
// Copie des valeurs des objectifs
for(int i=0; i<NBCORES; i++){
front[0][i]=archive[i].objectiveVector()[0];
front[1][i]=archive[i].objectiveVector()[1];
}
// stockage local des objectif vector sur les coeurs P, P+1, P-1
double local[3][2];
//Init MPI
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
//On repartie les valeurs sur chaque coeurs
MPI_Scatter(&front[0][0],1,MPI_DOUBLE,&local[0][0],1,MPI_DOUBLE,1,MPI_COMM_WORLD);
MPI_Scatter(&front[1][0],1,MPI_DOUBLE,&local[0][1],1,MPI_DOUBLE,1,MPI_COMM_WORLD);
//Print du front de dpart
//std::cout << rank << " " << local[0][0] << " " << local[0][1] << std::endl;
//define the neighbor (P+1 et P-1)
prev=rank-1;
next=rank+1;
// Keep best
RMNK best;
max=0;
// main loop
for(unsigned int i=0;i<NBITER; i++){
// Communication with prev and next
if(rank==0){
//prev n'existe pas
local[2][0]=0;
local[2][1]=0;
//envoie des valeurs objectif au next
MPI_Isend(&local[0][0], 2, MPI_DOUBLE, next, tag1, MPI_COMM_WORLD, &reqs[0]);
//Reception des valeurs objectif du next
MPI_Irecv(&local[1][0], 2, MPI_DOUBLE, next, tag2, MPI_COMM_WORLD, &reqs[1]);
MPI_Waitall(2, reqs, stats);
}//endif(rank==0)
else if(rank==(NBCORES-1)){
//next n'existe pas
local[1][0]=0;
local[1][1]=0;
//envoie des valeurs objectif au prev
MPI_Isend(&local[0][0], 2, MPI_DOUBLE, prev, tag2, MPI_COMM_WORLD, &reqs[0]);
//Reception des valeurs objectif du prev
MPI_Irecv(&local[2][0], 2, MPI_DOUBLE, prev, tag1, MPI_COMM_WORLD, &reqs[1]);
MPI_Waitall(2, reqs, stats);
}//endif(rank==NBCORES-1)
else{
//envoie des valeurs objectif au next
MPI_Isend(&local[0][0], 2, MPI_DOUBLE, next, tag1, MPI_COMM_WORLD, &reqs[0]);
//Reception des valeurs objectif du next
MPI_Irecv(&local[1][0], 2, MPI_DOUBLE, next, tag2, MPI_COMM_WORLD, &reqs[1]);
//envoie des valeurs objectif au prev
MPI_Isend(&local[0][0], 2, MPI_DOUBLE, prev, tag2, MPI_COMM_WORLD, &reqs[2]);
//Reception des valeurs objectif du prev
MPI_Irecv(&local[2][0], 2, MPI_DOUBLE, prev, tag1, MPI_COMM_WORLD, &reqs[3]);
MPI_Waitall(4, reqs, stats);
}
// find a new solution
bool better=false;
//on calcul le score de la solution actuelle par rapport ces nouveaux voisins
if(rank!=0 && rank!=(NBCORES-1)){
x=archive[rank].objectiveVector()[0];
y=archive[rank].objectiveVector()[1];
if(STRAT=="hyp"){
// si on apporte rien l'hypervolume on prend une direction ortogonal par rapport aux voisins
if((x<=local[2][0]) || (y<=local[1][1])){
lambda0=std::abs(local[1][1]-local[2][1]);
lambda1=std::abs(local[1][0]-local[2][0]);
tmp=(lambda0*x + lambda1*y) * 0.000001;
}
// sinon on prend l'hypervolume
else{
tmp=(x-local[2][0]) * (y-local[1][1]);
}
}
else if(STRAT=="ortho"){
lambda0=std::abs(local[1][1]-local[2][1]);
lambda1=std::abs(local[1][0]-local[2][0]);
tmp=lambda0*x + lambda1*y;
}
max=tmp;
}
else{
max=-2;
}
// mutations 1/l
for(unsigned int j=0; j<NBMUT; j++){
// copie de la solution
RMNK tmpSol;
tmpSol=archive[rank];
double tmp1;
double tmp2;
// mutation de la copie
mut(tmpSol);
// on invalide la copie
tmpSol.invalidate();
// on evalue les valeurs objectifs de la copie
eval(tmpSol);
//on copie ces valeurs dans x et y (plus simple a ecrire quand mm)
x=tmpSol.objectiveVector()[0];
y=tmpSol.objectiveVector()[1];
// extreme
if(rank==0){
if((y >local[0][1]) || ((y==local[0][1])&& (x>local[0][0]))){
if(y > local[0][1])
tmp=y;
else
tmp=-1*1/x;
if(i==0 || tmp>max){
max=tmp;
best=tmpSol;
newx=x;
newy=y;
better=true;
}
}
}
else if(rank==(NBCORES-1)){
if((x >local[0][0]) || ((x ==local[0][0]) && (y >local[0][0])) ){
if(x >local[0][0])
tmp=x;
else
tmp=-1*1/y;
if(i==0 || tmp>max){
max=tmp;
best=tmpSol;
newx=x;
newy=y;
better=true;
}
}
}
//cas gnral
else{
if(STRAT=="hyp"){
// si on apporte rien l'hypervolume on prend une direction ortogonal par rapport aux voisins
if((x<=local[2][0]) || (y<=local[1][1])){
lambda0=std::abs(local[1][1]-local[2][1]);
lambda1=std::abs(local[1][0]-local[2][0]);
tmp=(lambda0*x + lambda1*y) * 0.000001;
}
// sinon on prend l'hypervolume
else{
tmp=(x-local[2][0]) * (y-local[1][1]);
}
}
else if(STRAT=="ortho"){
lambda0=std::abs(local[1][1]-local[2][1]);
lambda1=std::abs(local[1][0]-local[2][0]);
tmp=lambda0*x + lambda1*y;
}
if(tmp>max){
// si on a trouv une meilleur solution qu'avant on la sauvegarde
better=true;
max=tmp;
best=tmpSol;
newx=x;
newy=y;
}
}
}
// on affecte la meilleur solution trouv
if(better){
local[0][0]=newx;
local[0][1]=newy;
archive[rank]=best;
}
//on attend tout le monde
MPI_Barrier(MPI_COMM_WORLD);
//on save le front rgulierement
if((i%PAS==0 && i>=BEGIN) || i==NBITER-1){
std::string filename=_outputFile + "/rank.";
std::ostringstream oss;
if(rank<10)
oss << "00" << rank;
else if(rank<100)
oss << "0" << rank;
else
oss << rank;
filename+=oss.str();
std::ofstream outputfile(filename.c_str(), std::ios::app);
outputfile << local[0][0] << " " << local[0][1] << std::endl;
outputfile.close();
}
}
std::string filename=_outputFile + "/finalpop.";
std::ostringstream oss;
oss << rank;
filename+=oss.str();
std::ofstream outputfile(filename.c_str(), std::ios::app);
archive[rank].printOn(outputfile);
outputfile << std::endl;
outputfile.close();
filename=_outputFile + "/finalpoint.";
oss << rank;
filename+=oss.str();
std::ofstream outputfile2(filename.c_str(), std::ios::app);
outputfile2 << archive[rank].objectiveVector()[0] << " " << archive[rank].objectiveVector()[1] << std::endl;
outputfile2.close();
make_help(parser);
MPI_Finalize();
}
catch (exception& e){
cout << e.what() << endl;
}
return EXIT_SUCCESS;
}
......@@ -48,6 +48,7 @@ set(BUILD_DIR build)
# Path
set(PARADISEO_SRC_PATHS
/home/jeremie.humeau/private/ParadisEO-2.0/
/home/jerem/Softs/ParadisEO-2.0/
${PARADISEO_ROOT}
$ENV{PARADISEO_ROOT}
......@@ -102,6 +103,7 @@ endif()
set(PARADISEO_FOUND true) # will be set to false if one of the required modules is not found
set(FIND_PARADISEO_LIB_PATHS
/home/jeremie.humeau/private/ParadisEO-2.0/build
/home/jerem/Softs/ParadisEO-2.0/build/
${PARADISEO_ROOT}/${BUILD_DIR}
$ENV{PARADISEO_ROOT}
......@@ -163,3 +165,4 @@ else()
# include directory or library not found
message(FATAL_ERROR "Could NOT find ParadisEO (missing : ${FIND_PARADISEO_MISSING})")
endif()
File added
${cbyTF}_${minCbyTF}_${maxCbyTF}_${nbGen}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,R=$maxCbyC,Q=$maxPre,A=$cbyTF,n=$minCbyTF,N=$maxCbyTF,r=1,q=0,O=$RESDIR,B=20,x=0.75,X=0.75,F=3,G=$nbGen job.sh
echo "-C=${nbCours} -c=${nbComps} -R=${maxCbyC} -Q=${maxPre} -A=${cbyTF} -n=${minCbyTF} -N=${maxCbyTF} -r=1 -q=0" >> case
done
done
done
done
done
done
done
done
22.3794 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
\ No newline at end of file
100:
22.4681 70 57 23 62 79 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 15 60 65 87 69 80 36 40 74 32 2 11 38 52 46 78 53 77 45 25 50 31 75 21 64 51 43 86 95 34 67 98 49 28 84 54 94 76 33 73 48 92 102 13 70 12
200:
22.4519 70 57 23 62 79 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 15 60 65 87 69 80 36 40 74 32 2 11 9 52 46 78 53 77 45 25 64 31 75 50 38 51 43 86 95 34 67 98 49 28 84 54 94 76 33 73 48 99 102 13 70 12
300:
22.4519 70 57 23 62 4 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 15 60 65 87 69 80 36 40 74 32 2 11 9 52 46 78 53 77 45 25 64 31 75 50 38 51 43 86 95 34 67 98 49 28 84 54 94 76 33 73 48 99 102 13 70 12
400:
22.4417 70 57 23 62 4 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 31 75 50 21 51 43 86 95 34 67 98 49 28 84 54 94 76 33 73 48 99 102 13 70 12
500:
22.4322 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 31 75 5 50 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 99 102 13 70 12
600:
22.4241 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 21 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 12
700:
22.4241 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 50 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 12
800:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 50 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
900:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 31 64 75 5 21 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1000:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 31 64 75 5 21 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1100:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 31 64 75 5 21 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1200:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 21 64 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1300:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 50 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1400:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 21 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1500:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 50 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1600:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 21 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1700:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 21 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1800:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 21 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
1900:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 21 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2000:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 31 75 5 50 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2100:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 31 75 5 21 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2200:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 31 75 5 21 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2300:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 50 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2400:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 21 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2500:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 21 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2600:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 50 75 5 31 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2700:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 31 75 5 50 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2800:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 25 64 31 75 5 50 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
2900:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 64 25 31 75 5 50 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
3000:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 64 25 31 75 5 21 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
3100:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 64 25 31 75 5 50 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
3200:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 64 31 21 75 5 25 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
3300:
22.4184 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 31 21 64 5 25 51 43 86 3 34 67 98 49 28 84 54 94 76 33 73 48 18 102 13 70 59
3400:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 31 64 21 5 25 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 102 13 70 59
3500:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 31 5 64 21 25 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 102 13 70 59
3600:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 25 64 31 5 50 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 102 13 70 59
3700:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 87 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 25 50 31 5 64 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 102 13 70 59
3800:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 87 65 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 25 64 31 5 50 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 56 13 70 59
3900:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 87 65 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 21 25 31 5 64 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 102 13 70 59
4000:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 87 65 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 50 25 31 5 64 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 102 13 70 59
4100:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 87 65 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 21 25 31 5 64 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 102 13 70 59
4200:
22.4127 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 87 65 69 80 36 40 74 32 2 38 11 52 46 78 53 77 45 75 50 25 31 5 64 51 43 86 3 34 67 98 49 28 101 54 94 76 33 73 48 18 102 13 70 59
4300:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 21 25 31 5 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
4400:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 50 75 45 25 31 5 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
4500:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 5 75 45 25 31 21 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
4600:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 25 75 45 50 31 64 5 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
4700:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 25 75 45 5 31 64 21 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
4800:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 21 25 64 31 5 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
4900:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 21 25 64 31 5 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5000:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 21 64 25 5 31 75 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5100:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 5 25 21 31 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5200:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 5 50 25 31 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5300:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 38 11 52 46 9 53 77 21 75 5 64 25 45 31 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5400:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 38 11 52 46 9 53 77 50 75 5 64 25 45 31 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5500:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 38 11 52 46 9 53 77 21 75 5 64 25 45 31 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5600:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 38 11 52 46 9 53 77 64 75 5 21 25 45 31 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5700:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 5 21 25 31 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5800:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 5 21 25 31 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
5900:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 5 50 25 31 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6000:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 5 31 25 21 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6100:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 45 75 5 31 25 64 50 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6200:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 64 75 5 31 25 50 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6300:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 11 52 46 9 53 77 64 75 5 31 25 21 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6400:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 15 65 69 80 36 40 74 32 2 38 9 52 46 11 53 77 5 75 50 31 25 64 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6500:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 11 38 52 46 9 53 77 5 75 50 31 25 64 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6600:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 75 21 31 25 5 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6700:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 72 83 41 60 65 15 69 80 36 40 74 32 2 11 38 52 46 9 53 77 5 75 50 31 25 64 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6800:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 15 83 41 60 65 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 75 5 31 25 50 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
6900:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 15 83 41 60 65 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 21 75 5 31 25 64 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7000:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 15 83 41 60 65 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 21 5 31 25 75 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7100:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 15 83 41 60 65 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 5 50 31 25 75 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7200:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 15 83 41 60 65 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 50 5 25 31 64 75 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7300:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 65 83 41 60 72 15 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 5 25 21 31 75 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7400:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 14 97 44 37 65 83 41 60 72 15 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 5 25 31 45 75 50 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7500:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 72 15 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 5 25 31 45 75 21 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7600:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 72 15 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 5 25 31 45 75 21 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7700:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 72 15 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 50 25 31 45 75 5 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7800:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 21 5 25 31 45 75 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
7900:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 50 5 25 31 45 75 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8000:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 5 25 31 45 75 50 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8100:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 5 25 31 50 75 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8200:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 5 50 31 25 75 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8300:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 31 64 5 25 75 21 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8400:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 31 5 21 25 75 64 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8500:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 15 65 83 41 60 37 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 31 5 64 25 75 50 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8600:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 31 5 64 50 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8700:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 64 5 21 31 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8800:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 50 5 64 31 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
8900:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 45 64 5 21 31 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9000:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 21 64 5 45 31 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9100:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 21 5 31 45 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9200:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 50 5 31 45 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9300:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 50 5 31 45 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9400:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 65 83 41 60 15 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 21 5 31 45 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9500:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 15 83 41 60 65 72 69 80 2 40 74 32 36 11 38 52 46 9 53 77 64 50 5 31 45 75 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9600:
22.4046 70 57 23 62 95 39 81 0 16 66 35 103 47 61 63 26 30 82 93 44 97 14 37 15 83 41 60 65 72 69 80 36 40 74 32 2 11 38 52 46 9 53 77 64 75 5 31 45 21 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9700:
22.3794 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 50 21 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9800:
22.3794 70 7 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 50 21 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
9900:
22.3794 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 50 25 51 43 86 35 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59
100
25.9191 70 62 60 91 95 0 12 76 11 55 96 103 59 47 100 36 43 25 44 19 71 97 87 29 15 37 64 83 23 32 48 61 2 74 69 17 52 42 45 38 30 9 98 58 49 31 50 5 101 75 40 28 1 3 34 39 63 84 46 10 41 7 104 6 24 73 70 77 92 13 18 0.969849 1 0.333333 0.554974
28.6656 70 4 14 12 13 85 23 67 63 61 20 103 33 57 100 3 43 93 42 25 82 97 68 15 53 37 9 87 64 32 29 69 48 36 5 17 38 11 30 52 45 62 55 58 31 49 75 50 101 21 27 60 47 39 35 26 46 80 10 84 94 41 22 104 56 99 77 98 40 92 73 1 1 0 0.488506
25.9963 70 14 0 39 79 62 67 22 63 56 100 47 96 61 16 30 93 19 43 26 53 25 29 37 83 64 68 9 23 32 2 48 69 36 65 5 55 45 52 38 42 11 58 49 101 50 31 21 75 72 3 20 35 33 46 28 41 7 6 17 4 104 10 84 99 13 102 51 98 24 78 1 1 0.333333 0.513369
28.4795 70 14 91 60 62 7 18 57 34 66 63 90 96 12 33 82 44 89 26 25 53 6 68 29 9 65 64 15 23 17 2 48 32 5 61 74 42 43 11 38 55 45 30 75 31 49 50 58 21 101 20 46 27 3 47 40 28 22 84 10 4 52 94 80 54 24 56 70 37 73 51 1 1 0 0.511299
28.7356 70 14 12 85 23 88 95 62 35 61 56 90 11 63 59 97 43 32 71 0 6 36 87 65 68 72 44 37 64 74 48 2 29 5 17 69 45 38 42 55 30 9 52 50 101 49 75 25 31 21 66 1 27 46 41 39 28 58 4 10 54 22 84 7 98 102 77 86 51 19 78 1 1 0 0.48
26.3138 70 57 14 91 79 95 23 39 47 66 63 56 100 8 59 97 44 71 3 82 25 30 65 64 68 37 29 83 53 32 36 69 48 74 61 5 11 9 38 52 43 62 45 75 101 49 58 50 31 21 41 35 20 46 28 60 1 7 4 17 22 84 6 10 13 102 51 98 24 77 92 0.969849 1 0.333333 0.49711
28.6125 70 81 14 0 76 7 57 28 100 16 96 66 35 12 11 3 43 19 6 82 71 53 64 87 83 44 72 65 15 32 74 48 29 17 69 2 62 52 55 42 38 9 45 49 5 25 50 21 75 23 61 26 39 40 34 41 27 94 84 80 4 58 104 54 51 73 13 18 31 86 24 0.994975 1 0 0.5
28.7841 70 0 95 22 18 4 85 12 66 33 55 59 56 103 61 32 71 25 8 14 6 97 9 15 29 37 68 72 53 2 17 65 48 74 36 69 52 43 62 45 42 11 30 21 75 101 23 64 49 50 34 39 47 63 3 41 40 54 10 104 94 27 7 58 73 31 92 78 51 86 98 1 1 0 0.474138
28.684 70 22 91 14 88 0 79 67 35 34 57 66 103 33 20 93 32 71 89 36 97 82 65 37 44 23 72 15 64 5 69 2 29 61 17 74 43 52 62 30 38 45 42 49 101 50 75 21 25 31 27 28 40 41 39 63 46 10 84 104 58 48 6 7 70 12 102 24 56 92 78 1 1 0 0.486264
23.8761 70 91 18 57 23 88 67 12 16 90 35 103 33 61 63 19 26 8 25 6 42 97 53 44 15 37 9 72 87 48 32 36 65 74 5 17 11 38 52 62 30 43 55 45 50 101 31 75 21 58 20 34 28 46 40 60 39 104 7 41 54 22 2 27 92 86 49 70 13 73 102 1 1 0.666667 0.521622
28.4999 70 28 4 91 85 88 7 60 16 11 100 55 33 96 61 71 43 8 14 89 26 59 72 87 53 68 15 23 9 32 69 17 29 74 48 2 62 30 42 38 45 52 67 49 5 101 31 21 58 25 1 34 3 63 66 39 46 22 104 80 94 54 50 41 10 98 56 102 24 18 75 0.994975 1 0 0.513812
26.0758 70 85 76 22 23 0 12 7 100 11 57 103 16 20 63 97 26 32 14 19 53 44 83 15 87 68 72 9 65 17 48 2 61 36 69 74 43 62 52 42 38 55 45 31 49 5 64 25 101 50 46 33 21 1 41 35 27 10 84 94 54 104 4 80 86 98 24 37 70 40 77 0.979899 1 0.333333 0.521739
26.3925 70 67 88 28 22 13 95 85 33 34 20 61 103 59 16 8 30 36 53 26 32 43 65 29 15 23 72 37 87 74 17 2 69 5 48 42 38 11 52 55 45 62 9 58 21 64 50 101 75 25 47 39 3 66 60 63 27 10 46 84 54 94 4 41 92 70 56 102 40 98 31 1 1 0.333333 0.455621
28.6176 70 85 14 0 62 7 81 95 66 33 63 8 59 34 103 97 3 36 89 19 93 53 37 44 9 29 65 64 68 69 32 17 5 74 48 2 55 11 52 42 43 45 30 75 49 58 38 50 31 25 27 41 26 28 35 46 40 22 54 84 6 4 10 104 78 12 92 51 15 86 77 1 1 0 0.49435
28.8251 70 62 88 13 91 14 81 76 8 100 103 16 55 11 34 3 0 32 42 44 97 43 23 65 68 87 64 29 72 61 36 5 69 74 48 17 9 52 45 30 38 70 60 21 58 101 75 50 25 49 28 33 27 63 35 46 47 54 6 2 22 104 94 7 15 98 99 37 31 92 24 0.994975 1 0 0.474227
28.7676 70 22 95 13 4 39 76 79 56 61 55 66 47 34 63 8 30 59 14 42 53 0 64 83 65 44 37 15 23 36 48 29 74 17 32 5 9 45 52 43 62 38 11 25 58 21 50 49 31 101 1 41 46 33 40 3 28 27 80 94 54 10 6 2 92 19 18 12 98 73 102 0.98995 1 0 0.486188
26.1792 70 79 14 7 23 39 81 18 103 55 35 34 8 20 56 0 3 42 71 26 82 30 44 53 65 72 64 15 9 69 29 17 48 5 32 36 45 62 38 52 43 11 1 75 49 58 101 21 25 31 33 41 63 27 46 61 40 50 84 2 54 6 94 22 10 37 70 77 73 98 86 1 1 0.333333 0.486486
25.9747 70 88 79 23 4 57 62 28 8 35 56 66 61 59 20 3 44 19 43 6 89 97 72 15 37 83 53 29 9 17 36 65 2 69 74 32 42 55 45 52 38 30 11 31 5 25 49 50 21 75 33 26 46 40 1 47 63 27 48 54 7 104 10 58 78 70 77 92 13 51 102 0.954774 1 0.333333 0.561798
26.7533 70 81 60 0 12 76 13 57 35 8 103 96 90 56 20 93 26 30 44 19 89 43 37 53 64 15 68 83 87 2 5 69 48 17 36 32 62 11 55 38 52 45 9 31 21 75 23 101 58 49 1 33 39 61 3 41 46 54 50 94 7 6 4 104 24 102 77 51 99 86 70 0.904523 1 0.333333 0.5
28.4438 70 79 60 57 76 4 23 18 61 63 20 8 12 11 56 93 25 19 36 71 32 26 65 87 64 68 53 29 15 2 74 5 17 69 48 21 9 42 45 30 38 62 43 50 101 31 49 58 75 97 1 34 28 47 46 33 40 52 22 80 27 54 104 84 92 78 13 102 73 37 99 1 1 0 0.515707
28.4072 70 62 79 28 14 81 85 67 63 11 20 96 90 35 61 3 89 59 32 43 36 93 87 37 9 65 64 44 72 74 2 69 17 5 29 48 30 45 42 55 52 38 73 23 58 50 21 31 49 25 46 1 26 27 39 66 34 10 104 80 94 4 54 41 102 98 75 92 19 77 99 1 1 0 0.520231
25.9545 70 76 18 62 57 81 85 39 12 35 16 33 96 63 47 36 8 14 53 30 6 82 72 44 9 87 23 68 37 65 74 5 29 69 32 61 43 38 45 52 42 11 55 21 101 25 75 31 49 64 3 41 66 40 1 46 27 17 48 84 10 2 4 7 15 73 13 19 86 78 98 0.974874 1 0.333333 0.544693
28.5933 70 18 4 14 67 60 12 0 55 16 57 11 66 47 63 6 82 3 71 43 32 36 72 15 9 83 64 65 68 29 74 5 69 61 2 48 62 45 30 52 42 38 101 75 50 49 23 25 58 21 1 20 40 46 33 28 41 7 80 94 22 27 104 54 102 77 73 10 51 56 78 1 1 0 0.497326
26.1603 70 39 76 4 62 7 79 0 66 34 57 20 96 33 90 59 30 89 93 14 36 6 53 29 72 64 15 68 37 32 65 48 74 2 61 69 45 52 43 9 38 11 55 5 23 50 49 75 25 58 47 1 28 3 35 40 41 10 84 27 80 22 94 54 73 70 31 86 13 99 19 1 1 0.333333 0.489247
28.6374 70 22 60 14 13 4 39 18 16 55 33 8 61 90 96 36 26 25 32 42 30 59 23 44 29 9 83 68 37 48 2 69 5 65 17 74 43 52 62 38 11 45 66 101 75 58 21 64 49 31 28 3 27 41 40 1 34 10 94 104 54 46 80 7 99 19 98 12 51 102 56 1 1 0 0.491935
24.4222 70 0 14 28 12 79 7 95 8 56 57 103 96 16 63 32 89 93 71 53 44 82 23 72 9 83 15 29 37 2 74 5 61 69 17 36 43 62 55 11 45 30 42 49 64 75 21 50 31 101 1 20 39 35 40 26 66 58 54 46 41 52 104 94 13 102 77 19 70 86 98 0.944724 1 0.666667 0.48324
28.6822 70 14 67 0 57 39 22 91 8 96 33 34 63 103 47 82 30 43 53 26 71 36 23 29 64 83 72 15 87 61 5 2 65 69 48 17 52 45 38 55 9 62 11 101 31 58 25 50 21 75 28 60 41 3 20 40 35 7 6 54 46 80 4 84 92 86 99 56 13 37 19 1 1 0 0.486486
28.9216 70 91 67 7 13 85 57 4 16 96 33 8 12 35 63 97 82 36 19 3 53 93 87 72 65 68 64 37 29 2 74 61 32 69 48 17 55 62 52 30 38 42 43 31 49 101 45 75 25 5 20 28 47 41 40 60 66 46 80 94 22 27 50 10 92 77 54 70 51 15 56 1 1 0 0.457627
28.2371 70 28 62 81 23 0 60 67 12 16 35 90 20 103 56 97 25 14 19 43 32 93 53 68 15 83 9 29 37 74 65 61 17 69 5 2 38 30 55 52 11 42 45 49 75 101 21 58 64 31 3 1 41 40 63 46 66 27 4 54 48 7 6 94 102 73 51 77 98 99 92 1 1 0 0.541436
29.1588 70 23 14 79 28 22 85 4 103 59 55 20 96 35 33 43 53 42 93 97 82 3 83 37 65 68 29 64 87 61 69 48 5 2 17 36 30 11 9 52 38 62 45 101 25 50 75 21 58 31 66 39 63 46 47 26 60 80 104 94 27 7 6 10 98 15 102 24 73 56 19 0.994975 1 0 0.434524
28.6573 70 13 62 95 4 14 91 60 100 96 61 56 20 90 12 44 59 42 43 25 19 30 87 9 23 37 53 68 65 69 2 74 48 32 29 17 38 45 11 55 52 75 1 31 58 49 64 101 50 21 33 35 28 66 41 39 47 7 22 10 80 94 104 54 92 98 78 15 102 40 77 0.969849 1 0 0.519663
29 70 76 7 79 85 22 12 23 57 56 34 66 8 96 63 14 71 82 6 42 93 25 83 44 72 87 37 29 15 2 5 74 65 17 61 36 38 55 9 52 45 30 62 21 50 58 101 75 64 31 40 33 28 26 41 39 27 4 80 104 84 48 10 46 98 78 54 18 99 77 102 1 1 0 0.448276
26.1122 70 57 79 85 0 76 91 12 20 59 103 100 66 8 35 36 97 26 42 43 32 19 53 9 23 64 44 68 29 69 2 48 74 61 65 5 52 55 30 62 45 11 38 25 50 75 49 58 21 31 60 63 1 46 39 34 40 7 27 10 54 80 6 4 99 86 51 98 70 78 77 0.979899 1 0.333333 0.516393
26.1248 70 67 81 22 0 7 28 79 8 61 47 59 12 100 16 25 32 71 97 26 93 42 64 72 53 9 23 87 15 36 48 5 2 17 29 74 45 62 55 38 43 52 30 31 101 75 21 49 50 58 3 63 60 33 41 39 66 80 6 54 4 104 46 84 98 78 13 86 37 56 51 1 1 0.333333 0.494444
29.1277 70 88 79 76 62 14 39 4 8 20 55 100 12 61 16 6 3 0 26 36 30 42 23 87 9 29 68 53 65 48 2 17 32 69 5 74 45 38 11 43 52 7 28 50 25 101 31 58 75 64 33 46 41 35 1 21 27 80 10 54 94 84 104 22 15 98 40 51 18 19 24 0.954774 1 0 0.478378
28.8231 70 7 39 22 95 88 62 79 90 16 59 56 20 57 33 93 82 8 3 25 14 97 9 83 72 23 37 65 44 5 48 69 36 61 17 32 43 38 42 52 55 45 30 64 50 49 58 21 75 31 40 27 34 47 1 41 26 2 6 4 104 54 10 84 12 24 78 15 19 86 18 1 1 0 0.469444
26.3439 70 57 23 79 91 39 12 0 34 61 103 63 20 96 100 53 30 82 93 14 25 44 87 72 83 29 64 9 37 2 74 5 17 65 69 48 38 42 43 45 11 62 55 58 101 21 75 49 31 50 60 41 40 35 33 1 47 10 7 104 94 4 22 46 99 98 18 51 73 13 77 0.934673 1 0.333333 0.527933
28.5393 70 23 76 85 57 60 81 18 20 61 66 55 11 33 63 3 26 82 0 42 71 53 37 15 64 65 44 72 29 32 5 17 69 48 74 2 30 9 52 45 43 38 62 101 31 21 75 25 58 49 46 47 34 35 39 28 27 104 7 10 84 4 94 22 77 51 40 19 54 73 98 0.974874 1 0 0.52907
28.8509 70 76 81 39 28 4 88 91 57 20 55 59 100 63 11 82 71 36 44 53 89 93 72 65 15 29 68 64 83 5 48 32 2 74 69 17 38 62 9 43 52 42 30 21 50 75 49 23 25 58 47 40 35 3 26 34 46 7 27 94 10 54 104 6 70 19 78 86 92 102 37 1 1 0 0.466102
29.307 70 88 28 4 18 12 22 76 90 11 61 59 55 103 20 89 32 44 19 36 0 71 9 64 83 15 72 65 29 69 17 48 2 74 5 66 45 52 43 38 62 42 30 25 31 49 23 50 101 21 39 1 63 40 60 47 41 46 94 84 58 54 7 6 73 75 24 10 56 102 78 0.969849 1 0 0.442308
28.9167 70 28 22 76 0 4 23 14 59 47 103 66 34 96 20 89 8 32 97 43 44 53 37 9 87 64 65 83 15 61 48 17 69 5 74 29 42 30 11 45 38 62 55 58 75 25 50 31 101 49 63 46 60 27 41 26 21 104 10 80 52 84 94 7 51 19 54 99 86 73 77 0.974874 1 0 0.483333
26.3051 70 18 85 7 13 95 67 12 100 16 63 47 56 34 55 42 93 43 0 30 3 36 53 87 29 65 15 44 9 61 48 5 69 32 2 17 11 38 62 52 45 1 31 23 21 49 58 75 50 101 35 27 40 39 26 60 33 41 46 6 22 80 4 84 19 86 102 92 37 70 77 1 1 0.333333 0.468208
28.4109 70 28 95 67 91 60 57 22 100 90 33 8 20 55 47 36 89 43 3 19 93 14 72 83 65 37 23 9 87 5 2 29 61 69 17 74 30 42 11 38 45 62 52 50 31 58 49 25 64 75 40 1 66 39 21 34 27 104 84 6 7 10 41 46 78 51 102 12 70 77 73 1 1 0 0.519774
25.9538 70 12 57 91 22 23 60 7 61 35 96 8 47 63 56 42 97 3 59 71 25 43 64 68 83 44 87 65 53 69 2 48 32 17 29 36 11 38 55 52 62 30 9 31 50 21 5 45 75 58 39 34 41 27 46 20 33 4 10 54 84 6 94 80 86 78 37 77 19 40 70 1 1 0.333333 0.519663
26.2051 70 85 14 28 79 18 81 0 63 96 66 61 47 103 33 6 8 82 19 97 71 30 68 65 44 37 29 53 87 5 69 36 32 74 48 17 42 38 52 62 55 9 45 31 101 64 25 21 58 50 34 39 27 46 40 35 26 80 84 104 54 22 10 41 92 51 13 49 73 70 12 0.979899 1 0.333333 0.502825
25.7678 70 23 57 62 14 95 22 85 90 34 55 47 56 59 63 93 42 19 53 97 30 25 65 15 87 44 9 68 64 32 61 29 74 69 2 48 38 52 43 11 45 21 1 49 31 58 50 5 75 101 27 28 26 35 66 20 33 6 104 46 17 4 84 54 78 98 18 73 13 12 99 1 1 0.333333 0.547486
28.2797 70 57 67 60 62 18 39 13 8 100 16 61 103 47 12 71 32 82 14 53 43 26 64 37 65 72 83 44 15 74 2 48 29 69 17 36 38 45 55 30 52 9 42 5 50 23 25 101 75 49 41 33 3 66 20 1 40 54 94 22 46 104 10 6 78 31 24 51 99 56 73 0.98995 1 0 0.546154
26.3379 70 60 14 4 88 23 76 67 12 96 63 47 66 59 90 26 93 42 36 44 25 89 53 9 29 15 65 72 37 32 74 5 17 48 69 2 30 45 55 38 62 43 52 21 75 58 31 101 64 49 34 35 27 3 20 33 61 6 94 50 46 7 41 10 78 92 54 70 98 99 56 1 1 0.333333 0.463483
28.755 70 57 23 76 88 95 91 18 61 33 103 16 66 47 63 89 97 44 59 25 0 3 72 15 29 65 83 64 37 17 48 69 36 5 32 74 55 30 43 9 42 45 62 49 58 38 31 50 21 75 20 39 35 40 27 26 46 54 6 52 41 84 10 94 78 19 24 102 13 77 92 0.974874 1 0 0.502778
26.6566 70 91 57 88 0 22 13 76 66 96 34 16 11 103 33 59 71 53 82 43 25 30 68 15 9 29 44 87 23 32 2 17 36 69 48 61 42 38 55 45 62 52 54 5 101 58 50 64 21 75 39 26 46 20 3 60 47 104 6 94 41 7 80 4 40 10 51 49 99 70 98 0.939698 1 0.333333 0.478378
23.9203 70 4 7 22 28 14 60 95 8 16 34 56 63 100 20 26 97 89 36 32 82 6 64 44 37 72 9 87 65 29 17 61 69 74 5 48 45 52 42 38 11 55 43 58 75 21 101 49 50 31 27 47 39 33 41 66 40 46 84 10 2 94 104 54 78 24 18 86 102 13 70 1 1 0.666667 0.513889
25.8872 70 57 85 4 67 14 7 62 61 11 16 90 59 56 34 19 43 93 44 42 32 26 9 87 64 29 23 68 65 2 17 74 69 5 36 48 52 55 38 30 45 72 101 58 25 75 21 49 50 31 27 3 40 46 60 20 66 104 54 94 6 22 41 80 78 92 15 51 73 70 12 1 1 0.333333 0.529586
28.6629 70 0 18 23 62 28 76 14 8 33 35 16 47 59 55 43 36 3 93 44 97 25 87 83 15 29 37 53 68 5 65 32 74 69 48 17 9 11 30 45 42 52 38 31 21 75 49 50 64 58 26 39 61 34 27 66 63 7 22 80 94 84 2 41 78 102 12 40 24 13 10 1 1 0 0.488827
28.7259 70 13 14 57 0 79 4 62 8 33 56 90 66 96 12 59 93 6 30 53 26 43 68 15 87 83 23 72 37 61 48 2 5 65 69 17 45 9 52 11 38 55 42 25 21 75 50 58 101 31 47 28 20 40 39 63 1 54 104 94 10 46 27 80 86 24 73 77 99 18 102 1 1 0 0.481183
23.8085 70 28 22 7 39 79 85 81 63 103 57 90 34 66 12 93 36 30 59 0 82 8 64 23 15 83 68 72 65 17 74 69 5 2 61 32 38 52 55 9 42 62 43 58 25 31 75 49 101 21 40 46 35 26 41 3 20 84 6 4 27 104 94 10 37 24 98 73 102 13 54 1 1 0.666667 0.53352
23.8365 70 14 57 95 12 39 85 60 34 63 56 103 16 61 47 44 82 26 42 0 53 3 64 23 65 37 72 9 68 5 2 69 74 32 48 17 55 43 52 45 30 11 62 75 58 31 25 49 50 38 40 27 33 20 46 41 1 4 94 22 6 84 54 7 86 51 73 98 15 13 102 1 1 0.666667 0.528571
28.8627 70 60 28 14 76 95 67 22 66 8 103 11 96 90 33 3 26 44 71 0 30 42 65 72 68 15 23 64 29 2 36 69 5 48 32 17 43 52 38 9 62 55 45 31 21 25 75 101 50 49 61 47 39 46 35 63 20 7 27 94 6 84 80 58 13 102 86 40 19 92 54 1 1 0 0.464674
25.6497 70 95 18 62 91 23 79 39 12 20 59 34 47 57 63 43 44 8 97 3 26 6 53 9 29 72 87 68 37 32 69 2 17 48 61 65 55 42 30 38 45 52 11 101 31 49 5 58 75 25 28 60 40 41 46 33 21 54 80 94 84 104 7 27 56 13 70 77 15 51 78 1 1 0.333333 0.565341
26.2645 70 12 13 14 22 39 57 0 33 96 8 63 47 34 103 32 93 89 6 44 3 43 37 9 29 64 87 23 68 17 2 61 69 65 36 48 45 11 30 42 55 62 38 49 31 50 21 75 58 101 40 20 28 1 27 26 41 52 104 7 80 84 94 54 18 77 19 78 86 99 70 1 1 0.333333 0.474093
28.5942 70 57 7 67 88 12 60 76 34 11 61 59 35 47 8 42 3 26 82 43 30 93 44 37 65 68 64 23 72 32 74 69 29 5 48 2 52 55 62 9 45 38 80 21 75 49 50 31 58 101 41 46 33 20 39 1 66 84 54 4 22 10 6 17 19 78 99 13 102 15 40 1 1 0 0.497207
25.9538 70 62 4 67 91 14 0 12 96 16 56 90 55 61 11 53 8 42 6 19 43 89 29 37 44 87 68 72 65 48 74 69 32 2 36 17 45 30 52 9 38 94 83 21 50 23 49 31 58 64 39 60 35 26 47 1 46 22 27 41 7 84 54 104 73 99 98 78 51 102 70 1 1 0.333333 0.519663
28.3105 70 28 76 57 7 0 12 60 20 96 100 8 11 33 61 26 6 97 93 3 36 14 64 72 29 9 87 44 53 32 2 17 48 5 74 65 43 38 55 42 52 30 62 49 75 31 21 45 25 58 34 27 41 47 63 35 40 10 94 4 22 54 46 80 18 99 51 37 13 92 78 1 1 0 0.532258
28.7691 70 28 91 67 7 81 14 13 47 33 11 66 34 56 8 97 44 0 59 19 71 42 87 68 64 23 15 72 9 29 48 17 2 5 36 69 52 30 62 55 45 43 38 21 25 50 49 75 101 58 35 27 41 63 39 61 26 80 54 84 94 4 46 104 86 12 37 51 73 18 31 0.994975 1 0 0.480978
24.1572 70 22 39 18 81 95 76 4 12 35 103 57 47 90 20 14 89 43 97 53 25 71 44 15 68 9 87 72 83 36 69 17 48 65 32 29 45 55 38 52 62 11 30 21 64 58 5 101 23 50 34 46 66 26 28 40 1 27 10 54 6 7 41 80 19 24 86 73 98 13 77 1 1 0.666667 0.472892
28.817 70 22 79 57 4 88 76 14 33 16 11 59 35 103 12 43 32 89 19 44 82 0 87 83 72 23 53 9 29 5 48 65 69 74 17 2 42 62 38 55 52 45 30 75 64 31 50 21 58 101 41 46 3 39 28 60 1 10 27 6 84 104 80 54 102 98 77 86 78 92 37 0.98995 1 0 0.480226
28.4979 70 85 62 13 39 60 0 95 59 56 12 66 90 11 55 14 93 26 44 30 25 19 65 87 64 23 29 37 72 61 48 17 5 69 2 36 42 9 43 52 45 38 54 50 49 101 31 75 21 58 47 40 63 46 41 27 3 4 104 84 80 94 7 6 18 77 70 10 73 92 78 1 1 0 0.509036
28.5933 70 76 4 91 95 0 28 62 11 57 59 61 100 90 34 6 89 3 8 42 19 30 65 72 9 29 44 53 64 74 32 48 69 5 36 2 43 38 45 55 52 84 16 101 49 31 25 50 21 75 60 41 20 26 40 35 39 10 7 58 46 22 80 54 24 99 37 13 102 12 18 1 1 0 0.497326
26.5078 70 7 88 76 4 13 12 67 57 11 33 66 63 16 100 6 71 19 8 25 14 36 72 68 29 44 9 87 23 2 65 32 5 74 17 69 42 62 30 45 43 52 55 49 101 75 50 38 58 64 39 46 27 26 28 47 3 80 22 48 10 104 94 84 24 51 31 78 18 70 77 0.979899 1 0.333333 0.459239
26.3393 70 22 18 85 79 91 23 57 47 59 56 61 35 55 16 36 42 25 89 32 53 82 37 83 64 15 68 44 72 65 5 2 48 74 29 17 45 11 62 52 30 9 43 50 49 21 101 38 58 75 27 3 41 66 39 26 28 6 94 104 4 80 54 84 13 99 78 98 86 73 92 1 1 0.333333 0.463277
28.465 70 13 22 60 88 7 12 85 56 11 61 90 59 63 20 0 8 82 71 43 30 93 9 64 83 87 68 44 37 74 36 29 69 5 65 2 55 52 62 45 38 42 1 75 23 49 31 101 21 50 34 28 27 41 35 26 46 48 80 104 58 84 10 94 99 24 73 102 18 15 92 1 1 0 0.513089
28.3484 70 76 12 28 62 95 81 13 47 66 90 61 103 57 96 71 19 59 97 25 43 3 37 23 9 44 65 68 15 5 17 74 29 32 2 48 42 30 11 55 38 45 52 75 50 101 58 31 49 64 46 26 60 39 33 20 40 10 104 4 80 22 54 7 98 77 18 92 99 56 102 0.984925 1 0 0.542614
29.0805 70 85 88 57 14 22 81 13 100 59 33 35 90 66 11 30 93 8 3 32 26 36 44 29 15 65 83 64 68 5 61 17 48 2 74 69 62 55 42 52 9 45 43 75 21 25 50 49 23 101 1 60 28 47 40 63 46 6 27 41 54 94 7 10 99 24 37 51 102 77 18 0.984925 1 0 0.453804
26.4727 70 28 7 4 91 88 39 13 55 12 16 56 34 33 66 14 44 3 8 0 42 53 9 64 83 37 29 68 23 48 32 36 5 74 61 65 38 62 52 30 11 43 45 25 50 49 101 58 31 75 40 27 20 63 60 35 21 84 10 80 2 17 41 22 98 86 70 51 77 73 78 1 1 0.333333 0.444149
26.5425 70 0 67 79 23 88 14 39 56 35 90 8 34 20 61 19 44 89 59 43 42 53 72 64 68 9 15 29 87 17 48 36 65 2 74 5 62 38 52 45 30 11 55 50 21 58 25 75 49 101 27 3 33 66 40 63 60 10 6 104 84 94 80 7 78 70 54 37 51 73 13 1 1 0.333333 0.434211
28.5417 70 23 0 91 4 7 39 95 57 90 96 35 33 66 100 8 71 30 36 26 32 6 83 87 72 37 9 53 68 74 48 2 65 61 69 29 45 43 52 62 38 55 42 31 49 25 50 21 5 64 47 1 27 28 41 40 20 54 22 17 104 46 84 80 56 19 10 18 24 12 75 0.984925 1 0 0.518717
28.7365 70 57 12 13 23 39 91 79 8 20 47 103 35 90 11 89 26 42 6 53 14 43 87 29 64 83 72 65 68 36 2 32 17 74 5 61 55 38 62 30 9 45 52 21 50 25 49 31 58 75 34 60 66 40 33 1 63 7 27 10 84 94 104 41 99 15 77 78 19 73 18 0.979899 1 0 0.5
28.103 70 22 62 60 14 13 7 28 90 61 12 57 100 16 34 59 19 97 43 36 25 32 53 37 68 9 87 44 23 29 48 69 65 2 5 17 38 52 55 42 11 30 45 75 64 50 49 101 58 31 39 27 46 47 21 3 40 104 10 6 80 4 54 41 24 77 86 92 78 98 99 1 1 0 0.558333
28.6624 70 60 28 91 85 13 22 76 8 96 103 63 34 66 11 14 3 82 89 36 97 6 64 15 65 72 29 87 53 74 61 69 2 5 48 17 45 30 38 62 55 42 9 49 23 101 31 50 21 75 20 35 26 33 27 47 40 46 54 7 52 80 41 104 12 24 86 102 10 19 78 1 1 0 0.488889
28.2471 70 13 62 88 91 60 28 76 63 61 47 100 8 90 11 26 53 82 59 6 30 32 23 68 15 64 9 29 72 74 65 2 36 48 69 5 45 55 52 38 43 42 89 21 25 49 31 101 58 75 27 1 35 66 20 33 41 10 22 84 94 80 104 7 51 12 92 73 102 18 54 0.984925 1 0 0.555263
26.0672 70 13 7 39 28 95 81 79 20 103 35 90 66 33 61 19 26 30 89 32 36 93 9 29 64 53 65 15 23 17 5 69 2 48 74 27 42 11 43 62 55 45 38 58 21 49 101 31 50 75 47 3 40 34 63 60 41 94 54 6 4 52 46 80 12 102 37 99 10 70 24 1 1 0.333333 0.502907
25.9366 70 76 67 12 14 4 60 23 8 103 61 34 16 63 47 19 53 32 71 6 26 97 9 44 83 15 65 37 29 5 2 17 48 74 69 36 52 42 55 43 30 38 11 75 50 49 64 58 31 45 28 41 27 3 39 21 35 10 7 94 22 84 80 54 77 78 73 92 102 40 13 1 1 0.333333 0.522222
26.2742 70 95 23 76 12 67 62 4 20 90 55 56 66 11 59 30 71 97 43 32 0 3 44 53 29 68 72 37 65 74 17 48 2 5 69 36 42 9 45 52 38 84 24 101 50 58 64 75 49 21 63 61 46 28 47 41 34 10 104 27 22 94 80 6 92 73 15 54 31 40 13 1 1 0.333333 0.472678
26.2774 70 0 4 79 22 76 60 12 16 47 63 8 96 34 35 30 25 43 53 59 93 3 37 72 83 64 23 44 68 5 48 29 61 36 74 32 52 62 55 9 11 45 42 101 21 38 75 58 49 50 66 41 33 28 39 27 40 80 7 54 104 17 46 10 70 24 31 98 56 19 73 1 1 0.333333 0.472222
24.098 70 12 85 79 7 62 22 4 11 8 63 61 103 16 100 19 71 59 82 42 32 25 87 72 65 44 37 83 23 17 29 69 74 48 36 5 43 30 9 38 52 55 45 101 64 31 21 58 49 50 3 40 60 28 27 33 47 10 41 94 80 2 6 54 77 56 99 98 51 24 13 1 1 0.666667 0.483051
26.124 70 85 13 28 88 14 91 76 55 56 8 103 34 59 11 25 43 71 26 32 93 19 23 68 29 9 53 65 83 61 2 69 48 74 36 5 62 45 30 42 52 38 87 58 64 31 75 101 50 21 41 35 20 60 27 40 63 10 7 6 94 54 17 46 70 51 102 98 12 78 86 1 1 0.333333 0.494565
28.6901 70 0 12 88 62 81 14 60 55 56 100 66 63 35 47 6 93 42 71 32 43 8 44 9 65 53 64 68 29 2 17 5 48 74 36 69 52 45 38 11 30 21 54 58 101 75 50 25 31 49 40 1 46 27 41 34 61 80 7 94 10 22 4 84 51 99 19 102 92 13 15 0.979899 1 0 0.505618
28.6619 70 12 62 95 0 14 85 18 33 90 61 11 100 57 16 25 82 36 44 6 3 93 87 68 83 29 9 37 64 5 32 65 69 2 74 48 55 38 45 52 43 30 42 49 50 101 31 23 21 58 46 41 47 60 26 1 63 54 17 7 84 80 22 94 13 102 99 10 40 15 24 1 1 0 0.48895
28.8477 70 91 0 7 79 12 88 39 90 55 63 96 33 11 20 44 82 36 30 6 71 14 68 53 65 87 64 37 9 74 29 2 61 48 32 5 62 52 42 43 38 45 72 25 58 75 50 31 23 49 21 26 41 40 28 66 1 17 84 27 22 10 4 94 51 99 86 98 92 73 24 1 1 0 0.46648
29.043 70 39 91 0 88 28 13 12 96 34 11 55 47 59 90 82 3 93 8 6 44 97 68 64 72 53 83 15 65 29 5 17 61 36 74 48 42 43 30 45 9 38 62 21 31 25 23 101 58 49 33 60 63 66 26 40 35 50 10 54 94 46 4 52 56 73 77 19 92 99 75 0.979899 1 0 0.463277
28.6164 70 28 62 14 76 13 18 7 11 12 8 59 90 34 47 71 53 19 6 43 32 93 87 83 29 72 23 37 44 17 61 2 65 69 36 48 9 42 55 38 30 52 45 25 31 58 50 5 64 49 20 27 3 60 21 39 40 104 46 54 22 4 94 84 77 78 86 98 56 102 73 1 1 0 0.494505
28.581 70 28 57 85 22 12 0 23 35 56 63 16 90 100 47 43 42 26 89 14 53 97 68 44 64 65 9 87 83 32 29 74 69 36 61 2 30 52 45 11 62 55 38 5 31 50 21 58 101 75 46 3 41 34 60 66 33 94 27 4 17 10 80 84 73 77 86 37 19 99 92 0.98995 1 0 0.508876
28.813 70 60 18 88 7 12 67 4 33 47 100 90 57 20 63 32 53 36 93 97 82 71 68 83 44 65 64 29 15 61 2 74 48 5 17 69 45 11 42 62 52 38 9 25 58 23 31 101 50 75 66 46 1 26 28 39 27 80 104 54 41 10 6 22 49 37 77 24 40 102 78 0.994975 1 0 0.475676
28.2859 70 0 81 28 76 91 13 62 33 20 100 11 47 59 55 32 53 93 19 26 82 97 72 87 64 15 65 37 44 29 2 36 69 48 61 5 45 42 30 9 43 52 38 75 23 101 58 21 25 31 35 60 40 46 3 27 34 6 4 7 54 80 10 50 18 99 49 56 12 24 78 1 1 0 0.535326
26.4594 70 4 12 95 91 76 0 22 100 103 90 56 47 66 33 36 30 43 89 82 42 3 65 9 15 53 44 68 87 5 2 29 69 17 61 32 38 45 52 11 62 55 51 101 58 50 23 75 25 21 41 63 46 34 1 35 60 6 94 27 80 48 84 7 86 37 99 24 77 40 13 0.969849 1 0.333333 0.47619
24.0855 70 39 28 0 88 12 67 79 59 96 61 56 35 90 66 19 53 42 89 25 43 97 65 23 72 68 83 87 44 36 74 2 69 5 17 32 55 38 11 62 45 52 9 64 49 58 50 21 31 75 40 34 27 47 60 63 26 48 104 80 84 41 4 10 92 24 13 15 98 77 78 1 1 0.666667 0.485207
28.9646 70 85 23 67 76 91 7 57 96 8 16 47 56 59 35 71 19 30 14 44 42 25 65 29 83 15 87 37 64 48 61 5 74 17 2 69 45 62 9 55 43 38 11 50 49 101 58 75 31 21 27 3 20 26 46 28 39 6 10 94 4 54 52 104 78 12 24 40 86 18 73 0.984925 1 0 0.467568
29.0066 70 57 39 4 95 28 88 14 100 96 103 12 59 61 20 30 8 3 36 0 71 44 15 9 68 23 64 29 37 5 48 69 2 32 65 74 43 38 11 42 62 52 55 45 21 58 25 101 75 49 27 66 1 26 47 41 46 84 54 10 80 50 22 104 92 31 102 98 56 86 24 0.984925 1 0 0.462567
24.4907 70 4 22 0 76 79 12 88 63 96 66 57 103 16 100 25 71 30 89 19 93 43 23 64 72 37 87 9 29 17 5 32 69 2 74 48 55 42 45 11 52 62 38 31 50 21 101 49 75 58 47 61 28 41 46 1 26 6 104 10 94 84 27 54 51 77 99 102 13 70 24 0.924623 1 0.666667 0.491892
28.3063 70 22 13 28 14 39 81 76 61 66 103 100 8 16 59 36 43 97 89 53 93 26 87 29 23 37 15 72 64 74 48 5 32 69 2 17 45 42 52 9 55 11 30 50 31 58 75 38 25 21 40 34 46 35 60 1 33 41 94 80 10 27 4 84 102 24 49 70 92 78 73 1 1 0 0.532787
25.6765 70 60 18 4 76 67 62 23 20 103 33 63 61 8 12 42 53 6 44 30 26 36 72 15 65 37 9 87 68 69 74 32 29 48 17 2 11 52 38 43 55 45 98 25 5 58 49 31 64 21 34 46 47 27 1 3 39 94 84 104 80 50 54 22 40 86 51 78 10 56 70 0.994975 1 0.333333 0.566298
100
22.4134 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 55 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.794944
22.4661 70 79 23 62 95 39 81 4 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 55 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.784483
22.4578 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 89 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 10 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.786127
22.4077 70 79 23 62 4 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.796089
22.4051 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79661
22.4051 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79661
22.5456 70 4 23 62 95 39 81 0 16 66 57 55 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 45 5 31 21 58 25 51 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.768786
22.4371 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 58 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79023
22.3993 70 79 23 62 4 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.797753
22.4051 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 25 58 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79661
22.4852 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 71 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 7 102 101 54 94 76 33 10 48 18 91 13 70 59 1 1 0.666667 0.780702
22.4324 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 7 102 101 54 94 76 33 73 10 18 91 13 70 59 1 1 0.666667 0.791176
22.4082 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 15 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 50 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 10 91 13 70 59 1 1 0.666667 0.795977
22.4193 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 9 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.793785
22.4681 70 4 23 62 95 39 81 0 16 66 55 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.784091
22.4077 70 79 23 62 4 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.796089
22.4917 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 58 51 43 86 28 34 67 98 50 102 101 54 94 76 33 10 48 18 91 13 70 59 1 1 0.666667 0.779412
22.3794 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801724
22.4917 70 4 23 62 95 39 81 85 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 50 75 5 31 21 45 25 27 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.779412
22.4276 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 68 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.792135
22.4311 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 55 64 75 5 31 21 45 25 51 43 86 27 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.791429
22.4762 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 8 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 27 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.782486
22.5456 70 79 23 62 4 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 9 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 10 94 76 33 73 48 18 54 13 70 59 1 1 0.666667 0.768786
22.4251 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 17 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.792614
22.4472 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 89 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 10 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.788235
22.4769 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 89 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 58 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 10 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.782353
22.4641 70 79 23 62 4 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 10 48 19 91 13 70 59 1 1 0.666667 0.784884
22.5664 70 4 23 62 95 39 7 0 16 66 57 103 47 61 63 26 89 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 55 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 92 101 54 94 76 33 73 48 10 91 13 70 59 1 1 0.666667 0.764706
22.4432 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 55 77 64 50 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.789017
22.3794 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801724
22.4432 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 7 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.789017
22.4935 70 4 23 62 95 39 81 0 16 66 57 103 47 61 55 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 45 51 43 86 27 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.77907
22.462 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 89 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 10 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.785294
22.4881 70 4 23 62 95 39 81 0 16 66 57 103 47 55 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 10 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.78012
22.4498 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 9 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.787709
22.5 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 9 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 27 28 34 67 98 49 10 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.777778
22.4335 70 4 23 62 95 39 81 0 16 66 57 103 47 61 55 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79096
22.5672 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 89 44 97 14 37 65 83 41 9 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 10 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.764535
22.4082 70 79 23 62 4 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.795977
22.3797 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801676
22.4681 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 20 34 67 98 49 102 101 54 94 76 33 10 48 18 91 13 70 59 1 1 0.666667 0.784091
22.5269 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 17 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 20 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.772472
22.4684 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 89 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 27 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.784024
22.5322 70 79 23 62 95 39 81 0 16 55 57 103 47 61 63 26 3 82 6 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 50 5 31 21 58 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.771429
22.4724 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 68 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 50 75 5 31 21 45 25 27 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.783237
22.4262 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 50 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 10 94 76 33 73 48 18 54 13 70 59 1 1 0.666667 0.792398
22.5758 70 79 23 62 95 39 81 0 16 66 55 103 47 61 63 26 3 89 93 44 97 8 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 10 91 13 70 59 1 1 0.666667 0.762857
22.5389 70 79 23 4 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 15 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 7 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.770115
22.4719 70 79 23 62 95 4 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.783333
22.4202 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 50 5 31 21 58 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.793605
22.4109 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.795455
22.4417 70 79 23 62 95 39 81 0 16 66 57 103 55 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.789326
22.4455 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 55 64 75 5 31 21 45 25 27 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.788571
22.4202 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 50 25 27 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.793605
22.3797 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801676
22.4109 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.795455
22.4952 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 89 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 45 5 31 21 58 25 51 43 86 28 34 67 98 7 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.778736
22.5082 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 89 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 7 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.776163
22.4577 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 17 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 10 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.786145
22.4348 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 58 25 51 43 86 28 34 67 98 10 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.790698
22.4251 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 27 43 86 28 34 35 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.792614
22.4202 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 75 50 5 31 21 45 25 51 43 86 27 34 28 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.793605
22.4824 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 9 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 35 43 86 28 34 67 98 49 102 101 54 94 50 33 73 48 18 91 13 70 59 1 1 0.666667 0.78125
22.4386 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 50 5 31 21 58 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 10 13 70 59 1 1 0.666667 0.789941
22.3797 70 7 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801676
22.3797 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801676
22.4371 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 50 27 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79023
22.3852 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.800562
22.611 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 42 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 7 101 54 94 76 92 73 48 10 91 13 70 59 1 1 0.666667 0.755952
22.4348 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 10 18 91 13 70 59 1 1 0.666667 0.790698
22.3797 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801676
22.3797 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801676
22.5163 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 9 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 45 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.774566
22.5148 70 79 23 62 95 39 81 0 16 66 57 55 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 45 5 31 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.774854
22.5478 70 4 88 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.768362
22.3794 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801724
22.4968 70 4 79 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.778409
22.4578 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 9 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 10 33 73 48 18 91 13 70 59 1 1 0.666667 0.786127
22.3794 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801724
22.5503 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 89 9 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 7 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.767857
22.4056 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 89 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.796512
22.3794 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801724
22.4051 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79661
22.4394 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 89 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 55 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.789773
22.4159 70 79 23 62 95 39 81 0 16 66 57 103 55 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.794444
22.4193 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 27 43 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.793785
22.4516 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 25 58 51 27 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.787356
22.4051 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 25 58 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79661
22.4159 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 9 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.794444
22.4538 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 17 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 10 94 76 33 73 48 18 54 13 70 59 1 1 0.666667 0.786932
22.3993 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 7 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.797753
22.4394 70 22 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 7 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.789773
22.4051 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79661
22.4193 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 9 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.793785
22.4513 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 51 43 86 28 34 27 98 50 102 101 54 94 76 33 10 48 18 91 13 70 59 1 1 0.666667 0.787425
22.4859 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 43 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 5 31 21 45 25 27 35 86 28 34 67 98 49 7 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.780556
22.4176 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 89 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 50 5 31 21 58 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.794118
22.4455 70 79 23 62 95 39 81 0 16 66 57 103 47 61 63 89 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.788571
22.4335 70 79 23 62 4 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 58 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.79096
22.4681 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 9 72 69 80 36 40 74 32 2 11 38 52 46 30 53 55 64 75 5 31 21 45 25 51 43 86 27 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.784091
100
0.969849 1 0.333333 0.554974
1 1 0 0.488506
1 1 0.333333 0.513369
1 1 0 0.511299
1 1 0 0.48
0.969849 1 0.333333 0.49711
0.994975 1 0 0.5
1 1 0 0.474138
1 1 0 0.486264
1 1 0.666667 0.521622
0.994975 1 0 0.513812
0.979899 1 0.333333 0.521739
1 1 0.333333 0.455621
1 1 0 0.49435
0.994975 1 0 0.474227
0.98995 1 0 0.486188
1 1 0.333333 0.486486
0.954774 1 0.333333 0.561798
0.904523 1 0.333333 0.5
1 1 0 0.515707
1 1 0 0.520231
0.974874 1 0.333333 0.544693
1 1 0 0.497326
1 1 0.333333 0.489247
1 1 0 0.491935
0.944724 1 0.666667 0.48324
1 1 0 0.486486
1 1 0 0.457627
1 1 0 0.541436
0.994975 1 0 0.434524
0.969849 1 0 0.519663
1 1 0 0.448276
0.979899 1 0.333333 0.516393
1 1 0.333333 0.494444
0.954774 1 0 0.478378
1 1 0 0.469444
0.934673 1 0.333333 0.527933
0.974874 1 0 0.52907
1 1 0 0.466102
0.969849 1 0 0.442308
0.974874 1 0 0.483333
1 1 0.333333 0.468208
1 1 0 0.519774
1 1 0.333333 0.519663
0.979899 1 0.333333 0.502825
1 1 0.333333 0.547486
0.98995 1 0 0.546154
1 1 0.333333 0.463483
0.974874 1 0 0.502778
0.939698 1 0.333333 0.478378
1 1 0.666667 0.513889
1 1 0.333333 0.529586
1 1 0 0.488827
1 1 0 0.481183
1 1 0.666667 0.53352
1 1 0.666667 0.528571
1 1 0 0.464674
1 1 0.333333 0.565341
1 1 0.333333 0.474093
1 1 0 0.497207
1 1 0.333333 0.519663
1 1 0 0.532258
0.994975 1 0 0.480978
1 1 0.666667 0.472892
0.98995 1 0 0.480226
1 1 0 0.509036
1 1 0 0.497326
0.979899 1 0.333333 0.459239
1 1 0.333333 0.463277
1 1 0 0.513089
0.984925 1 0 0.542614
0.984925 1 0 0.453804
1 1 0.333333 0.444149
1 1 0.333333 0.434211
0.984925 1 0 0.518717
0.979899 1 0 0.5
1 1 0 0.558333
1 1 0 0.488889
0.984925 1 0 0.555263
1 1 0.333333 0.502907
1 1 0.333333 0.522222
1 1 0.333333 0.472678
1 1 0.333333 0.472222
1 1 0.666667 0.483051
1 1 0.333333 0.494565
0.979899 1 0 0.505618
1 1 0 0.48895
1 1 0 0.46648
0.979899 1 0 0.463277
1 1 0 0.494505
0.98995 1 0 0.508876
0.994975 1 0 0.475676
1 1 0 0.535326
0.969849 1 0.333333 0.47619
1 1 0.666667 0.485207
0.984925 1 0 0.467568
0.984925 1 0 0.462567
0.924623 1 0.666667 0.491892
1 1 0 0.532787
0.994975 1 0.333333 0.566298
100
1 1 0.666667 0.794944
1 1 0.666667 0.784483
1 1 0.666667 0.786127
1 1 0.666667 0.796089
1 1 0.666667 0.79661
1 1 0.666667 0.79661
1 1 0.666667 0.768786
1 1 0.666667 0.79023
1 1 0.666667 0.797753
1 1 0.666667 0.79661
1 1 0.666667 0.780702
1 1 0.666667 0.791176
1 1 0.666667 0.795977
1 1 0.666667 0.793785
1 1 0.666667 0.784091
1 1 0.666667 0.796089
1 1 0.666667 0.779412
1 1 0.666667 0.801724
1 1 0.666667 0.779412
1 1 0.666667 0.792135
1 1 0.666667 0.791429
1 1 0.666667 0.782486
1 1 0.666667 0.768786
1 1 0.666667 0.792614
1 1 0.666667 0.788235
1 1 0.666667 0.782353
1 1 0.666667 0.784884
1 1 0.666667 0.764706
1 1 0.666667 0.789017
1 1 0.666667 0.801724
1 1 0.666667 0.789017
1 1 0.666667 0.77907
1 1 0.666667 0.785294
1 1 0.666667 0.78012
1 1 0.666667 0.787709
1 1 0.666667 0.777778
1 1 0.666667 0.79096
1 1 0.666667 0.764535
1 1 0.666667 0.795977
1 1 0.666667 0.801676
1 1 0.666667 0.784091
1 1 0.666667 0.772472
1 1 0.666667 0.784024
1 1 0.666667 0.771429
1 1 0.666667 0.783237
1 1 0.666667 0.792398
1 1 0.666667 0.762857
1 1 0.666667 0.770115
1 1 0.666667 0.783333
1 1 0.666667 0.793605
1 1 0.666667 0.795455
1 1 0.666667 0.789326
1 1 0.666667 0.788571
1 1 0.666667 0.793605
1 1 0.666667 0.801676
1 1 0.666667 0.795455
1 1 0.666667 0.778736
1 1 0.666667 0.776163
1 1 0.666667 0.786145
1 1 0.666667 0.790698
1 1 0.666667 0.792614
1 1 0.666667 0.793605
1 1 0.666667 0.78125
1 1 0.666667 0.789941
1 1 0.666667 0.801676
1 1 0.666667 0.801676
1 1 0.666667 0.79023
1 1 0.666667 0.800562
1 1 0.666667 0.755952
1 1 0.666667 0.790698
1 1 0.666667 0.801676
1 1 0.666667 0.801676
1 1 0.666667 0.774566
1 1 0.666667 0.774854
1 1 0.666667 0.768362
1 1 0.666667 0.801724
1 1 0.666667 0.778409
1 1 0.666667 0.786127
1 1 0.666667 0.801724
1 1 0.666667 0.767857
1 1 0.666667 0.796512
1 1 0.666667 0.801724
1 1 0.666667 0.79661
1 1 0.666667 0.789773
1 1 0.666667 0.794444
1 1 0.666667 0.793785
1 1 0.666667 0.787356
1 1 0.666667 0.79661
1 1 0.666667 0.794444
1 1 0.666667 0.786932
1 1 0.666667 0.797753
1 1 0.666667 0.789773
1 1 0.666667 0.79661
1 1 0.666667 0.793785
1 1 0.666667 0.787425
1 1 0.666667 0.780556
1 1 0.666667 0.794118
1 1 0.666667 0.788571
1 1 0.666667 0.79096
1 1 0.666667 0.784091
23.8085 70 28 22 7 39 79 85 81 63 103 57 90 34 66 12 93 36 30 59 0 82 8 64 23 15 83 68 72 65 17 74 69 5 2 61 32 38 52 55 9 42 62 43 58 25 31 75 49 101 21 40 46 35 26 41 3 20 84 6 4 27 104 94 10 37 24 98 73 102 13 54 1 1 0.666667 0.53352
22.3794 70 4 23 62 95 39 81 0 16 66 57 103 47 61 63 26 3 82 93 44 97 14 37 65 83 41 60 87 72 69 80 36 40 74 32 2 11 38 52 46 30 53 77 64 75 31 5 21 50 25 51 43 86 28 34 67 98 49 102 101 54 94 76 33 73 48 18 91 13 70 59 1 1 0.666667 0.801724
#bash
for d in */ ;
do
echo $d" " | tr -d "\n" >> 'allallbestsols.txt'
cd $d
rm -f 'allbestsols.txt'
for f in bestsol.* ;
do
cat $f >> 'allbestsols.txt'
echo >> 'allbestsols.txt'
cat $f | cut -d " " -f 1 | tr -d "\n" >> ../'allallbestsols.txt'
echo " " | tr -d "\n" >> ../'allallbestsols.txt'
done
cd ..
echo >> 'allallbestsols.txt'
done
\ No newline at end of file
-C=105 -c=52 -R=7 -Q=5 -A=5 -n=10 -N=35 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=5 -A=5 -n=10 -N=35 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=5 -n=10 -N=35 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=6 -n=10 -N=35 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=7 -n=10 -N=35 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=8 -n=10 -N=35 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=9 -n=10 -N=35 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=10 -n=10 -N=35 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=5 -n=10 -N=26 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=6 -n=10 -N=26 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=7 -n=10 -N=26 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=8 -n=10 -N=26 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=9 -n=10 -N=26 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=10 -n=10 -N=26 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=5 -n=10 -N=21 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=6 -n=10 -N=21 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=7 -n=10 -N=21 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=8 -n=10 -N=21 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=9 -n=10 -N=21 -r=1 -q=0
-C=105 -c=52 -R=7 -Q=2 -A=10 -n=10 -N=21 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=5 -n=10 -N=35 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=6 -n=10 -N=35 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=7 -n=10 -N=35 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=8 -n=10 -N=35 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=9 -n=10 -N=35 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=10 -n=10 -N=35 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=5 -n=10 -N=26 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=6 -n=10 -N=26 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=7 -n=10 -N=26 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=8 -n=10 -N=26 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=9 -n=10 -N=26 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=10 -n=10 -N=26 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=5 -n=10 -N=21 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=6 -n=10 -N=21 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=7 -n=10 -N=21 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=8 -n=10 -N=21 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=9 -n=10 -N=21 -r=1 -q=0
-C=105 -c=104 -R=7 -Q=2 -A=10 -n=10 -N=21 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=5 -n=10 -N=35 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=6 -n=10 -N=35 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=7 -n=10 -N=35 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=8 -n=10 -N=35 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=9 -n=10 -N=35 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=10 -n=10 -N=35 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=5 -n=10 -N=26 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=6 -n=10 -N=26 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=7 -n=10 -N=26 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=8 -n=10 -N=26 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=9 -n=10 -N=26 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=10 -n=10 -N=26 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=5 -n=10 -N=21 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=6 -n=10 -N=21 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=7 -n=10 -N=21 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=8 -n=10 -N=21 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=9 -n=10 -N=21 -r=1 -q=0
-C=105 -c=156 -R=7 -Q=2 -A=10 -n=10 -N=21 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=5 -n=10 -N=35 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=6 -n=10 -N=35 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=7 -n=10 -N=35 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=8 -n=10 -N=35 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=9 -n=10 -N=35 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=10 -n=10 -N=35 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=5 -n=10 -N=26 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=6 -n=10 -N=26 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=7 -n=10 -N=26 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=8 -n=10 -N=26 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=9 -n=10 -N=26 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=10 -n=10 -N=26 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=5 -n=10 -N=21 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=6 -n=10 -N=21 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=7 -n=10 -N=21 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=8 -n=10 -N=21 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=9 -n=10 -N=21 -r=1 -q=0
-C=105 -c=208 -R=7 -Q=2 -A=10 -n=10 -N=21 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
-C=400 -c=400 -R=3 -Q=3 -A=15 -n=16 -N=40 -r=1 -q=0
for nbCours in 15
do
for nbComps in 10 20
do
for cbyTF in 2
do
for rEngine in 50
do
for pMut in 0.25 0.5 0.75
do
for pCross in 0.25 0.5 0.75
do
for tSize in 3 7
do
RESDIR="../results/${nbCours}_${nbComps}_${cbyTF}_${rEngine}_${pMut}_${pCross}_${tSize}"
mkdir $RESDIR
for run in 30
do
RESDIR="../results/${nbCours}_${nbComps}_${cbyTF}_${rEngine}_${pMut}_${pCross}_${tSize}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,A=$cbyTF,O=$RESDIR,B=$rEngine,x=$pMut,X=$pCross,F=$tSize job.sh
done
done
done
done
done
done
done
done
for nbCours in 25
do
for nbComps in 10
do
for cbyTF in 3
do
for rEngine in 50
do
for pMut in 0.25 0.5 0.75
do
for pCross in 0.25 0.5 0.75
do
for tSize in 3 7
do
RESDIR="../results/${nbCours}_${nbComps}_${cbyTF}_${rEngine}_${pMut}_${pCross}_${tSize}"
mkdir $RESDIR
for run in 30
do
RESDIR="../results/${nbCours}_${nbComps}_${cbyTF}_${rEngine}_${pMut}_${pCross}_${tSize}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,A=$cbyTF,O=$RESDIR,B=$rEngine,x=$pMut,X=$pCross,F=$tSize job.sh
done
done
done
done
done
done
done
done
for nbCours in 20
do
for nbComps in 20
do
for cbyTF in 3
do
for rEngine in 50
do
for pMut in 0.25 0.5 0.75
do
for pCross in 0.25 0.5 0.75
do
for tSize in 3 7
do
RESDIR="../results/${nbCours}_${nbComps}_${cbyTF}_${rEngine}_${pMut}_${pCross}_${tSize}"
mkdir $RESDIR
for run in 30
do
RESDIR="../results/${nbCours}_${nbComps}_${cbyTF}_${rEngine}_${pMut}_${pCross}_${tSize}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,A=$cbyTF,O=$RESDIR,B=$rEngine,x=$pMut,X=$pCross,F=$tSize job.sh
done
done
done
done
done
done
done
done
for nbCours in 30
do
for nbComps in 40
do
for cbyTF in 4
do
for rEngine in 50
do
for pMut in 0.25 0.5 0.75
do
for pCross in 0.25 0.5 0.75
do
for tSize in 3 7
do
RESDIR="../results/${nbCours}_${nbComps}_${cbyTF}_${rEngine}_${pMut}_${pCross}_${tSize}"
mkdir $RESDIR
for run in 30
do
RESDIR="../results/${nbCours}_${nbComps}_${cbyTF}_${rEngine}_${pMut}_${pCross}_${tSize}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,A=$cbyTF,O=$RESDIR,B=$rEngine,x=$pMut,X=$pCross,F=$tSize job.sh
done
done
done
done
done
done
done
done
for idx in 1 2 3 4
do
for nbCours in 105 #LATER 95 85 75 65 55 45 35
do
for i in 3 4 5
do
for cbyTF in 5 6 7 8 9 10
do
for maxCbyC in 7 #LATER 3 4 5 6
do
for maxPre in 2 #LATER 3 4 DONE 5
do
for nbGen in 10000
do
let "nbComps=$idx * ($nbCours/2)"
let "maxCbyTF=$nbCours/$i"
let "minCbyTF=$nbCours/10"
if [ $minCbyTF -lt $cbyTF ]
then
let "minCbyTF=$cbyTF"
fi
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${minCbyTF}_${maxCbyTF}_${nbGen}"
mkdir $RESDIR
for run in 30
do
let "nbComps=$idx * ($nbCours/2)"
let "maxCbyTF=$nbCours/$i"
let "minCbyTF=$nbCours/10"
if [ $minCbyTF -lt $cbyTF ]
then
let "minCbyTF=$cbyTF"
fi
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${minCbyTF}_${maxCbyTF}_${nbGen}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,R=$maxCbyC,Q=$maxPre,A=$cbyTF,n=$minCbyTF,N=$maxCbyTF,r=1,q=0,O=$RESDIR,B=20,x=0.75,X=0.75,F=3,G=$nbGen job.sh
echo "-C=${nbCours} -c=${nbComps} -R=${maxCbyC} -Q=${maxPre} -A=${cbyTF} -n=${minCbyTF} -N=${maxCbyTF} -r=1 -q=0" >> case
done
done
done
done
done
done
done
done
#
for nbCours in 55 #LATER 95 85 75 65 55 45 35
do
for i in 3 #4 5
do
for cbyTF in 6 #6 7 8 9 10
do
for maxCbyC in 5 #LATER 3 4 5 6
do
for maxPre in 3 #LATER 2 3 4
do
for nbGen in 10000
do
nbComps=75
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${nbGen}"
mkdir $RESDIR
for run in 30
do
nbComps=75
minCbyTF=7
maxCbyTF=15
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${nbGen}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,R=$maxCbyC,Q=$maxPre,A=$cbyTF,n=$minCbyTF,N=$maxCbyTF,r=1,q=0,O=$RESDIR,B=50,x=0.75,X=0.75,F=3,G=$nbGen job.sh
echo "-C=${nbCours} -c=${nbComps} -R=${maxCbyC} -Q=${maxPre} -A=${cbyTF} -n=${minCbyTF} -N=${maxCbyTF} -r=1 -q=0" >> case
done
done
done
done
done
done
done
#
for nbCours in 105 #LATER 95 85 75 65 55 45 35
do
for cbyTF in 9 #6 7 8 9 10
do
for maxCbyC in 5 #LATER 3 4 5 6
do
for maxPre in 3 #LATER 2 3 4
do
for nbGen in 100000
do
nbComps=210
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${nbGen}"
mkdir $RESDIR
for run in 30
do
nbComps=210
minCbyTF=10
maxCbyTF=21
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${nbGen}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,R=$maxCbyC,Q=$maxPre,A=$cbyTF,n=$minCbyTF,N=$maxCbyTF,r=1,q=0,O=$RESDIR,B=50,x=0.75,X=0.75,F=3,G=$nbGen job.sh
echo "-C=${nbCours} -c=${nbComps} -R=${maxCbyC} -Q=${maxPre} -A=${cbyTF} -n=${minCbyTF} -N=${maxCbyTF} -r=1 -q=0" >> case
done
done
done
done
done
done
#
for nbCours in 400 #LATER 300 310 320 330 340 350 360 370 380 390 410 420 430 440 450 460 470 480 490 500
do
for cbyTF in 15
do
for maxCbyC in 3
do
for maxPre in 3
do
for nbGen in 10000
do
nbComps=400
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${nbGen}"
mkdir $RESDIR
for run in 1
do
nbComps=400
minCbyTF=16
maxCbyTF=40
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${nbGen}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,R=$maxCbyC,Q=$maxPre,A=$cbyTF,n=$minCbyTF,N=$maxCbyTF,r=1,q=0,O=$RESDIR,B=50,x=0.75,X=0.75,F=3,G=$nbGen job.sh
echo "-C=${nbCours} -c=${nbComps} -R=${maxCbyC} -Q=${maxPre} -A=${cbyTF} -n=${minCbyTF} -N=${maxCbyTF} -r=1 -q=0" >> case
done
done
done
done
done
done
#
for nbCours in 400 #LATER 300 310 320 330 340 350 360 370 380 390 410 420 430 440 450 460 470 480 490 500
do
for cbyTF in 15
do
for maxCbyC in 3
do
for maxPre in 3
do
for nbGen in 100000
do
nbComps=400
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${nbGen}"
mkdir $RESDIR
for run in 1
do
nbComps=400
minCbyTF=16
maxCbyTF=40
RESDIR="../results/${nbCours}_${nbComps}_${maxCbyC}_${maxPre}_${cbyTF}_${nbGen}"
sbatch --array=1-${run} --job-name=${RESDIR} --output=${RESDIR}.out --export=C=$nbCours,c=$nbComps,R=$maxCbyC,Q=$maxPre,A=$cbyTF,n=$minCbyTF,N=$maxCbyTF,r=1,q=0,O=$RESDIR,B=50,x=0.75,X=0.75,F=3,G=$nbGen job.sh
echo "-C=${nbCours} -c=${nbComps} -R=${maxCbyC} -Q=${maxPre} -A=${cbyTF} -n=${minCbyTF} -N=${maxCbyTF} -r=1 -q=0" >> case
done
done
done
done
done
done
#!/bin/bash
#SBATCH -o main.out
#SBATCH -N 1
#SBATCH -n 1
#SBATCH --mem=4G
#SBATCH -p defq
/home/jeremie.humeau/private/gitProject/csdvp-evolutionary-algorithm-optimization/build/application/ceao -G=$G -P=100 -S=$SLURM_ARRAY_TASK_ID -C=$C -c=$c -R=$R -Q=$Q -A=$A --outputfile=$O -n=$n -N=$N -r=$r -q=$q -B=$B -x=$x -X=$X -F=$F -T=10
exit 0
#!/bin/bash
#SBATCH -o main.out
#SBATCH -N 1
#SBATCH -n 1
#SBATCH --mem=4G
#SBATCH -p defq
/home/jeremie.humeau/private/gitProject/csdvp-evolutionary-algorithm-optimization/build/application/ceao2 -G=10000 -P=100 -S=1 -C=105 -c=104 -R=7 -Q=5 -A=7 --outputfile=./TFtest -n=10 -N=25 -r=1 -q=0 -B=20 -x=0.75 -X=0.75 -F=3 -T=10
exit 0
push with error 98
push with error 58
push with error 72
push with error 67
push with error 42
push with error 70
push with error 60
push with error 1
push with error 21
push with error 97
push with error 73
push with error 101
push with error 66
push with error 75
push with error 1
push with error 7
push with error 28
push with error 66
push with error 1
push with error 31
push with error 21
push with error 1
push with error 54
push with error 72
push with error 101
push with error 80
push with error 94
push with error 83
push with error 54
push with error 84
push with error 16
push with error 1
push with error 89
push with error 27
push with error 84
push with error 24
push with error 87
push with error 21
push with error 54
push with error 72
push with error 51
push with error 98
......@@ -9,6 +9,7 @@ SET (EXERCICE_SOURCES
course.cpp
profession.cpp
problem.cpp
decay.cpp
)
ADD_LIBRARY(lModel STATIC ${EXERCICE_SOURCES})
......
......@@ -61,7 +61,7 @@ Competency Competency::buildTMP(double d, std::string name)
// === CONSTRUCTOR
Competency::Competency(int id, Magnitude m, std::string s)
: _id(id), _m(m), _name(s)
: _id(id), _m(m), _undecayedMag(m), _name(s), _howLongDecaying(0), _isDecaying(false)
{
}
......@@ -115,11 +115,33 @@ void Competency::evolveTowards(double d)
}
}
const double Competency::competencyValue() const
double Competency::competencyValue() const
{
return this->_m.value();
}
double Competency::decay()
{
if(!this->_isDecaying)
return this->_m.value();
double val = this->_m.value();
val -= DecayEngine::defaultDecay(this->_howLongDecaying);
//std::cout << "before:" << this->_m.value() << " vs. after: " << val << std::endl;
return val < 0 ? 0 : val > 1 ? 1 : val;
}
void Competency::saveDecay()
{
double val = this->decay();
//std::cout << "inS&D:" << val << std::endl;
this->_howLongDecaying = 0;
this->_isDecaying = false;
this->_m.set(val);
}
// === OPERATOR
std::ostream& operator<<(std::ostream& Stream, const Competency & c)
{
......
......@@ -4,6 +4,8 @@
#include <string>
#include "magnitude.h"
#include "decay.h"
/**
* Represents the notion of a competency (a.k.a. "non operationalisable" skill).
......@@ -15,9 +17,13 @@
class Competency
{
private:
int _id;
Magnitude _m;
Magnitude _undecayedMag; //Decay related
std::string _name;
int _id;
int _howLongDecaying; //Decay related
bool _isDecaying; //Decay related
//Constructor
Competency(int, Magnitude, std::string);
......@@ -51,7 +57,7 @@ class Competency
// === GETTER
///Retrieves the magnitude/mastery value of the competency
const double competencyValue() const;
double competencyValue() const;
///Retrieves the magnitude of the compentecy
const Magnitude c_magnitude() const {return this->_m;}
Magnitude & magnitude(){return this->_m;}
......@@ -59,12 +65,27 @@ class Competency
const std::string c_name() const {return this->_name;}
std::string & name() {return this->_name;}
const int id() const {return this->_id;}
int id() const {return this->_id;}
// === SETTER
void setMagnitude(Magnitude & m){this->_m = m;}
void setName(std::string s){this->_name = s;}
// === DECAY
bool isDecaying() const {return this->_isDecaying;}
void decayState(bool state) {this->_isDecaying = state;}
int increaseDecay(){this->_isDecaying = true; this->_howLongDecaying++; return this->_howLongDecaying;}
void resetDecay(){this->_isDecaying = false; this->_howLongDecaying = 0;}
void setTimeDecay(unsigned int time){this->_howLongDecaying = time;}
Magnitude getUndecayedMagnitude(){return this->_undecayedMag;}
/**Returns the new magnitude of this affected by the current competency's decay.
* Note that the decay **IS NOT** saved in the magnitude. Use saveDecay instead.
*/
double decay();
/** Save the new magnitude value according to the decay of this. The function reset the decay of this by setting it to FALSE. Therefore, the decay restart to 0.
*/
void saveDecay();
// === OPERATOR
/// A competency is equal to another iff their id are the same, or their name
bool operator==(const Competency & c) const;
......
......@@ -46,6 +46,7 @@ std::pair<bool, double> ConstraintsPrerequisites::integrityCheck(Cursus indiv)
{
// HERE, VARIABLE DECAY CAN BE APPLIED!!!!!!!!
compByTF.at(currentTF).push_back(compByTF.at(currentTF-1).at(j));
compByTF.at(currentTF).at(compByTF.at(currentTF).size()-1).increaseDecay();
}
// Then, we explore the current TF for new Comp
......@@ -83,6 +84,7 @@ std::pair<bool, double> ConstraintsPrerequisites::integrityCheck(Cursus indiv)
//std::cout << currentCompetency.c_name() << " already exists" <<std::endl;
try
{
compByTF.at(currentTF).at(alreadyExists.first).saveDecay();
compByTF.at(currentTF).at(alreadyExists.first).evolveTowards(currentCompetency.magnitude());
}
catch(CompetencyEvolvingException & e) //if CEE is thrown, then magnitude has been auto rebased
......@@ -101,15 +103,15 @@ std::pair<bool, double> ConstraintsPrerequisites::integrityCheck(Cursus indiv)
}
}
//std::cout << "==EXPLORING COMP BY TF" << std::endl;
for(int i = 0; i < compByTF.size(); i++)
{
//std::cout << "TF#" << std::to_string(i) << std::endl;
for(int j = 0; j < compByTF.at(i).size() ; j++)
{
//std::cout << compByTF.at(i).at(j) << std::endl;
}
}
// //std::cout << "==EXPLORING COMP BY TF" << std::endl;
// for(int i = 0; i < compByTF.size(); i++)
// {
// //std::cout << "TF#" << std::to_string(i) << std::endl;
// for(int j = 0; j < compByTF.at(i).size() ; j++)
// {
// //std::cout << compByTF.at(i).at(j) << std::endl;
// }
// }
bool isOK = ((notFound == 0) && (notRespected == 0));
/*
......@@ -156,7 +158,7 @@ std::pair<int, int> ConstraintsPrerequisites::_prereqsInPreviousTF(std::vector<C
if(prereqs.at(i)==cInTF.at(j))
{
found = true;
if(prereqs.at(i).c_magnitude().value() > cInTF.at(j).c_magnitude().value())
if(prereqs.at(i).c_magnitude().value() > cInTF.at(j).decay())
notRespected++;
}
}
......
......@@ -23,10 +23,24 @@ std::pair<bool, double> ConstraintsProfession::integrityCheck(Cursus indiv)
Competency currentComp;
std::pair<int, Competency> posFound;
bool changedTF = false;
int currentTF = 0;
for(int i = 0 ; i < indiv.size(); i++)
{
current = this->_pb.coursesCatalogue().at(indiv.at(i));
if(currentTF != i / this->_pb.cfg_pickedCoursesByTimeFrame())
changedTF = true;
else
changedTF = false;
currentTF = i / this->_pb.cfg_pickedCoursesByTimeFrame();
for(int j = 0; j < compToAnswer.size(); j++)
{
compToAnswer.at(j).increaseDecay();
}
for(int j = 0 ; j < current.teachedCompetenciesWeighted().size() ; j++)
{
currentComp = current.teachedCompetenciesWeighted().at(j).first;
......@@ -36,6 +50,7 @@ std::pair<bool, double> ConstraintsProfession::integrityCheck(Cursus indiv)
{
try
{
compToAnswer.at(posFound.first).saveDecay();
compToAnswer.at(posFound.first).evolveTowards(currentComp.magnitude());
}
catch(CompetencyEvolvingException & e) //if CEE is thrown, then magnitude has been auto rebased
......@@ -48,6 +63,12 @@ std::pair<bool, double> ConstraintsProfession::integrityCheck(Cursus indiv)
}
}
for(int i = 0; i < compToAnswer.size(); i++)
{
compToAnswer.at(i).saveDecay();
//std::cout << compToAnswer.at(i) << std::endl;
}
//Now that we have evolve all the tmp competency, we compate their mag to the requirement. We count how many is not met to define the metric
int score = 0;
......
......@@ -239,10 +239,10 @@ bool Course::_lazyEquality(const Course & c) const
}
///@todo
bool Course::_fullEquality(const Course & c) const
{
throw NotImplementedException("Course::_fullEquality");
}
// bool Course::_fullEquality(const Course & c) const
// {
// throw NotImplementedException("Course::_fullEquality");
// }
// === OPERATOR
std::ostream& operator<<(std::ostream& Stream, const Course & c)
......@@ -251,20 +251,20 @@ std::ostream& operator<<(std::ostream& Stream, const Course & c)
std::string tf;
if(c.timeFrame().size() > 0)
{
for(int i = 0; i < c.timeFrame().size()-1; i++)
for(unsigned int i = 0; i < c.timeFrame().size()-1; i++)
tf+=std::to_string(c.timeFrame().at(i))+" ; ";
tf+=std::to_string(c.timeFrame().at(c.timeFrame().size()-1));
s+="\n\tTimeFrames: ["+tf+"]";
}
s+="\n\tRequirement: [";
for(int i = 0; i < c.prerequisites().size(); i++)
for(unsigned int i = 0; i < c.prerequisites().size(); i++)
{
s+="" + c.prerequisites().at(i).c_name()+ "("+ std::to_string(c.prerequisites().at(i).c_magnitude().value()) + ") ; ";
}
s+="]";
s+="\n\tTeaches: [";
for(int i = 0 ; i < c.teachedCompetenciesWeighted().size(); i++)
for(unsigned int i = 0 ; i < c.teachedCompetenciesWeighted().size(); i++)
{
s+= "" + c.teachedCompetenciesWeighted().at(i).first.c_name() + "("+ std::to_string(c.teachedCompetenciesWeighted().at(i).first.c_magnitude().value())+") ; ";
}
......@@ -308,9 +308,9 @@ std::vector<std::vector<Course>> Course::organiseByTF(std::vector<Course> course
std::vector<std::vector<Course>> coursesByTF(timeFrames.size());
int tmpIdx;
for(int i = 0; i < courses.size(); i++)
for(unsigned int i = 0; i < courses.size(); i++)
{
for(int j = 0; j < courses.at(i).timeFrame().size(); j++)
for(unsigned int j = 0; j < courses.at(i).timeFrame().size(); j++)
{
tmpIdx = courses.at(i).timeFrame().at(j) - timeFrames.at(0);
coursesByTF.at(tmpIdx).push_back(courses.at(i));
......
......@@ -30,6 +30,7 @@ class Course
// std::vector<double> diffusionWeight;
// === OTHER
int _id;
/// European Credit Transfer and Accumulation System
int _ects;
/** Timeframe availablity of a course.
......@@ -38,7 +39,7 @@ class Course
*/
std::vector<int> _temporalAvailability;
std::string _name;
int _id;
// === FUNC
/// _duplicataProtection returns true if the value (2nd param) searched into (1st param) is found
......@@ -73,9 +74,9 @@ class Course
Course() = default;
// === GETTER
const int id() const{return this->_id;};
int id() const{return this->_id;};
const std::string name() const{return this->_name;};
const int ects() const{return this->_ects;}
int ects() const{return this->_ects;}
const std::vector<Competency> prerequisites() const {return this->_prerequisites;}
std::vector<Competency>& unlocked_prerequisites() {return this->_prerequisites;}
const std::vector<int> timeFrame() const {return this->_temporalAvailability;}
......
#include "decay.h"
int DecayEngine::IS_DECAY_DEACTIVATED = 0;
\ No newline at end of file
#ifndef SRC_MODEL_DECAY_H_
#define SRC_MODEL_DECAY_H_
#include <cmath>
#include <iostream>
class DecayEngine
{
private:
public:
static int IS_DECAY_DEACTIVATED;
/** Expresses the decay over the time x.
*/
static double defaultDecay(int t)
{
if(IS_DECAY_DEACTIVATED)
return 0;
if(t == 0)
return 0;
return (exp(t / 1.25) + 5)/100;
}
};
#endif //SRC_MODEL_DECAY_H_
\ No newline at end of file
#ifndef SRC_MODEL_EA_BESTFITSTAT_H_
#define SRC_MODEL_EA_BESTFITSTAT_H_
#include <eo>
#include <fstream>
#include <iostream>
#include "cursus.h"
template <class EOT>
class bestFitStat: public eoStat<EOT, typename EOT::Fitness>
{
public:
typedef typename EOT::Fitness Fitness;
bestFitStat(int _interval, std::string _filename, std::string _description="best "):eoStat<EOT, Fitness>(Fitness(), _description), interval(_interval),filename(_filename){
cpt=0;
}
void operator()(const eoPop<EOT>& _pop){
if((cpt%interval)==0){
std::ofstream outputfile(filename.c_str(), std::ios::app);
outputfile << cpt << ":\t" << std::endl;
_pop.best_element().printOn(outputfile);
outputfile << std::endl;
outputfile.close();
}
cpt++;
}
virtual void lastCall(eoPop<EOT>& _pop){
std::ofstream outputfile(filename.c_str(), std::ios::app);
outputfile << cpt << ":\t" << std::endl;
_pop.best_element().printOn(outputfile);
outputfile << std::endl;
outputfile.close();
}
int interval;
std::string filename;
int cpt;
};
#endif // SRC_MODEL_EA_BESTFITSTAT_H_
......@@ -9,11 +9,10 @@ class crossCSDVP: public eoQuadOp<EOT>
public:
crossCSDVP(CSDVP& _pb, ConstraintsRepetition& _ctr, CursusInitConstraint& _init):pb(_pb),ctr(_ctr), init(_init), cpt(0){}
crossCSDVP(CSDVP& _pb, ConstraintsRepetition& _ctr, CursusInitConstraint& _init):pb(_pb),ctr(_ctr), init(_init){}
virtual bool operator()(EOT& _chrom1, EOT& _chrom2){
cpt++;
//Integrity Check BEFORE CROSS
std::pair<bool, double> ctrRes1= ctr.integrityCheck(_chrom1);
std::pair<bool, double> ctrRes2= ctr.integrityCheck(_chrom2);
......@@ -137,7 +136,6 @@ class crossCSDVP: public eoQuadOp<EOT>
}
}
int cpt;
private:
CSDVP pb;
......
#include "evaluator.h"
#include "../tools.h"
double CursusEval::WEIGHT_ECTS = 1;
double CursusEval::WEIGHT_REPETION = 1;
double CursusEval::WEIGHT_JOB = 1;
double CursusEval::WEIGHT_PREREQ = 1;
void CursusEval::operator()(Cursus & _cursus){
double fit=0.0;
int pCE, pCP, pCR, pCPR;
double pCE, pCP, pCR, pCPR;
pCE=1;
pCR=1;
pCP=1;
pCPR=1;
pCE = WEIGHT_ECTS;
pCR = WEIGHT_REPETION;
pCP = WEIGHT_JOB;
pCPR= WEIGHT_PREREQ;
std::pair<bool, double> resCE;
std::pair<bool, double> resCP;
......
......@@ -17,6 +17,10 @@ public:
void operator()(Cursus & _cursus);
static double WEIGHT_ECTS;
static double WEIGHT_REPETION;
static double WEIGHT_JOB;
static double WEIGHT_PREREQ;
private:
ConstraintsPrerequisites cpr;
......
......@@ -23,10 +23,14 @@ class eoInitConstraintCSDVP: public eoInit<EOT>
eoInitConstraintCSDVP(CSDVP& _pb): pb(_pb){
std::vector<int> tmp;
chromSize=pb.getQuantityCoursesToPick();
std::cout << "nombre de cours à prendre: " << chromSize << std::endl;
maxVal=pb.coursesCatalogue().size();
std::cout << "nb Cours total dans le catalogue: " << maxVal << std::endl;
seed=pb.seed();
TF = pb.timeFrames();
nbTF=TF.size();
std::cout << "nb de Semestres" << nbTF << std::endl;
sizeTF=chromSize/nbTF;
catalogue = pb.coursesCatalogue();
possibleIDbyTF.resize(nbTF);
......@@ -36,13 +40,13 @@ class eoInitConstraintCSDVP: public eoInit<EOT>
possibleIDbyTF[tmp[j]-pb.cfg_minimalTimeFrame()].push_back(i);
}
}
// for(int i=0; i<possibleIDbyTF.size(); i++){
// std::cout << "Possible course in TF " << i+pb.cfg_minimalTimeFrame() << ": ";
// for(int j=0; j<possibleIDbyTF[i].size(); j++){
// std::cout << possibleIDbyTF[i][j] << " ";
// }
// std::cout << std::endl;
// }
/*for(int i=0; i<possibleIDbyTF.size(); i++){
std::cout << "Possible course in TF " << i+pb.cfg_minimalTimeFrame() << ": ";
for(int j=0; j<possibleIDbyTF[i].size(); j++){
std::cout << possibleIDbyTF[i][j] << " ";
}
std::cout << std::endl;
}*/
}
virtual void operator()(EOT& chrom){
......
#ifndef SRC_MODEL_EA_INITIALIZER_H_
#define SRC_MODEL_EA_INITIALIZER_H_
#include<queue>
#include<vector>
#include<cassert>
#include<algorithm>
#include<random>
#include<functional>
#include <eoInit.h>
#include "model/problem.h"
#include "cursus.h"
template <class EOT>
class eoInitCSDVP: public eoInit<EOT>
{
public:
typedef typename EOT::AtomType AtomType;
eoInitCSDVP(unsigned _chromSize, unsigned _maxVal, int _seed)
: chromSize(_chromSize), maxVal(_maxVal), seed(_seed)
{}
virtual void operator()(EOT& chrom)
{
chrom.resize(0);
for(int i = 0; i < maxVal; i++)
chrom.push_back(i);
std::random_shuffle(chrom.begin(), chrom.end());
chrom.resize(chromSize);
chrom.invalidate();
}
private :
unsigned chromSize;
unsigned maxVal;
UF_random_generator<unsigned int> gen;
int seed;
};
typedef eoInitCSDVP<Cursus> CursusInit;
#endif // SRC_MODEL_EA_INITIALIZER_H_
......@@ -20,7 +20,6 @@ template <class EOT>
class mutCSDVP: public eoMonOp<EOT>
{
public:
mutCSDVP(CSDVP& _pb, ConstraintsRepetition& _ctr):pb(_pb),ctr(_ctr){}
//_CourseID subastraction from _chrom
......@@ -178,9 +177,9 @@ class mutCSDVP: public eoMonOp<EOT>
std::random_shuffle(gfiCourse.begin(), gfiCourse.end());
_chrom[rngCourseToSwap] = pb.mapCourseToPosition(gfiCourse.at(0));
}
else //least constraint courses in 60% of the cases, otherwise full rand
else //least constraint courses in 25% of the cases, otherwise full rand
{
if(eo::rng.random(100) > 60)
if(eo::rng.random(100) > RATIO_RANDOM_VS_BEST)
{
fbBestCourse = coursesOfTF.at(0);
for(i = 1; i < coursesOfTF.size(); i++)
......@@ -228,10 +227,27 @@ class mutCSDVP: public eoMonOp<EOT>
bool addStatus = false;
int pos=0;
bool changedTF = false;
int currentTF = 0;
for(int i = 0; i < _chrom.size() && (i / nbCbyTF < TF); i++)
{
currentCourse = catalogue.at(_chrom.at(i));
if(currentTF != i / nbCbyTF)
changedTF = true;
else
changedTF = false;
currentTF = i / nbCbyTF;
if(changedTF) //if we have changed of tf, lets improve decay for all comp
{
for(int j = 0; j < tmpCourse.prerequisites().size(); j++)
{
tmpCourse.unlocked_prerequisites().at(j).increaseDecay();
}
}
for(int j = 0; j < currentCourse.teachedCompetenciesWeighted().size(); j++)
{
tmpComp = currentCourse.teachedCompetenciesWeighted().at(j).first;
......@@ -246,7 +262,7 @@ class mutCSDVP: public eoMonOp<EOT>
try
{
Magnitude mag = currentCourse.teachedCompetenciesWeighted().at(j).first.c_magnitude();
//tmpCourse.unlocked_prerequisites().at(pos).saveDecay();
tmpCourse.unlocked_prerequisites().at(pos).evolveTowards(mag);
}
catch(CompetencyEvolvingException & e)
......@@ -259,6 +275,9 @@ class mutCSDVP: public eoMonOp<EOT>
}
compStatus = tmpCourse.prerequisites();
for(int i = 0; i < compStatus.size(); i++)
compStatus.at(i).saveDecay();
return compStatus;
}
......@@ -287,7 +306,7 @@ class mutCSDVP: public eoMonOp<EOT>
{
if(checkCmp == state.at(itState))
{
if(checkCmp.c_magnitude().value() > state.at(itState).c_magnitude().value())
if(checkCmp.c_magnitude().value() > state.at(itState).decay())
{ stop = true; found = false; }
else
{ stop = true; found = true; }
......
......@@ -30,7 +30,7 @@ class CourseTemporalFrameException : public std::exception
}
Course & getCourse() const{return *(this->_course);}
const int getTime() const{return this->_time;}
int getTime() const{return this->_time;}
};
#endif // SRC_MODEL_EXCEPTION_COURSE_TEMPORAL_FRAME_EXCEPTION_H_
\ No newline at end of file
......@@ -80,9 +80,9 @@ int CSDVP::CSDVP_COUNTER = 0;
void CSDVP::setTimeFrames(std::vector<int> & v)
{this->_timeFrames = v;}
void CSDVP::setCoursesCatalogue(std::vector<Course> & c)
{this->_availableCourses;}
{this->_availableCourses = c;}
void CSDVP::setCompetenciesCatalogue(std::vector<Competency> & c)
{this->_availableCompentecies;}
{this->_availableCompentecies = c;}
// ADDER
bool CSDVP::addTimeFrame(int tF)
{
......@@ -167,13 +167,13 @@ int CSDVP::CSDVP_COUNTER = 0;
void CSDVP::_makeCoursesSortedByTF()
{
//Init the vector of the size of the time frames
for(int i = 0; i < this->_timeFrames.size(); i++)
for(unsigned int i = 0; i < this->_timeFrames.size(); i++)
this->_coursesSortedByTF.push_back(std::vector<Course>());
int tmpIdx;
for(int i = 0; i < this->_availableCourses.size(); i++)
for(unsigned int i = 0; i < this->_availableCourses.size(); i++)
{
for(int j = 0; j < this->_availableCourses.at(i).timeFrame().size(); j++)
for(unsigned int j = 0; j < this->_availableCourses.at(i).timeFrame().size(); j++)
{
tmpIdx = this->_availableCourses.at(i).timeFrame().at(j) - this->_minimalTimeFrame;
this->_coursesSortedByTF.at(tmpIdx).push_back(this->_availableCourses.at(i));
......@@ -182,7 +182,7 @@ int CSDVP::CSDVP_COUNTER = 0;
}
int CSDVP::mapCourseToPosition(const Course & c)
{
for(int i = 0; i < this->coursesCatalogue().size(); i++)
for(unsigned int i = 0; i < this->coursesCatalogue().size(); i++)
if(c == this->coursesCatalogue().at(i))
return i;
return -1;
......@@ -217,10 +217,10 @@ int CSDVP::CSDVP_COUNTER = 0;
return min + ( rand() % (max - min + 1) );
}
double CSDVP::_randomizeIn(const double min, const double max)
{
throw NotImplementedException("CSDVP::_randomizeIn");
}
// double CSDVP::_randomizeIn(const double min, const double max)
// {
// throw NotImplementedException("CSDVP::_randomizeIn");
// }
void CSDVP::randomizeProblem(CSDVP & pb, int seed)
{
......@@ -258,7 +258,6 @@ int CSDVP::CSDVP_COUNTER = 0;
{
tmpCourses.push_back(Course::build(CSDVP::_randomizeIn(pb.cfg_ectsMin(), pb.cfg_ectsMax())));
}
/* We obtain how many courses n by semester s
* then we create an idxCourses vector of size n * s
* then we shuffle it
......@@ -266,10 +265,19 @@ int CSDVP::CSDVP_COUNTER = 0;
*/
std::vector<int> idxCourses;
std::vector<int> nbCoursesByTF;
for(int i = 0 ; i < pb.timeFrames().size(); i++)
int somme=0;
for(unsigned int i = 0 ; i < pb.timeFrames().size(); i++){
nbCoursesByTF.push_back(CSDVP::_randomizeIn(pb._minimalCoursesByTimeFrame, pb._maximalCoursesByTimeFrame));
somme+=nbCoursesByTF[i];
}
while(somme<tmpCourses.size()){
int r=CSDVP::_randomizeIn(0, pb.timeFrames().size()-1);
nbCoursesByTF[r]++;
somme++;
}
int idxCoursesCounter = 0;
for(int i = 0; i < nbCoursesByTF.size(); i++)
for(unsigned int i = 0; i < nbCoursesByTF.size(); i++)
{
for(int j = 0; j < nbCoursesByTF.at(i); j++)
{
......@@ -282,17 +290,16 @@ int CSDVP::CSDVP_COUNTER = 0;
bool insertRez;
int rndIdx;
idxCoursesCounter = 0;
for(int i = 0; i < pb.timeFrames().size(); i++)
for(unsigned int i = 0; i < pb.timeFrames().size(); i++)
{
for(int j = 0; j < nbCoursesByTF.at(i); j++)
{
insertRez = true;
int cc = idxCourses.at(idxCoursesCounter);
insertRez = tmpCourses.at(idxCourses.at(idxCoursesCounter)).addTemporalFrame(pb.timeFrames().at(i));
while(!insertRez)//if duplicataProtection (i.e. course already in this semester)
{
rndIdx = CSDVP::_randomizeIn(0, pb._quantityAvailableCourses);
rndIdx = CSDVP::_randomizeIn(0, pb._quantityAvailableCourses - 1 );
insertRez = tmpCourses.at(rndIdx).addTemporalFrame(pb.timeFrames().at(i));
}
idxCoursesCounter++;
......@@ -319,9 +326,10 @@ int CSDVP::CSDVP_COUNTER = 0;
// }
// }
for(int i = 0; i < tmpCourses.size(); i++)
for(unsigned int i = 0; i < tmpCourses.size(); i++){
if(tmpCourses.at(i).timeFrame().size() > 0)
pb.addCourseToCatalogue(tmpCourses.at(i));
}
//From here, coursesCatalogue can still be < to minCourseTF * nbTF (due to the fact that a same course can belongs to )
pb._makeCoursesSortedByTF();
......@@ -349,14 +357,14 @@ int CSDVP::CSDVP_COUNTER = 0;
std::vector<Competency> randomVec(pb.competencyCatalogue());
std::random_shuffle(randomVec.begin(), randomVec.end());
std::queue<Competency> queue;
for(int i = 0 ; i < randomVec.size(); i++)
for(unsigned int i = 0 ; i < randomVec.size(); i++)
queue.push(randomVec.at(i));
int x;
Competency tmpComp;
std::pair<Competency, double> teachedComp;
for(int i = 0; i < pb.coursesCatalogue().size(); i++)
for(unsigned int i = 0; i < pb.coursesCatalogue().size(); i++)
{
x = _randomizeIn(pb.cfg_competencyByCourseMin(), pb.cfg_competencyByCourseMax());
for(int j = 0; j < x; j++)
......@@ -375,10 +383,10 @@ int CSDVP::CSDVP_COUNTER = 0;
*/
std::random_shuffle(randomVec.begin(), randomVec.end());
queue = std::queue<Competency>();
for(int i = 0 ; i < randomVec.size(); i++)
for(unsigned int i = 0 ; i < randomVec.size(); i++)
queue.push(randomVec.at(i));
for(int i = 0; i < pb.coursesCatalogue().size(); i++)
for(unsigned int i = 0; i < pb.coursesCatalogue().size(); i++)
{
x = _randomizeIn(pb.cfg_prerequisiteByCourseMin(), pb.cfg_prerequisiteByCourseMax());
for(int j = 0; j < x; j++)
......
......@@ -102,21 +102,21 @@ class CSDVP
static void generateProblem(CSDVP & csdvp, CSDVP::GenerationType type, int seed= -1 );
// === GETTER
const int id() const{return this->_id;}
const int seed() const{return this->_seed;}
const int cfg_quantityCompetencies() const{return this->_quantityAvailableCompetencies;}
const int cfg_quantityCourses() const{return this->_quantityAvailableCourses;}
const int cfg_minimalTimeFrame() const{return this->_minimalTimeFrame;}
const int cfg_maximalTimeFrame() const{return this->_maximalTimeFrame;}
const int cfg_ectsMax() const{return this->_maximalECTSValue;}
const int cfg_ectsMin() const{return this->_minimalECTSValue;}
const int cfg_courseByTFMax() const{return this->_maximalCoursesByTimeFrame;}
const int cfg_courseByTFMin() const{return this->_minimalCoursesByTimeFrame;}
const int cfg_competencyByCourseMin() const {return this->_minimalCompetencyByCourse;}
const int cfg_competencyByCourseMax() const {return this->_maximalCompetencyByCourse;}
const int cfg_prerequisiteByCourseMin() const {return this->_minimalPrerequisiteByCourse;}
const int cfg_prerequisiteByCourseMax() const {return this->_maximalPrerequisiteByCourse;}
const int cfg_pickedCoursesByTimeFrame() const {return this->_pickedCoursesByTimeFrame;}
int id() const{return this->_id;}
int seed() const{return this->_seed;}
int cfg_quantityCompetencies() const{return this->_quantityAvailableCompetencies;}
int cfg_quantityCourses() const{return this->_quantityAvailableCourses;}
int cfg_minimalTimeFrame() const{return this->_minimalTimeFrame;}
int cfg_maximalTimeFrame() const{return this->_maximalTimeFrame;}
int cfg_ectsMax() const{return this->_maximalECTSValue;}
int cfg_ectsMin() const{return this->_minimalECTSValue;}
int cfg_courseByTFMax() const{return this->_maximalCoursesByTimeFrame;}
int cfg_courseByTFMin() const{return this->_minimalCoursesByTimeFrame;}
int cfg_competencyByCourseMin() const {return this->_minimalCompetencyByCourse;}
int cfg_competencyByCourseMax() const {return this->_maximalCompetencyByCourse;}
int cfg_prerequisiteByCourseMin() const {return this->_minimalPrerequisiteByCourse;}
int cfg_prerequisiteByCourseMax() const {return this->_maximalPrerequisiteByCourse;}
int cfg_pickedCoursesByTimeFrame() const {return this->_pickedCoursesByTimeFrame;}
const Magnitude & cfg_magnitudeMin() const{return this->_minimalMagnitude;}
const Magnitude & cfg_magnitudeMax() const{return this->_maximalMagnitude;}
......@@ -131,7 +131,7 @@ class CSDVP
std::vector<Course> & unlocked_coursesCatalogue(){return this->_availableCourses;}
std::vector<Competency> & unlocked_competenciesCatalogue(){return this->_availableCompentecies;}
const int getQuantityCoursesToPick() const{
int getQuantityCoursesToPick() const{
if(this->_isConfig)
return this->_timeFrames.size() * this->_pickedCoursesByTimeFrame;
return -1;//if not config
......
......@@ -112,7 +112,7 @@ std::ostream & operator<<(std::ostream & Stream, const Profession & p)
{
std::string s = "Profession\n\tid:"+std::to_string(p.id())+"\n\tName:"+p.name()+"\n\tECTS: " + std::to_string(p.requiredECTS()) +"\n\t#Prereq:"+std::to_string(p.prerequisites().size())+"\n\t===Details:===\n\t";
Stream << s ;
for(int i = 0; i < p.prerequisites().size(); i++)
for(unsigned int i = 0; i < p.prerequisites().size(); i++)
Stream << "("<< i<< "th) " << p.prerequisites().at(i) << "\n\t";
Stream << "==========" << std::endl;
return Stream;
......@@ -170,7 +170,7 @@ void Profession::_randomlyGenerate(Profession & job, CSDVP & pb)
std::random_shuffle(tmpComp.begin(), tmpComp.end());
int i;
for(i = 0; i < tmpComp.size() && i < howManyPrereq; i++)
for(i = 0; i < (int)tmpComp.size() && i < howManyPrereq; i++)
{
magVal = job.cfg_minimalMagnitude().value() + ( (double)rand()/RAND_MAX) * ( job.cfg_maximalMagnitude().value() - job.cfg_minimalMagnitude().value()) ;
ctmp = Competency::buildTMP(magVal,tmpComp.at(i).name());
......@@ -196,7 +196,7 @@ void Profession::_randomlyGenerate(Profession & job, CSDVP & pb)
// ects = pb.timeFrames().size() * 30; //30 is the default european value
for(i = 0; i < pb.timeFrames().size(); i++)
for(i = 0; i < (int)pb.timeFrames().size(); i++)
{
for(int j = 0; j < pb.cfg_pickedCoursesByTimeFrame(); j++)
{
......
......@@ -65,16 +65,16 @@ class Profession
bool checkConfig();
// === GETTER
const int id() const{return this->_id;}
const int seed() const{return this->_seed;}
const int requiredECTS() const{return this->_requiredECTS;}
int id() const{return this->_id;}
int seed() const{return this->_seed;}
int requiredECTS() const{return this->_requiredECTS;}
const std::string name() const{return this->_name;}
const std::vector<Competency> & prerequisites() const{return this->_prerequisites;}
/// return a modifiable reference to _prerequisite;
std::vector<Competency> & unlocked_prerequisites(){return this->_prerequisites;}
const int cfg_minimalPrerequisites() const{return this->_minimalPrerequisites;}
const int cfg_maximalPrerequisites() const{return this->_maximalPrerequisites;}
int cfg_minimalPrerequisites() const{return this->_minimalPrerequisites;}
int cfg_maximalPrerequisites() const{return this->_maximalPrerequisites;}
const Magnitude cfg_minimalMagnitude() const{return this->_minimalMagnitude;}
const Magnitude cfg_maximalMagnitude() const{return this->_maximalMagnitude;}
......
......@@ -10,6 +10,7 @@
static const int ID_RANGE_FOR_OBJECT = 10000;
static const int ID_RANGE_FOR_TEMPORARY_OBJECT = std::numeric_limits<int>::max();
static unsigned int RATIO_RANDOM_VS_BEST;
template<typename T>
/** Searches into vec the element findMe. The class T must have T() defined ( T()=default; is OK) */
......@@ -21,7 +22,7 @@ static std::pair<int, T> findInVector(std::vector<T> & vec, T & findMe)
if(it == vec.end())
{
res.first = -1;
res.second; //NTD, -1 SHOULD BE USED TO DETECT THAT NOTHING HAS BEEN FOUND
//res.second; //NTD, -1 SHOULD BE USED TO DETECT THAT NOTHING HAS BEEN FOUND
}
else
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment