4 #ifndef FLOWLESSLY_ADJACENCY_MAP_GRAPH_H
5 #define FLOWLESSLY_ADJACENCY_MAP_GRAPH_H
7 #include "graphs/graph.h"
14 #include <unordered_map>
17 #include "graphs/node.h"
18 #include "misc/statistics.h"
20 namespace flowlessly {
26 const set<uint32_t>& source_nodes,
27 const vector<unordered_map<uint32_t, Arc*> >& arcs,
28 const vector<Node>& nodes,
29 const set<uint32_t>& unused_node_ids,
33 Arc* AddArc(uint32_t src_node_id, uint32_t dst_node_id,
34 uint32_t min_flow, int32_t capacity,
35 int64_t cost, int32_t type);
36 void AddNode(uint32_t node_id, int32_t supply, int64_t potential,
37 NodeType type,
bool first_scheduling_iteration);
38 uint32_t AddNode(int32_t supply, int64_t price, NodeType type,
39 bool first_scheduling_iteration);
41 void ChangeArc(
Arc* arc, uint32_t new_min_flow, int32_t new_capacity,
42 int64_t new_cost, int32_t new_type);
43 void ChangeArc(uint32_t src_node_id, uint32_t dst_node_id,
44 uint32_t new_min_flow, int32_t new_capacity, int64_t new_cost,
45 int32_t new_type,
bool is_multi_arc, int64_t old_cost);
46 void GetMachinePUs(uint32_t machine_node_id, set<uint32_t>* pu_ids);
48 unordered_multimap<uint32_t, uint32_t>* GetTaskAssignments();
50 void InitializeGraph();
76 void UpdateAdmissibleGraph(
const vector<uint32_t>& updated_nodes);
81 inline set<uint32_t>& get_active_node_ids() {
82 return active_node_ids_;
85 inline vector<unordered_map<uint32_t, Arc*> >& get_admissible_arcs() {
86 return admissible_arcs_;
89 inline vector<unordered_map<uint32_t, Arc*> >& get_arcs() {
93 inline vector<Node>& get_nodes() {
98 int32_t GetNumAssignedTasksToPU(uint32_t node_id);
99 void RemoveArcs(uint32_t node_id);
101 void UpdateNodeTypeOnArcRemoval(uint32_t src_node_id, uint32_t dst_node_id);
103 vector<unordered_map<uint32_t, Arc*> > arcs_;
104 vector<unordered_map<uint32_t, Arc*> > admissible_arcs_;
106 set<uint32_t> active_node_ids_;
107 set<uint32_t> unused_node_ids_;
113 #endif // FLOWLESSLY_ADJACENCY_MAP_GRAPH_H
void RemoveNode(uint32_t node_id)
Definition: adjacency_map_graph.cc:595
Definition: statistics.h:19
void WriteGraph(FILE *out_graph_file)
Definition: adjacency_map_graph.cc:752
bool IsFeasible()
Definition: adjacency_map_graph.cc:491
bool IsEpsOptimal(int64_t eps)
Definition: adjacency_map_graph.cc:470
void RemoveArc(Arc *arc)
Definition: adjacency_map_graph.cc:551
void ScaleUpCosts(int64_t scale_up)
Definition: adjacency_map_graph.cc:630
Arc * GetRandomArc(uint32_t node_id)
Definition: adjacency_map_graph.cc:370
void ChangeArc(Arc *arc, uint32_t new_min_flow, int32_t new_capacity, int64_t new_cost, int32_t new_type)
Definition: adjacency_map_graph.cc:246
bool TopologicalSort(vector< uint32_t > *ordered)
Definition: adjacency_map_graph.cc:639
int64_t MaxRefinePotential(uint64_t node_id, int64_t eps)
Definition: adjacency_map_graph.cc:533
int64_t GetTotalCost()
Definition: adjacency_map_graph.cc:441
bool IsInTopologicalOrder(const vector< uint32_t > &node_ids)
Definition: adjacency_map_graph.cc:516
void ScaleDownCosts(int64_t scale_down)
Definition: adjacency_map_graph.cc:622
void WriteFlowGraph(FILE *out_graph_file)
Definition: adjacency_map_graph.cc:735
void WriteAssignments(FILE *out_file)
Definition: adjacency_map_graph.cc:727
Definition: adjacency_map_graph.h:22