Operational Research Library  1.0
QuadraticAssignmentProblem.h
Go to the documentation of this file.
1 #ifndef QUADRATICASSIGNMENTPROBLEM_H
2 #define QUADRATICASSIGNMENTPROBLEM_H
3 
4 #include <iostream>
5 #include <fstream>
6 #include <sstream>
7 #include <algorithm>
8 #include <vector>
9 #include "RandomHelper.h"
10 #include "IData.h"
11 
12 namespace operational_research
13 {
14 
23 {
24 private:
25  // Number of objects.
26  unsigned int objects;
27 
28  // Flows.
29  std::vector<std::vector<double> > flows;
30 
31  // Distances.
32  std::vector<std::vector<double> > distances;
33 
34  // Costs of assignment.
35  std::vector<std::vector<double> > costs;
36 
42  bool checkSchedule(const std::vector<unsigned int>& schedule);
43 
51  void writeResultToFile(const std::vector<unsigned int>& schedule, double costFunctionValue, const std::string& filename);
52 
53 public:
62  QuadraticAssignmentProblem(unsigned int objects, const std::vector<std::vector<double> >& flows, const std::vector<std::vector<double> >& distances, const std::vector<std::vector<double> >& costs);
63 
76  QuadraticAssignmentProblem(unsigned int objects, double minFlow, double maxFlow, double minDistance, double maxDistance, double minCost, double maxCost, bool integerValues = false);
77 
84  QuadraticAssignmentProblem(const std::string& filename);
85 
94  void setData(unsigned int objects, const std::vector<std::vector<double> >& flows, const std::vector<std::vector<double> >& distances, const std::vector<std::vector<double> >& costs);
95 
108  void generateData(unsigned int objects, double minFlow, double maxFlow, double minDistance, double maxDistance, double minCost, double maxCost, bool integerValues = false);
109 
116  void readDataFromFile(const std::string& filename);
117 
123  void writeDataToFile(const std::string& filename);
124 
128  void showData();
129 
136  double evaluateQAP(const std::vector<unsigned int>& schedule);
137 
146  double evaluateQAP(const std::vector<unsigned int>& schedule, const std::string& filename);
147 
154  double evaluateQBAP(const std::vector<unsigned int>& schedule);
155 
164  double evaluateQBAP(const std::vector<unsigned int>& schedule, const std::string& filename);
165 
170  const std::vector<std::vector<double> >& getCosts() const {
171  return costs;
172  }
173 
178  const std::vector<std::vector<double> >& getDistances() const {
179  return distances;
180  }
181 
186  const std::vector<std::vector<double> >& getFlows() const {
187  return flows;
188  }
189 
194  unsigned int getObjects() const {
195  return objects;
196  }
197 };
198 
199 } // namespace operational_research
200 
201 #endif // QUADRATICASSIGNMENTPROBLEM_H
Interface for reading, writing and displaying data.
Definition: BinPackingProblem.cpp:3
const std::vector< std::vector< double > > & getFlows() const
Getter for flows.
Definition: QuadraticAssignmentProblem.h:186
unsigned int getObjects() const
Getter for number of objects.
Definition: QuadraticAssignmentProblem.h:194
QuadraticAssignmentProblem(unsigned int objects, const std::vector< std::vector< double > > &flows, const std::vector< std::vector< double > > &distances, const std::vector< std::vector< double > > &costs)
Constructor.
Definition: QuadraticAssignmentProblem.cpp:11
void setData(unsigned int objects, const std::vector< std::vector< double > > &flows, const std::vector< std::vector< double > > &distances, const std::vector< std::vector< double > > &costs)
Setter for quadratic assignment problem data.
Definition: QuadraticAssignmentProblem.cpp:293
void readDataFromFile(const std::string &filename)
Reads quadratic assignment problem data from a file with a filename.
Definition: QuadraticAssignmentProblem.cpp:182
double evaluateQAP(const std::vector< unsigned int > &schedule)
Evaluates quadratic assignment problem.
Definition: QuadraticAssignmentProblem.cpp:72
void generateData(unsigned int objects, double minFlow, double maxFlow, double minDistance, double maxDistance, double minCost, double maxCost, bool integerValues=false)
Generates quadratic assignment problem data according to setup.
Definition: QuadraticAssignmentProblem.cpp:103
Simple pseudo random number generator class.
double evaluateQBAP(const std::vector< unsigned int > &schedule)
Evaluates quadratic bottleneck assignment problem.
Definition: QuadraticAssignmentProblem.cpp:41
const std::vector< std::vector< double > > & getDistances() const
Getter for distances.
Definition: QuadraticAssignmentProblem.h:178
void showData()
Shows quadratic assignment problem data.
Definition: QuadraticAssignmentProblem.cpp:355
Definition: QuadraticAssignmentProblem.h:22
Definition: IData.h:14
void writeDataToFile(const std::string &filename)
Writes quadratic assignment problem data to a file with a filename.
Definition: QuadraticAssignmentProblem.cpp:387
const std::vector< std::vector< double > > & getCosts() const
Getter for costs.
Definition: QuadraticAssignmentProblem.h:170