RunData.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. #pragma once
  2. #include <string>
  3. #include <vector>
  4. #include <fstream>
  5. #include <QPoint>
  6. #include <map>
  7. #include <boost/multiprecision/cpp_int.hpp>
  8. #include <boost/multiprecision/cpp_dec_float.hpp>
  9. class RunData;
  10. struct SolutionPointData {
  11. int round;
  12. int iteration;
  13. double objectiveFunction;
  14. int particleNumber;
  15. std::vector<bool> bitVec;
  16. std::string bitstringToStdString();
  17. };
  18. struct GraphDataPoint {
  19. double x;
  20. double y;
  21. SolutionPointData* orginalPoint;
  22. QColor color;
  23. GraphDataPoint() :x(0), y(0), orginalPoint(nullptr) {}
  24. GraphDataPoint(double x, double y, SolutionPointData* orginalPoint = nullptr);
  25. GraphDataPoint(double x, double y, QColor color, SolutionPointData* orginalPoint = nullptr);
  26. bool existLink() const;
  27. QPointF toQPointF() const;
  28. double squaredDistance(QPointF& graphPoint) const;
  29. };
  30. class SingleRun {
  31. public:
  32. std::string name;
  33. std::string runDataName;
  34. const std::vector<SolutionPointData>::iterator begin;
  35. const std::vector<SolutionPointData>::iterator end;
  36. SingleRun(std::string uniqueName, const std::vector<SolutionPointData>::iterator begin, const std::vector<SolutionPointData>::iterator end, std::string name);
  37. std::vector<GraphDataPoint> bestMinSolutionFoundPerIteration;
  38. std::vector<GraphDataPoint> bestMaxSolutionFoundPerIteration;
  39. std::vector<GraphDataPoint> averageSolutionPerItertion;
  40. std::vector<GraphDataPoint> minSolutionPerItertion;
  41. std::vector<GraphDataPoint> maxSolutionPerItertion;
  42. std::vector<GraphDataPoint> dotsForDistribution;
  43. std::vector<GraphDataPoint> dotsForBitField;
  44. std::vector<GraphDataPoint> meanHammingDistancePerIteration;
  45. std::map<int, std::vector<GraphDataPoint>> particleMap;
  46. void calculateAdditionalData(std::vector<boost::multiprecision::cpp_int>& pascalTriangleVec, int amountOfBits);
  47. private:
  48. void calculateBestAndAverageIter();
  49. void calculateParticleSolution();
  50. void calculateDotsForDistribution();
  51. void calculateBitFieldData(std::vector<boost::multiprecision::cpp_int>& pascalTriangleVec, int amountOfBits);
  52. void calculateMeanHammingDistance();
  53. };
  54. class RunData
  55. {
  56. public:
  57. std::string name;
  58. std::string information;
  59. std::string filePath;
  60. std::vector<SolutionPointData> solutionVec;
  61. std::list<SingleRun> singleRunList;
  62. std::vector<GraphDataPoint> bestAverageMaxSolutionFoundPerIteration;
  63. RunData();
  64. RunData(std::string filePath);
  65. void metalogFile(bool& retflag);
  66. private:
  67. bool badFileFlag = false;
  68. std::fstream fileStream;
  69. int actualLine = 0;
  70. void getLine(std::string& bufferString);
  71. void calculateAverageOverRuns();
  72. public:
  73. static int binominalIndex(const int n, int k);
  74. int static hammingdistance(std::vector<bool>& bitVecA, std::vector<bool>& bitVecB);
  75. double static meanHammingDistance(std::vector<SolutionPointData>::iterator begin, std::vector<SolutionPointData>::iterator end);
  76. static boost::multiprecision::cpp_int binominal(const int n, const int k);
  77. static boost::multiprecision::cpp_int positionInPermutation(std::vector<bool>::iterator begin, std::vector<bool>::iterator end, int amountOfSetBits);
  78. static boost::multiprecision::cpp_int positionInPermutation_reversed(std::vector<bool>::iterator begin, std::vector<bool>::iterator end, int amountOfUnsetBits);
  79. };