10 #include "mm/transition_graph.hpp"
11 #include "network/type.hpp"
12 #include "util/debug.hpp"
20 for (
auto cs = tc.begin(); cs!=tc.end(); ++cs) {
22 for (
auto iter = cs->begin(); iter!=cs->end(); ++iter) {
23 double ep = calc_ep(iter->dist,gps_error);
24 layer.push_back(
TGNode{&(*iter),
nullptr,ep,0});
26 layers.push_back(layer);
29 reset_layer(&(layers[0]));
33 double TransitionGraph::calc_tp(
double sp_dist,
double eu_dist){
34 return eu_dist>=sp_dist ? (sp_dist+1e-6)/(eu_dist+1e-6) : eu_dist/sp_dist;
37 double TransitionGraph::calc_ep(
double dist,
double error){
38 double a = dist / error;
39 return exp(-0.5 * a * a);
43 void TransitionGraph::reset_layer(
TGLayer *layer){
44 for (
auto iter=layer->begin(); iter!=layer->end(); ++iter) {
45 iter->cumu_prob = iter->ep;
50 const TGNode *TransitionGraph::find_optimal_candidate(
const TGLayer &layer){
51 const TGNode *opt_c=
nullptr;
52 double final_prob = -0.001;
53 for (
auto c = layer.begin(); c!=layer.end(); ++c) {
54 if(final_prob < c->cumu_prob) {
63 SPDLOG_TRACE(
"Backtrack on transition graph");
64 TGNode* track_cand=
nullptr;
65 double final_prob = -0.001;
66 std::vector<TGNode>& last_layer = layers.back();
67 for (
auto c = last_layer.begin(); c!=last_layer.end(); ++c) {
68 if(final_prob < c->cumu_prob) {
75 opath.push_back(track_cand);
77 while ((track_cand=track_cand->
prev)!=
nullptr) {
78 opath.push_back(track_cand);
80 std::reverse(opath.begin(), opath.end());
82 SPDLOG_TRACE(
"Backtrack on transition graph done");
86 std::vector<TGLayer> &TransitionGraph::get_layers(){