#include "search.h" #include search::search(int dim, int npoints, int *p) : dim(dim), npoints(npoints), best(1.), ha(dim, p), ps(dim, npoints) { assert(dim > 0); assert(npoints > 0); } void search::check() { // TODO adapter l'API pour ne pas recalculer la discrepancy double discr = ps.discrepancy(); if(discr < best) { best = discr; FILE *f = fopen(filename.c_str(), "w"); ps.dump(f); fclose(f); } } double search::run(int iterations) { _run(iterations); printf("Best discrepancy found after %d iterations : %g\nResult saved in %s\n", iterations, best, filename.c_str()); return best; } random_search::random_search(int dim, int npoints, int *p) : search(dim, npoints, p) { filename = std::string("random_search"); } void random_search::_run(int iterations) { for(int t = 0; t < iterations; t++) { // shuffle permutations for(int i = 0; i < dim; i++) ha.get_pi(i).random(); // compute points for(int i = 0; i < npoints; i++) ha.compute(i+1, ps.point(i)); // compute discrepancy and check if it is good check(); } }