From 8946d0df4263aa20a670cedd5d61f9709b858fca Mon Sep 17 00:00:00 2001 From: Francois Fleuret Date: Wed, 22 Aug 2012 14:27:14 -0700 Subject: [PATCH] Update, seems to work! --- fridge | 57 +++++++++++++++++++++++++++++++++++++++++ mtp.cc | 72 +++++++++++----------------------------------------- mtp_graph.cc | 8 ++---- mtp_graph.h | 4 +-- tracker.cc | 31 +++++++++------------- tracker.h | 7 +++-- 6 files changed, 91 insertions(+), 88 deletions(-) create mode 100644 fridge diff --git a/fridge b/fridge new file mode 100644 index 0000000..5d2b88a --- /dev/null +++ b/fridge @@ -0,0 +1,57 @@ + +###################################################################### + +2012 Aug 22 14:26:53 (from mtp.cc) + + + exit(0); + + if(argc < 2) { + cerr << argv[0] << " " << endl; + exit(EXIT_FAILURE); + } + + ifstream *file = new ifstream(argv[1]); + + int nb_edges, nb_vertices; + int source, sink; + + if(file->good()) { + + (*file) >> nb_vertices >> nb_edges; + (*file) >> source >> sink; + + scalar_t *edge_lengths = new scalar_t[nb_edges]; + int *vertex_from = new int[nb_edges]; + int *vertex_to = new int[nb_edges]; + int *result_edge_occupation = new int[nb_edges]; + + for(int e = 0; e < nb_edges; e++) { + (*file) >> vertex_from[e] >> vertex_to[e] >> edge_lengths[e]; + } + + find_best_paths(nb_vertices, nb_edges, + vertex_from, vertex_to, edge_lengths, + source, sink, + result_edge_occupation); + + // dot_print(nb_vertices, nb_edges, + // vertex_from, vertex_to, edge_lengths, + // source, sink, + // result_edge_occupation); + + delete[] result_edge_occupation; + delete[] edge_lengths; + delete[] vertex_from; + delete[] vertex_to; + + } else { + + cerr << "Can not open " << argv[1] << endl; + + delete file; + exit(EXIT_FAILURE); + + } + + delete file; diff --git a/mtp.cc b/mtp.cc index 286597d..06247e6 100644 --- a/mtp.cc +++ b/mtp.cc @@ -41,7 +41,7 @@ void find_best_paths(int nb_vertices, int source, int sink, int *result_edge_occupation) { MTPGraph graph(nb_vertices, nb_edges, ea, eb, source, sink); - graph.find_best_paths(el, result_edge_occupation); + graph.find_best_paths(el); graph.print_dot(); } @@ -49,17 +49,18 @@ void find_best_paths(int nb_vertices, int main(int argc, char **argv) { int nb_locations = 6; - int nb_time_steps = 5; + int nb_time_steps = 10; - { - Tracker tracker(nb_time_steps, nb_locations); + Tracker tracker(nb_time_steps, nb_locations); - for(int l = 0; l < nb_locations; l++) { - for(int k = 0; k < nb_locations; k++) { - tracker.set_allowed_motion(l, k, abs(l - k) <= 1); - } + for(int l = 0; l < nb_locations; l++) { + for(int k = 0; k < nb_locations; k++) { + tracker.set_allowed_motion(l, k, abs(l - k) <= 1); } + } + for(int r = 0; r < 10; r++) { + cout << "* ROUND " << r << endl; for(int t = 0; t < nb_time_steps; t++) { for(int l = 0; l < nb_locations; l++) { tracker.set_detection_score(t, l, @@ -71,58 +72,15 @@ int main(int argc, char **argv) { tracker.build_graph(); tracker.track(); - } - - exit(0); - - if(argc < 2) { - cerr << argv[0] << " " << endl; - exit(EXIT_FAILURE); - } - - ifstream *file = new ifstream(argv[1]); - - int nb_edges, nb_vertices; - int source, sink; - - if(file->good()) { - - (*file) >> nb_vertices >> nb_edges; - (*file) >> source >> sink; - scalar_t *edge_lengths = new scalar_t[nb_edges]; - int *vertex_from = new int[nb_edges]; - int *vertex_to = new int[nb_edges]; - int *result_edge_occupation = new int[nb_edges]; - - for(int e = 0; e < nb_edges; e++) { - (*file) >> vertex_from[e] >> vertex_to[e] >> edge_lengths[e]; + for(int t = 0; t < tracker.nb_trajectories(); t++) { + cout << "TRAJECTORY " << t << " :"; + for(int u = 0; u < tracker.trajectory_duration(t); u++) { + cout << " " << tracker.trajectory_location(t, u); + } + cout << endl; } - - find_best_paths(nb_vertices, nb_edges, - vertex_from, vertex_to, edge_lengths, - source, sink, - result_edge_occupation); - - // dot_print(nb_vertices, nb_edges, - // vertex_from, vertex_to, edge_lengths, - // source, sink, - // result_edge_occupation); - - delete[] result_edge_occupation; - delete[] edge_lengths; - delete[] vertex_from; - delete[] vertex_to; - - } else { - - cerr << "Can not open " << argv[1] << endl; - - delete file; - exit(EXIT_FAILURE); - } - delete file; exit(EXIT_SUCCESS); } diff --git a/mtp_graph.cc b/mtp_graph.cc index 8c79416..32bdfdf 100644 --- a/mtp_graph.cc +++ b/mtp_graph.cc @@ -258,7 +258,7 @@ void MTPGraph::find_shortest_path(Vertex **_front, Vertex **_new_front) { } while(_front_size > 0); } -void MTPGraph::find_best_paths(scalar_t *lengths, int *result_edge_occupation) { +void MTPGraph::find_best_paths(scalar_t *lengths) { scalar_t total_length; Vertex *v; Edge *e; @@ -314,11 +314,9 @@ void MTPGraph::find_best_paths(scalar_t *lengths, int *result_edge_occupation) { for(int k = 0; k < _nb_edges; k++) { Edge *e = _edges + k; if(e->occupied) { e->revert(); } - result_edge_occupation[k] = e->occupied; } } - int MTPGraph::retrieve_one_path(Edge *e, int *nodes) { Edge *f, *next; int l = 0; @@ -350,7 +348,7 @@ int MTPGraph::retrieve_one_path(Edge *e, int *nodes) { return l; } -void MTPGraph::retrieve_paths() { +void MTPGraph::retrieve_disjoint_paths() { Edge *e; for(int p = 0; p < nb_paths; p++) delete paths[p]; @@ -372,6 +370,4 @@ void MTPGraph::retrieve_paths() { p++; } } - - cout << "NB_PATHS " << nb_paths << endl; } diff --git a/mtp_graph.h b/mtp_graph.h index 17dd222..5feb20f 100644 --- a/mtp_graph.h +++ b/mtp_graph.h @@ -57,8 +57,8 @@ public: ~MTPGraph(); - void find_best_paths(scalar_t *lengths, int *result_edge_occupation); - void retrieve_paths(); + void find_best_paths(scalar_t *lengths); + void retrieve_disjoint_paths(); void print(); void print_dot(); diff --git a/tracker.cc b/tracker.cc index 4b7375f..c90ed44 100644 --- a/tracker.cc +++ b/tracker.cc @@ -35,13 +35,11 @@ Tracker::Tracker(int nb_time_steps, int nb_locations) { _edge_lengths = 0; _graph = 0; - _edge_occupation = 0; } Tracker::~Tracker() { delete[] _edge_lengths; delete _graph; - delete[] _edge_occupation; deallocate_array(_detection_score); deallocate_array(_allowed_motion); } @@ -58,8 +56,7 @@ void Tracker::build_graph() { // Delete existing graph delete[] _edge_lengths; - delete[] _graph; - delete[] _edge_occupation; + delete _graph; int nb_motions = 0; for(int l = 0; l < _nb_locations; l++) { @@ -79,7 +76,6 @@ void Tracker::build_graph() { int e = 0; _edge_lengths = new scalar_t[nb_edges]; - _edge_occupation = new int[nb_edges]; // We put the in-node edges first, since these are the ones whose // lengths we will have to change according to the detection score @@ -138,8 +134,8 @@ void Tracker::track() { } } - _graph->find_best_paths(_edge_lengths, _edge_occupation); - _graph->retrieve_paths(); + _graph->find_best_paths(_edge_lengths); + _graph->retrieve_disjoint_paths(); for(int p = 0; p < _graph->nb_paths; p++) { Path *path = _graph->paths[p]; @@ -152,17 +148,14 @@ void Tracker::track() { // _graph->print_dot(); } -// void Tracker::track() { -// } - -// int Tracker::nb_trajectories() { -// } - -// int Tracker::trajectory_start_time(int k) { -// } +int Tracker::nb_trajectories() { + return _graph->nb_paths; +} -// int Tracker::trajectory_end_time(int k) { -// } +int Tracker::trajectory_duration(int k) { + return (_graph->paths[k]->length - 2) / 2; +} -// int Tracker::trajectory_location(int k, int time) { -// } +int Tracker::trajectory_location(int k, int time) { + return (_graph->paths[k]->nodes[2 * time + 1] - 1) % _nb_locations; +} diff --git a/tracker.h b/tracker.h index d8cb811..1811fb9 100644 --- a/tracker.h +++ b/tracker.h @@ -41,10 +41,9 @@ public: void track(); - // int nb_trajectories(); - // int trajectory_start_time(int k); - // int trajectory_end_time(int k); - // int trajectory_location(int k, int time); + int nb_trajectories(); + int trajectory_duration(int k); + int trajectory_location(int k, int time); }; #endif -- 2.20.1