1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #include "search.h"
- #include <cassert>
- 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();
- }
- }
|