Program Listing for File FailPolicy.h#

Return to documentation for file (server/inc/backup_planners/FailPolicy.h)

#pragma once
#include <ctime>

#include "backup_planners/SIPP.h"
#include "heuristics/BasicHeuristicTable.h"
#include "utils/States.h"
#include "utils/Task.h"



class FailPolicy {
public:
    int k_robust;
    int window;             // planning window
    int simulation_window;  // simulation window
    bool hold_endpoints;
    bool consider_task_wait = false;

    double runtime;
    int screen;
    int seed;
    mt19937 gen;

    bool solution_found;
    double solution_cost;
    double avg_path_length;
    double min_sum_of_costs;
    vector<Path> solution;

    // initial data
    ReservationTable initial_rt;
    vector<Path> initial_paths;
    // <agent, location, timestep>:
    list<tuple<int, int, int>> initial_constraints;
    // only this agent can stay in this location before this timestep.
    // the paths that all agents try to avoid
    list<const Path*> initial_soft_path_constraints;
    // unordered_map<int, double> travel_times;

    SingleAgentSolver& path_planner;
    shared_ptr<HeuristicTableBase> heuristic_table;
    // Runs the algorithm until the problem is solved or time is exhausted


    FailPolicy(const BasicGraph& G, SingleAgentSolver& path_planner,
               shared_ptr<HeuristicTableBase> heuristic_table,
               const boost::program_options::variables_map vm);
    ~FailPolicy();

    virtual bool run(const vector<State>& starts,
                     const vector<vector<Task>>& goal_locations,
                     const vector<Path>& guide_paths = vector<Path>(),
                     int time_limit = 60,
                     const vector<int>& waited_time = vector<int>()) = 0;


    // Save results
    virtual void save_results(const std::string& fileName,
                              const std::string& instanceName) const = 0;

    virtual void clear() = 0;

    virtual string get_name() const = 0;

    const BasicGraph& G;
    // vector<State> starts;
    // vector<vector<Task>> goal_locations;
    int num_of_agents;
    int time_limit;
    int n_iter_limit;

    // validate
    bool validate_solution();

    void print_solution() const;

    bool is_initialized() const {
        return this->_is_initialized;
    }

    void set_initialized(bool initialized) {
        this->_is_initialized = initialized;
    }

    vector<vector<tuple<int, int, double, int>>> convert_path_to_smart(
        const vector<vector<Task>>& goal_locations);
    // void print_mapf_instance(vector<State> starts_,
    //                          vector<vector<Task>> goals_) const;
    bool congested() const;

protected:
    vector<vector<bool>> cat;  // conflict avoidance table
    vector<unordered_set<pair<int, int>>> constraint_table;
    ReservationTable rt;
    // Flag to indicate whether the solver has been initialized
    bool _is_initialized = false;
};