#pragma once #include #include #include #include #include #include #include class RunData; struct SolutionPointData { int round; int iteration; double objectiveFunction; int particleNumber; std::vector bitVec; std::string bitstringToStdString(); }; struct GraphDataPoint { double x; double y; SolutionPointData* orginalPoint; QColor color; GraphDataPoint() :x(0), y(0), orginalPoint(nullptr) {} GraphDataPoint(double x, double y, SolutionPointData* orginalPoint = nullptr); GraphDataPoint(double x, double y, QColor color, SolutionPointData* orginalPoint = nullptr); bool existLink() const; QPointF toQPointF() const; double squaredDistance(QPointF& graphPoint) const; }; class SingleRun { public: std::string name; std::string runDataName; const std::vector::iterator begin; const std::vector::iterator end; SingleRun(std::string uniqueName, const std::vector::iterator begin, const std::vector::iterator end, std::string name); std::vector bestMinSolutionFoundPerIteration; std::vector bestMaxSolutionFoundPerIteration; std::vector averageSolutionPerItertion; std::vector minSolutionPerItertion; std::vector maxSolutionPerItertion; std::vector dotsForDistribution; std::vector dotsForBitField; std::vector meanHammingDistancePerIteration; std::map> particleMap; void calculateAdditionalData(std::vector& pascalTriangleVec, int amountOfBits); private: void calculateBestAndAverageIter(); void calculateParticleSolution(); void calculateDotsForDistribution(); void calculateBitFieldData(std::vector& pascalTriangleVec, int amountOfBits); void calculateMeanHammingDistance(); }; class RunData { public: std::string name; std::string information; std::string filePath; std::vector solutionVec; std::list singleRunList; std::vector bestAverageMaxSolutionFoundPerIteration; RunData(); RunData(std::string filePath); void metalogFile(bool& retflag); private: bool badFileFlag = false; std::fstream fileStream; int actualLine = 0; void getLine(std::string& bufferString); void calculateAverageOverRuns(); public: static int binominalIndex(const int n, int k); int static hammingdistance(std::vector& bitVecA, std::vector& bitVecB); double static meanHammingDistance(std::vector::iterator begin, std::vector::iterator end); static boost::multiprecision::cpp_int binominal(const int n, const int k); static boost::multiprecision::cpp_int positionInPermutation(std::vector::iterator begin, std::vector::iterator end, int amountOfSetBits); static boost::multiprecision::cpp_int positionInPermutation_reversed(std::vector::iterator begin, std::vector::iterator end, int amountOfUnsetBits); };