Exemplo n.º 1
0
int main(int argc, char *argv[])
{
  ih_config_options_t *options;
  ih_core_objects_t objects;
  ih_audit_log_t *log;
  char *points_filename;
  ih_search_system_t *system;
  ih_container_array_t *initial_solutions;
  unsigned short initial_solution_count;
  ih_container_array_t *solutions;
  unsigned short solution_count;
  ih_core_bool_t still_searching;
  unsigned short i;
  ih_core_bitarray_t *solution;
  double score;
  double best_score;
  stravel_t stravel;
  double goal_distance;
  double sqrt_point_count;
  struct timeval start_time;
  char *search_algorithm_string;
  ih_search_algorithm_t search_algorithm;

  initial_solutions = NULL;
  initial_solution_count = 0;

  ih_core_objects_init(&objects);

  log = ih_audit_log_create(stdout);
  if (!log) {
    ih_core_trace_exit("ih_audit_log_create");
  }
  stravel.log = log;

  options = ih_config_options_create(argc, argv, &objects);
  if (!options) {
    ih_audit_log_trace_exit(log, "stvl", "ih_config_options_create");
  }

  if (ih_config_options_find_as_string(options, "points_filename",
          &points_filename, "")) {
    if (!load_points_from_file(&stravel, points_filename)) {
      ih_audit_log_trace_exit(log, "stvl", "load_points_from_file");
    }
  } else {
    ih_audit_log_enter
      (log, "stvl", "creating %lu random points", RANDOM_POINT_COUNT);
    create_random_points(&stravel);
  }

  if (ih_config_options_find_as_string(options, "search_algorithm",
          &search_algorithm_string, "")) {
    if (!ih_search_algorithm_get_from_string
        (search_algorithm_string, &search_algorithm)) {
      search_algorithm = DEFAULT_SEARCH_ALGORITHM;
    }
  } else {
    search_algorithm = DEFAULT_SEARCH_ALGORITHM;
  }
  search_algorithm_string = ih_search_algorithm_get_string(search_algorithm);
  ih_audit_log_enter(log, "stvl", "search algorithm: %s",
      search_algorithm_string);

  ih_audit_log_enter(log, "stvl", "saving points to stravel_points.csv");
  if (!save_points_to_file(&stravel, POINTS_FILENAME)) {
    ih_audit_log_trace_exit(log, "stvl", "save_points_to_file");
  }

  sqrt_point_count = sqrt(stravel.point_count);
  goal_distance = ((POINT_RANGE * sqrt_point_count) + POINT_RANGE) * 1.0;

  ih_audit_log_enter(log, "stvl", "caching point distances");
  cache_distances(&stravel);

  ih_audit_log_enter(log, "stvl", "creating search system");
  system = ih_search_system_create(score_solution, IH_CORE_GOAL_MINIMIZE_SCORE,
      &stravel, initial_solutions, search_algorithm, log);
  if (system) {
    ih_audit_log_enter(log, "stvl", "goal distance: %.2f", goal_distance);
    gettimeofday(&start_time, NULL);
    still_searching = ih_core_bool_true;
    while (still_searching) {
      ih_search_system_search(system, MAX_SEARCH_TIME_MICROSECONDS);
      solutions = ih_search_system_get_solutions_copy(system, 1);
      if (solutions) {
        solution = ih_container_array_find(solutions, 0);
        if (!score_solution(&stravel, solution, &best_score)) {
          ih_audit_log_trace_exit(log, "stvl", "score_solution");
        }
        solution_count = ih_container_array_get_size(solutions);
        for (i = 0; i < solution_count; i++) {
          solution = ih_container_array_find(solutions, i);
          if (!score_solution(&stravel, solution, &score)) {
            ih_audit_log_trace_exit(log, "stvl", "score_solution");
          }
          if (ih_core_bool_true) {
            ih_audit_log_enter(log, "stvl", "distance: %.2f", score);
          }
          fflush(stdout);
          if (score <= goal_distance) {
            still_searching = ih_core_bool_false;
            ih_audit_log_enter
              (log, "stvl", "reached goal distance, stopping search");
          }
        }
        ih_container_array_destroy(solutions);
      } else {
        ih_audit_log_trace_exit
          (log, "stvl", "ih_search_system_get_solutions_copy");
        break;
      }
      if (!ih_core_time_is_remaining_microseconds
          (&start_time, MAX_OVERALL_TIME_MICROSECONDS)) {
        still_searching = ih_core_bool_false;
        ih_audit_log_enter
          (log, "stvl", "max search time elapsed, stopping search");
      }
    }

    solutions = ih_search_system_get_solutions_copy(system, 1);
    if (solutions) {
      solution = ih_container_array_find(solutions, 0);
      ih_audit_log_enter
        (log, "stvl", "saving solution to %s", SOLUTION_FILENAME);
      if (!save_solution_to_file(&stravel, solution, SOLUTION_FILENAME)) {
        ih_audit_log_trace_exit(log, "stvl", "save_solution_to_file");
      }
      ih_container_array_destroy(solutions);
    } else {
      ih_audit_log_trace_exit
        (log, "stvl", "ih_search_system_get_solutions_copy");
    }

    ih_search_system_destroy(system);
  } else {
    ih_audit_log_trace_exit(log, "stvl", "ih_search_system_create");
  }

  ih_config_options_destroy(options);
  ih_audit_log_destroy(log);

  return 0;
}
Exemplo n.º 2
0
// NOTE: assumed points are comma comma separated, one point per line
void VolumePainter::load_points_from_file(const std::string& file_name) {
    load_points_from_file(file_name, default_weight_);
}