Hi,

I am trying to write use BGL.dijkstra to calculate a shortest path in a time dependent network where edge.cost C(u, v) is a function of distance@edge.source and a variable wait time dependent on Edge.departure i.e.

Cost(Edge(u,v), D(u)) = Wait(Edge(u, v).departure, D(u)) + Edge(u, v).delay

The cost function ( and edge property is defined as):

struct Eonnection {
    Eonnection(const Vertex source, const Vertex destination, const double departure, const double duration, const double cost) {
        this->source = source;
        this->destination = destination;
        this->departure = departure;
        this->duration = duration;
        this->cost = cost;
    };

    Vertex source;
    Vertex destination;
    double departure; // Time of departure
    double duration;  // Duration of traversing edge
    double cost;      // Actual cost of traversing Edge

    std::pair<double, double> dyn_cost(std::vector<std::pair<double, double> > distances, double t_max) {
        std::pair<double, double> d_parent = distances[this->source];
        double t_parent = d_parent.first;
        double c_parent = d_parent.second;

        double t_time_of_day = fmod(t_parent, 24 * 3600);
        double t_delay = t_time_of_day <= this->departure ? this->departure - t_time_of_day: this->departure + (24 * 3600 - t_time_of_day);
        double t_total = t_parent + t_delay + this->duration;

        if(t_total < t_max) {
            std::cout << "Edge usable with cost " << c_parent + this->cost << ", " << t_total << std::endl;
            return std::pair<double, double>(c_parent + this->cost, t_total);
        } else {
            std::cout << "Edge unusable" << std::endl;
            return std::pair<double, double>(std::numeric_limits<double>::infinity(), std::numeric_limits<double>::infinity());
        }
    };

};

I'm trying to call dijkstra as 

dijkstra_shortest_paths_no_color_map( g, source, boost::make_iterator_property_map(pred.begin(), get(boost::vertex_index, g)), boost::make_iterator_property_map(distances.begin(), get(boost::vertex_index, g)), boost::make_transform_value_property_map( boost::bind<std::pair<double, double> >(&Eonnection::dyn_cost, _1, _2, distances, 24 * 3600 * 3), get(boost::edge_bundle, g) ), get(vertex_index, g), smaller, combiner, std::pair<double, double>(std::numeric_limits<double>::infinity(), std::numeric_limits<double>::infinity()), std::pair<double, double>(0, 0), vis );

However, this does not seem to work. How can I pass the weights as a dynamic function to dijkstra_shortest_paths?