Changed dp calculation
This commit is contained in:
		@@ -1,7 +1,3 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by mpapa on 05.12.2017.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#include "DestructionPower.h"
 | 
			
		||||
 | 
			
		||||
//TODO! Add more layers here!
 | 
			
		||||
@@ -39,6 +35,8 @@ bool DestructionPower::RemoveConstraintOnPosition(const coor constraintCoordinat
 | 
			
		||||
//gets destruction power from left and from top if possible and normalizes
 | 
			
		||||
void DestructionPower::DestructionOfSurrounding(const coor constraintCoordinate) {
 | 
			
		||||
 | 
			
		||||
    for(int i = 0; i < m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.size(); ++i)
 | 
			
		||||
        m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.pop_back();
 | 
			
		||||
    for (int i = 0; i < DESTRUCTION_COUNT; ++i) {
 | 
			
		||||
 | 
			
		||||
        m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.push_back(0);
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,6 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by mpapa on 05.12.2017.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#pragma once
 | 
			
		||||
//TODO!! increase Destructioncount
 | 
			
		||||
#define DESTRUCTION_COUNT 2
 | 
			
		||||
#define DESTRUCTION_COUNT 1
 | 
			
		||||
 | 
			
		||||
#include "DestructionPower_Properties.h"
 | 
			
		||||
#include "../AbstraktionLayer_Base.h"
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,3 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by mpapa on 05.12.2017.
 | 
			
		||||
//
 | 
			
		||||
#pragma once
 | 
			
		||||
 | 
			
		||||
#define DESTRUCTION_INIT 0.5
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,8 @@ bool AbstractionLayer_1::PreProcessing(coor mySize,  const vector<Part*>* partAr
 | 
			
		||||
//it through qualityVector and removes all that do not trigger PlaceOfPartGood
 | 
			
		||||
bool AbstractionLayer_1::EvaluateQuality (const coor constraintCoordinate, qualityVector& qVector)
 | 
			
		||||
{
 | 
			
		||||
    if(constraintCoordinate.row==23 && constraintCoordinate.col==35)
 | 
			
		||||
        cout << "in" << endl;
 | 
			
		||||
    //evaluateQuality = evaluateProbabilaty
 | 
			
		||||
    for(int i = 0;i<qVector.size();i++)
 | 
			
		||||
    {
 | 
			
		||||
@@ -69,6 +71,20 @@ bool AbstractionLayer_1::RemoveConstraintOnPosition(const coor constraintCoordin
 | 
			
		||||
    m_constraintMatrix[constraintCoordinate.col+1][constraintCoordinate.row+1].m_connections=0b11111111;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int AbstractionLayer_1::RemoveSimilar(qualityVector& qVector,uint8_t& constraints)
 | 
			
		||||
{
 | 
			
		||||
    //
 | 
			
		||||
    for(int i=0;i<qVector.size();)
 | 
			
		||||
    {
 | 
			
		||||
    if(qVector[i].second->m_a1.m_connections==constraints)
 | 
			
		||||
        qVector.erase(qVector.begin()+i);
 | 
			
		||||
    else
 | 
			
		||||
        i++;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void AbstractionLayer_1::CreateRandomPuzzle()
 | 
			
		||||
{
 | 
			
		||||
    std::minstd_rand simple_rand;
 | 
			
		||||
@@ -182,7 +198,11 @@ bool AbstractionLayer_1::PlaceOfPartGood(coor myCoor, uint8_t& myPart)
 | 
			
		||||
                 || ((((negativePart & 0b00000011) == 0b00000011) || ((myPart &  0b00000011) == 0b00000011))  && (((myPart & 0b00000011) != 0b00000000) && (negativePart & 0b00000011) != 0b00000000))
 | 
			
		||||
                 ||  (((negativePart & 0b00000011) == 0b00000000) && ((myPart &  0b00000011) == 0b00000000))  )
 | 
			
		||||
            )
 | 
			
		||||
    {
 | 
			
		||||
        if(myCoor.row==18 && myCoor.col==35)
 | 
			
		||||
            cout << "gud: " << std::bitset<8>(myPart) << endl;
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    return false;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -49,6 +49,8 @@ public:
 | 
			
		||||
    bool EvaluateQuality ( coor constraintCoordinate, qualityVector& qVector)override;
 | 
			
		||||
    bool SetConstraintOnPosition( coor constraintCoordinate, AbstractionLayer_1_Properties constraint)override;
 | 
			
		||||
    bool RemoveConstraintOnPosition( coor constraintCoordinate)override;
 | 
			
		||||
    int RemoveSimilar(qualityVector&,uint8_t&);
 | 
			
		||||
 | 
			
		||||
    bool PlaceOfPartGood(coor myCoor, uint8_t& myPart);
 | 
			
		||||
    void shift(uint8_t& Part, int shifts);
 | 
			
		||||
    void setEdgeZero();
 | 
			
		||||
 
 | 
			
		||||
@@ -1,158 +0,0 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by Niko on 1/11/2018.
 | 
			
		||||
//
 | 
			
		||||
#include "../../../header.h"
 | 
			
		||||
#include "AbstractionLayer_Histogram.h"
 | 
			
		||||
 | 
			
		||||
using namespace cv;
 | 
			
		||||
 | 
			
		||||
Mat HistogramComparer::readImages(int count)
 | 
			
		||||
{
 | 
			
		||||
    char name[100];
 | 
			
		||||
    Mat corr;
 | 
			
		||||
    Mat ref_gray;
 | 
			
		||||
 | 
			
		||||
    sprintf(name, PATH, count);
 | 
			
		||||
    Mat src = imread(name, 1);
 | 
			
		||||
    if (!src.data)
 | 
			
		||||
    {
 | 
			
		||||
        cerr << "Problem loading image!!!" << endl;
 | 
			
		||||
        return src;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if(DISPLAY)imshow("src",src);
 | 
			
		||||
 | 
			
		||||
    Mat im_color;
 | 
			
		||||
    cvtColor(src, im_color, COLOR_BGR2HSV);
 | 
			
		||||
    return im_color;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool AbstractionLayer_Histogram::PreProcessing(coor mySize,  const vector<Part*>* partArray){
 | 
			
		||||
HistogramComparer localImage;
 | 
			
		||||
    cout << "Abstraction 2 Preprocessing...  " << flush;
 | 
			
		||||
    const vector<Part*>& ref_partArray = *partArray;
 | 
			
		||||
    analyseParts analyse(mySize.row*mySize.col);
 | 
			
		||||
    Part buf;
 | 
			
		||||
    int iterator=0;
 | 
			
		||||
    if(!analyse.getImages())
 | 
			
		||||
    {
 | 
			
		||||
        cerr << "Error occured in getImages!" << endl;
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
    else // hier werden alle vier verschiedenen Rotationsarten 'gleichzeitig' abgespeichert
 | 
			
		||||
        //TODO rows and cols
 | 
			
		||||
 | 
			
		||||
        for(int i = 0; i < mySize.row*mySize.col; i++)
 | 
			
		||||
        {
 | 
			
		||||
            Mat src_img1 = localImage.readImages(i);
 | 
			
		||||
            Mat hsv_img1;
 | 
			
		||||
            /// Convert to HSV
 | 
			
		||||
            cvtColor(src_img1, hsv_img1, COLOR_BGR2HSV);
 | 
			
		||||
 | 
			
		||||
            /// Using 50 bins for hue and 60 for saturation
 | 
			
		||||
            int h_bins = 50;
 | 
			
		||||
            int s_bins = 60;
 | 
			
		||||
            int histSize[] = {h_bins, s_bins};
 | 
			
		||||
 | 
			
		||||
            // hue varies from 0 to 179, saturation from 0 to 255
 | 
			
		||||
            float h_ranges[] = {0, 180};
 | 
			
		||||
            float s_ranges[] = {0, 256};
 | 
			
		||||
 | 
			
		||||
            const float *ranges[] = {h_ranges, s_ranges};
 | 
			
		||||
 | 
			
		||||
            // Use the o-th and 1-st channels
 | 
			
		||||
            int channels[] = {0, 1};
 | 
			
		||||
 | 
			
		||||
            /// Histograms
 | 
			
		||||
            MatND hist_img1;
 | 
			
		||||
 | 
			
		||||
            /// Calculate the histograms for the HSV images
 | 
			
		||||
            calcHist(&hsv_img1, 1, channels, Mat(), hist_img1, 2, histSize, ranges, true, false);
 | 
			
		||||
            // normalize(hist_img1, hist_img1, 0, 1, NORM_MINMAX, -1, Mat());
 | 
			
		||||
 | 
			
		||||
            ref_partArray[iterator]->m_Histogram.image=hsv_img1;
 | 
			
		||||
            iterator++;
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    InitialiseConstraintMatrixSize(mySize.col, mySize.row); //col row switched in this function
 | 
			
		||||
 | 
			
		||||
    cout << "Done!" << endl;
 | 
			
		||||
    return true;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool AbstractionLayer_Histogram::EvaluateQuality (const coor constraintCoordinate, qualityVector& qVector){
 | 
			
		||||
 | 
			
		||||
    //evaluateQuality = evaluateProbabilaty
 | 
			
		||||
    for(int i = 0;i < qVector.size();i++)
 | 
			
		||||
    {
 | 
			
		||||
        if(PlaceOfPartGood(constraintCoordinate, qVector[i].second->m_Histogram.image))
 | 
			
		||||
        {
 | 
			
		||||
            qVector[i].first=1;
 | 
			
		||||
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        qVector[i].first=0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
bool AbstractionLayer_Histogram::PlaceOfPartGood(coor myCoor, Mat& myPart)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    HistogramComparer localComparer;
 | 
			
		||||
    //sets coordinates to correct position for layer
 | 
			
		||||
 | 
			
		||||
    if( myCoor.row == 0 && myCoor.col == 0){return true;}
 | 
			
		||||
    else if(myCoor.col == 0 && myCoor.row >0){
 | 
			
		||||
        if(localComparer.CompareHistogram(m_constraintMatrix[myCoor.col][myCoor.row-1].image, myPart)){
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        else return false;
 | 
			
		||||
    }
 | 
			
		||||
    else if( myCoor.row == 0 && myCoor.col >0){
 | 
			
		||||
        if(localComparer.CompareHistogram(m_constraintMatrix[myCoor.col-1][myCoor.row].image, myPart)){
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        else return false;
 | 
			
		||||
    }
 | 
			
		||||
    else if (myCoor.col > 0 && myCoor.row >0){
 | 
			
		||||
        if(     localComparer.CompareHistogram(m_constraintMatrix[myCoor.col][myCoor.row-1].image, myPart) &&
 | 
			
		||||
                localComparer.CompareHistogram(m_constraintMatrix[myCoor.col-1][myCoor.row].image, myPart)){
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        else return false;
 | 
			
		||||
    }else return false;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool HistogramComparer::CompareHistogram(Mat hist_img1,Mat hist_img2)
 | 
			
		||||
{
 | 
			
		||||
    // Correlation
 | 
			
		||||
    double Correlation = compareHist(hist_img1, hist_img2, CV_COMP_CORREL);
 | 
			
		||||
 | 
			
		||||
    if(Correlation > 0.95 ){
 | 
			
		||||
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
    else
 | 
			
		||||
        return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool AbstractionLayer_Histogram::SetConstraintOnPosition(const coor constraintCoordinate, const AbstractionLayer_Histogram_Properties constraint)
 | 
			
		||||
{
 | 
			
		||||
    m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].image=constraint.image;
 | 
			
		||||
    //m_constraintMatrix[constraintCoordinate.col+1][constraintCoordinate.row+1].m_connections=constraint.m_connections;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
bool AbstractionLayer_Histogram::RemoveConstraintOnPosition(const coor constraintCoordinate)
 | 
			
		||||
{
 | 
			
		||||
    Mat dummy(1,1,0);
 | 
			
		||||
    m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].image = dummy;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,40 +0,0 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by Niko on 1/11/2018.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef MPK_PUZZLE_ABSTRACTIONLAYER_HISTOGRAM_H
 | 
			
		||||
#define MPK_PUZZLE_ABSTRACTIONLAYER_HISTOGRAM_H
 | 
			
		||||
#define DISPLAY false
 | 
			
		||||
#define PATH "..\\..\\..\\pieces\\%04d.jpg"
 | 
			
		||||
#include "opencv2/highgui/highgui.hpp"
 | 
			
		||||
#include "opencv2/imgproc/imgproc.hpp"
 | 
			
		||||
#include "AbstractionLayer_Histogram_Properties.h"
 | 
			
		||||
#include "../AbstraktionLayer_Base.h"
 | 
			
		||||
 | 
			
		||||
using namespace std;
 | 
			
		||||
using namespace cv;
 | 
			
		||||
 | 
			
		||||
class AbstractionLayer_Histogram : public AbstractionLayer_Base<AbstractionLayer_Histogram_Properties>
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    bool PreProcessing(coor mySize, const vector<Part*>* partArray) override ;
 | 
			
		||||
    bool EvaluateQuality ( coor constraintCoordinate, qualityVector& qVector)override;
 | 
			
		||||
    bool RemoveConstraintOnPosition( coor constraintCoordinate)override;
 | 
			
		||||
    bool PlaceOfPartGood(coor myCoor, Mat& myPart);
 | 
			
		||||
    bool SetConstraintOnPosition( coor constraintCoordinate, AbstractionLayer_Histogram_Properties constraint)override;
 | 
			
		||||
    qualityVector returnInBox(vector<Part>& PuzzleBox);
 | 
			
		||||
    void printConstraintMatrix();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
class HistogramComparer{
 | 
			
		||||
public:
 | 
			
		||||
    Mat readImages(int);
 | 
			
		||||
    bool CompareHistogram(Mat Part, Mat RefPart);
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif //MPK_PUZZLE_ABSTRACTIONLAYER_HISTOGRAM_H
 | 
			
		||||
 | 
			
		||||
@@ -1,29 +0,0 @@
 | 
			
		||||
//
 | 
			
		||||
// Created by Niko on 1/11/2018.
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
#ifndef MPK_PUZZLE_ABSTRACTIONLAYER_HISTOGRAM_PROPERTIES_H
 | 
			
		||||
#define MPK_PUZZLE_ABSTRACTIONLAYER_HISTOGRAM_PROPERTIES_H
 | 
			
		||||
#include <stdint.h>
 | 
			
		||||
#include "opencv2/highgui/highgui.hpp"
 | 
			
		||||
#include "opencv2/imgproc/imgproc.hpp"
 | 
			
		||||
 | 
			
		||||
using namespace cv;
 | 
			
		||||
class AbstractionLayer_Histogram_Properties
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
    AbstractionLayer_Histogram_Properties() : Correlation(-1){}
 | 
			
		||||
    double getCorrelation(){return Correlation;}
 | 
			
		||||
    Mat getmHistogram(){return m_Histogram;}
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
 | 
			
		||||
    double Correlation;
 | 
			
		||||
    Mat m_Histogram;
 | 
			
		||||
    Mat image;
 | 
			
		||||
    friend class AbstractionLayer_Histogram;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
#endif //MPK_PUZZLE_ABSTRACTIONLAYER_HISTOGRAM_PROPERTIES_H
 | 
			
		||||
 | 
			
		||||
@@ -66,7 +66,6 @@ void Puzzle::shuffle()
 | 
			
		||||
void Puzzle::removeConstrains(coor removeCoordinates)
 | 
			
		||||
{
 | 
			
		||||
    this->a1.RemoveConstraintOnPosition(removeCoordinates);
 | 
			
		||||
    this->a3.RemoveConstraintOnPosition(removeCoordinates);
 | 
			
		||||
    //TODO!! Add other layer remove here
 | 
			
		||||
}
 | 
			
		||||
void Puzzle::setConstraints(coor setConstraints, Part* constraintPiece)
 | 
			
		||||
@@ -78,12 +77,17 @@ void Puzzle::setConstraints(coor setConstraints, Part* constraintPiece)
 | 
			
		||||
 | 
			
		||||
    //a1
 | 
			
		||||
    this->a1.SetConstraintOnPosition(setConstraints,constraintPiece->m_a1);
 | 
			
		||||
    //a3
 | 
			
		||||
    this->a3.SetConstraintOnPosition(setConstraints,constraintPiece->m_Histogram);
 | 
			
		||||
 | 
			
		||||
    //TODO!! Add other layer remove here
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
int Puzzle::removeSimilar(qualityVector& qVector, Part& myPart)
 | 
			
		||||
{
 | 
			
		||||
    //a1
 | 
			
		||||
    uint8_t tmpConnections=myPart.m_a1.getConnections();
 | 
			
		||||
    a1.RemoveSimilar(qVector,tmpConnections);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Puzzle::createRandomPuzzle()
 | 
			
		||||
{
 | 
			
		||||
    a1.CreateRandomPuzzle();
 | 
			
		||||
@@ -156,8 +160,6 @@ Mat Puzzle::resultImage( vector<LogEntry>& log){
 | 
			
		||||
    imageW = imageH;
 | 
			
		||||
    imageH = temp;
 | 
			
		||||
 | 
			
		||||
    cout<<"imageW "<<imageW <<endl<<"imageH " <<imageH<<endl<<endl;
 | 
			
		||||
    cout<<"partW "<<partWidth <<endl<<"partH " <<partHeight<<endl<<endl;
 | 
			
		||||
    Mat result(imageH,imageW,CV_8UC3);
 | 
			
		||||
 | 
			
		||||
    char name[100];
 | 
			
		||||
@@ -169,8 +171,6 @@ Mat Puzzle::resultImage( vector<LogEntry>& log){
 | 
			
		||||
            // imshow("result",result);
 | 
			
		||||
            // waitKey(0);
 | 
			
		||||
        }
 | 
			
		||||
        cout << log.size() << endl;
 | 
			
		||||
        cout << log[0].PieceCollector.size() << endl;
 | 
			
		||||
 | 
			
		||||
        cout << it.PieceCollector[0].second->GetPartID() << endl;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -44,11 +44,15 @@ void createNextLogElement(vector<LogEntry>& log, Puzzle& puzzleMat)
 | 
			
		||||
	log.emplace_back(LogEntry(coor(0, 0)));
 | 
			
		||||
   	log.back().myCoor = calculateNextCoor(log, puzzleMat);
 | 
			
		||||
    puzzleMat.dp.DestructionOfSurrounding(log.back().myCoor);//calculate dp from surrounding
 | 
			
		||||
    cout << "-----------------------" << endl;
 | 
			
		||||
    cout << "destr-array:" << endl;
 | 
			
		||||
    for(auto it:puzzleMat.dp.m_constraintMatrix[log.back().myCoor.col][log.back().myCoor.row].DestructionArray)
 | 
			
		||||
        cout << it << endl;
 | 
			
		||||
    //get all not set pieces
 | 
			
		||||
    for(auto it:puzzleMat.p_myBox)
 | 
			
		||||
        if(!it->set)
 | 
			
		||||
            log.back().PieceCollector.emplace_back(pair<float,Part*>(0,it));
 | 
			
		||||
   	solve(log,puzzleMat);
 | 
			
		||||
    solve(log,puzzleMat);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@@ -72,7 +76,8 @@ coor calculateNextCoor(vector<LogEntry>& log, Puzzle& puzzleMat)
 | 
			
		||||
void solve(vector<LogEntry>& log,Puzzle& puzzleMat)
 | 
			
		||||
{
 | 
			
		||||
	log.back().abstractionLevel = puzzleMat.dp.getNextAbstractionLayer(log.back().myCoor,log.back().abstractionLevel); //sets in abstractionLevel
 | 
			
		||||
	//status(log,p_Box,puzzleMat);
 | 
			
		||||
    cout << "ab: " << log.back().abstractionLevel << endl;
 | 
			
		||||
    //status(log,p_Box,puzzleMat);
 | 
			
		||||
    //TODO!! Add more layers here
 | 
			
		||||
    switch(log.back().abstractionLevel)
 | 
			
		||||
    {
 | 
			
		||||
@@ -80,7 +85,7 @@ void solve(vector<LogEntry>& log,Puzzle& puzzleMat)
 | 
			
		||||
            puzzleMat.a1.EvaluateQuality(log.back().myCoor, log.back().PieceCollector);
 | 
			
		||||
        break;
 | 
			
		||||
        case 1://histogram
 | 
			
		||||
            puzzleMat.a3.EvaluateQuality(log.back().myCoor,log.back().PieceCollector);
 | 
			
		||||
            return;
 | 
			
		||||
            break;
 | 
			
		||||
        case -1://random
 | 
			
		||||
            setsolution(log,puzzleMat);
 | 
			
		||||
@@ -88,7 +93,6 @@ void solve(vector<LogEntry>& log,Puzzle& puzzleMat)
 | 
			
		||||
        default:
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    float worth = capLogElements(log);
 | 
			
		||||
    calculateTrueDestructionPower(log,puzzleMat, worth);
 | 
			
		||||
    CalculateNewCombinedQuality(log, log.back().PieceCollector, puzzleMat.combinedQualityVector);
 | 
			
		||||
@@ -110,11 +114,16 @@ void setsolution(vector<LogEntry>& log, Puzzle& puzzleMat)
 | 
			
		||||
	//tell log entry that it is set
 | 
			
		||||
	log.back().Set();
 | 
			
		||||
    puzzleMat.setConstraints(log.back().myCoor,log.back().PieceCollector.begin()->second);
 | 
			
		||||
    //cout << "set:" << log.back().myCoor.col << "," << log.back().myCoor.row << endl;
 | 
			
		||||
    cout << "set:" << log.back().myCoor.col << "," << log.back().myCoor.row << endl;
 | 
			
		||||
    cout << "ID: " << log.back().PieceCollector[0].second->GetPartID() << endl;
 | 
			
		||||
    cout << "log:" << endl;
 | 
			
		||||
    for(auto it:log.back().PieceCollector)
 | 
			
		||||
        cout << std::bitset<8>(it.second->m_a1.getConnections()) << "|" << it.second->GetPartID() << endl;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool backtrack(vector<LogEntry>& log, Puzzle& puzzleMat)
 | 
			
		||||
{
 | 
			
		||||
    cout << "backtracking" ;
 | 
			
		||||
    if(log.empty())
 | 
			
		||||
    {
 | 
			
		||||
        cout << "Puzzle not solveable!" << endl;
 | 
			
		||||
@@ -124,10 +133,16 @@ bool backtrack(vector<LogEntry>& log, Puzzle& puzzleMat)
 | 
			
		||||
    //if more pieces possible, tset piece as not logged
 | 
			
		||||
    if((log.back().PieceCollector.size())>1)
 | 
			
		||||
    {
 | 
			
		||||
        cout << " next piece" << endl;
 | 
			
		||||
        for(int i=0;i<puzzleMat.p_myBox.size();i++)
 | 
			
		||||
            if(puzzleMat.p_myBox[i]->GetPartID()==log.back().PieceCollector.begin()->second->GetPartID())//sets all with partid
 | 
			
		||||
                puzzleMat.p_myBox[i]->set=false;
 | 
			
		||||
        log.back().PieceCollector.erase(log.back().PieceCollector.begin());
 | 
			
		||||
 | 
			
		||||
        Part myPart = *log.back().PieceCollector[0].second;//tmpsaves bad part
 | 
			
		||||
        log.back().PieceCollector.erase(log.back().PieceCollector.begin());//removes bad part from log
 | 
			
		||||
        puzzleMat.removeSimilar(log.back().PieceCollector,myPart); //removes all pieces from log that are similar to bad part
 | 
			
		||||
        //TODO remove this when further layers are added!!!
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        if(log.back().PieceCollector.size()==1)
 | 
			
		||||
            log.back().decreaseRandomed();
 | 
			
		||||
@@ -139,6 +154,7 @@ bool backtrack(vector<LogEntry>& log, Puzzle& puzzleMat)
 | 
			
		||||
    //else remove log element and backtrack once more
 | 
			
		||||
    else
 | 
			
		||||
    {
 | 
			
		||||
        cout << " no more pieces" << endl;
 | 
			
		||||
        puzzleMat.removeConstrains(log.back().myCoor); //this should remove constraints from all layers
 | 
			
		||||
        if((log.back().PieceCollector.size()))
 | 
			
		||||
            for(int i=0;i<puzzleMat.p_myBox.size();i++)
 | 
			
		||||
@@ -153,7 +169,6 @@ bool backtrack(vector<LogEntry>& log, Puzzle& puzzleMat)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//this is addon stuff that should later all be extracted into a sererate cpp as it is not core dispatcher functionality
 | 
			
		||||
 | 
			
		||||
void calculateTrueDestructionPower(vector<LogEntry>& log, Puzzle& puzzleMat, float Layerworth) {
 | 
			
		||||
    float destructionPower = sqrt(
 | 
			
		||||
            Layerworth * puzzleMat.dp.m_constraintMatrix[0][0].SpeedTable[log.back().abstractionLevel]);
 | 
			
		||||
@@ -170,6 +185,7 @@ void calculateTrueDestructionPower(vector<LogEntry>& log, Puzzle& puzzleMat, flo
 | 
			
		||||
// PART RAUER_WEIDINGER
 | 
			
		||||
float capLogElements(vector<LogEntry>& log)
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
    // Till Now only ground structure -> incorrect variable ans vector names
 | 
			
		||||
    double limit = 0.6;
 | 
			
		||||
    double diff = 0;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user