Changed dp calculation
This commit is contained in:
parent
1c85bee091
commit
7a3b33455d
@ -10,7 +10,6 @@ set(SOURCE_FILES
|
|||||||
functions/solve/structure.cpp
|
functions/solve/structure.cpp
|
||||||
functions/AbstractionLayers/AbstraktionLayer_Base.h
|
functions/AbstractionLayers/AbstraktionLayer_Base.h
|
||||||
functions/AbstractionLayers/Layer1/AbstractionLayer_1.cpp
|
functions/AbstractionLayers/Layer1/AbstractionLayer_1.cpp
|
||||||
functions/AbstractionLayers/LayerHistogram/AbstractionLayer_Histogram.cpp
|
|
||||||
functions/AbstractionLayers/DestructionPower/DestructionPower.cpp
|
functions/AbstractionLayers/DestructionPower/DestructionPower.cpp
|
||||||
header/solve.h
|
header/solve.h
|
||||||
header/input.h
|
header/input.h
|
||||||
|
@ -1,7 +1,3 @@
|
|||||||
//
|
|
||||||
// Created by mpapa on 05.12.2017.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "DestructionPower.h"
|
#include "DestructionPower.h"
|
||||||
|
|
||||||
//TODO! Add more layers here!
|
//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
|
//gets destruction power from left and from top if possible and normalizes
|
||||||
void DestructionPower::DestructionOfSurrounding(const coor constraintCoordinate) {
|
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) {
|
for (int i = 0; i < DESTRUCTION_COUNT; ++i) {
|
||||||
|
|
||||||
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.push_back(0);
|
m_constraintMatrix[constraintCoordinate.col][constraintCoordinate.row].DestructionArray.push_back(0);
|
||||||
|
@ -1,10 +1,6 @@
|
|||||||
//
|
|
||||||
// Created by mpapa on 05.12.2017.
|
|
||||||
//
|
|
||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
//TODO!! increase Destructioncount
|
//TODO!! increase Destructioncount
|
||||||
#define DESTRUCTION_COUNT 2
|
#define DESTRUCTION_COUNT 1
|
||||||
|
|
||||||
#include "DestructionPower_Properties.h"
|
#include "DestructionPower_Properties.h"
|
||||||
#include "../AbstraktionLayer_Base.h"
|
#include "../AbstraktionLayer_Base.h"
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
//
|
|
||||||
// Created by mpapa on 05.12.2017.
|
|
||||||
//
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#define DESTRUCTION_INIT 0.5
|
#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
|
//it through qualityVector and removes all that do not trigger PlaceOfPartGood
|
||||||
bool AbstractionLayer_1::EvaluateQuality (const coor constraintCoordinate, qualityVector& qVector)
|
bool AbstractionLayer_1::EvaluateQuality (const coor constraintCoordinate, qualityVector& qVector)
|
||||||
{
|
{
|
||||||
|
if(constraintCoordinate.row==23 && constraintCoordinate.col==35)
|
||||||
|
cout << "in" << endl;
|
||||||
//evaluateQuality = evaluateProbabilaty
|
//evaluateQuality = evaluateProbabilaty
|
||||||
for(int i = 0;i<qVector.size();i++)
|
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;
|
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()
|
void AbstractionLayer_1::CreateRandomPuzzle()
|
||||||
{
|
{
|
||||||
std::minstd_rand simple_rand;
|
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) == 0b00000011) || ((myPart & 0b00000011) == 0b00000011)) && (((myPart & 0b00000011) != 0b00000000) && (negativePart & 0b00000011) != 0b00000000))
|
||||||
|| (((negativePart & 0b00000011) == 0b00000000) && ((myPart & 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 true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -49,6 +49,8 @@ public:
|
|||||||
bool EvaluateQuality ( coor constraintCoordinate, qualityVector& qVector)override;
|
bool EvaluateQuality ( coor constraintCoordinate, qualityVector& qVector)override;
|
||||||
bool SetConstraintOnPosition( coor constraintCoordinate, AbstractionLayer_1_Properties constraint)override;
|
bool SetConstraintOnPosition( coor constraintCoordinate, AbstractionLayer_1_Properties constraint)override;
|
||||||
bool RemoveConstraintOnPosition( coor constraintCoordinate)override;
|
bool RemoveConstraintOnPosition( coor constraintCoordinate)override;
|
||||||
|
int RemoveSimilar(qualityVector&,uint8_t&);
|
||||||
|
|
||||||
bool PlaceOfPartGood(coor myCoor, uint8_t& myPart);
|
bool PlaceOfPartGood(coor myCoor, uint8_t& myPart);
|
||||||
void shift(uint8_t& Part, int shifts);
|
void shift(uint8_t& Part, int shifts);
|
||||||
void setEdgeZero();
|
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)
|
void Puzzle::removeConstrains(coor removeCoordinates)
|
||||||
{
|
{
|
||||||
this->a1.RemoveConstraintOnPosition(removeCoordinates);
|
this->a1.RemoveConstraintOnPosition(removeCoordinates);
|
||||||
this->a3.RemoveConstraintOnPosition(removeCoordinates);
|
|
||||||
//TODO!! Add other layer remove here
|
//TODO!! Add other layer remove here
|
||||||
}
|
}
|
||||||
void Puzzle::setConstraints(coor setConstraints, Part* constraintPiece)
|
void Puzzle::setConstraints(coor setConstraints, Part* constraintPiece)
|
||||||
@ -78,12 +77,17 @@ void Puzzle::setConstraints(coor setConstraints, Part* constraintPiece)
|
|||||||
|
|
||||||
//a1
|
//a1
|
||||||
this->a1.SetConstraintOnPosition(setConstraints,constraintPiece->m_a1);
|
this->a1.SetConstraintOnPosition(setConstraints,constraintPiece->m_a1);
|
||||||
//a3
|
|
||||||
this->a3.SetConstraintOnPosition(setConstraints,constraintPiece->m_Histogram);
|
|
||||||
|
|
||||||
//TODO!! Add other layer remove here
|
//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()
|
void Puzzle::createRandomPuzzle()
|
||||||
{
|
{
|
||||||
a1.CreateRandomPuzzle();
|
a1.CreateRandomPuzzle();
|
||||||
@ -156,8 +160,6 @@ Mat Puzzle::resultImage( vector<LogEntry>& log){
|
|||||||
imageW = imageH;
|
imageW = imageH;
|
||||||
imageH = temp;
|
imageH = temp;
|
||||||
|
|
||||||
cout<<"imageW "<<imageW <<endl<<"imageH " <<imageH<<endl<<endl;
|
|
||||||
cout<<"partW "<<partWidth <<endl<<"partH " <<partHeight<<endl<<endl;
|
|
||||||
Mat result(imageH,imageW,CV_8UC3);
|
Mat result(imageH,imageW,CV_8UC3);
|
||||||
|
|
||||||
char name[100];
|
char name[100];
|
||||||
@ -169,8 +171,6 @@ Mat Puzzle::resultImage( vector<LogEntry>& log){
|
|||||||
// imshow("result",result);
|
// imshow("result",result);
|
||||||
// waitKey(0);
|
// waitKey(0);
|
||||||
}
|
}
|
||||||
cout << log.size() << endl;
|
|
||||||
cout << log[0].PieceCollector.size() << endl;
|
|
||||||
|
|
||||||
cout << it.PieceCollector[0].second->GetPartID() << 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.emplace_back(LogEntry(coor(0, 0)));
|
||||||
log.back().myCoor = calculateNextCoor(log, puzzleMat);
|
log.back().myCoor = calculateNextCoor(log, puzzleMat);
|
||||||
puzzleMat.dp.DestructionOfSurrounding(log.back().myCoor);//calculate dp from surrounding
|
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
|
//get all not set pieces
|
||||||
for(auto it:puzzleMat.p_myBox)
|
for(auto it:puzzleMat.p_myBox)
|
||||||
if(!it->set)
|
if(!it->set)
|
||||||
log.back().PieceCollector.emplace_back(pair<float,Part*>(0,it));
|
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)
|
void solve(vector<LogEntry>& log,Puzzle& puzzleMat)
|
||||||
{
|
{
|
||||||
log.back().abstractionLevel = puzzleMat.dp.getNextAbstractionLayer(log.back().myCoor,log.back().abstractionLevel); //sets in abstractionLevel
|
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
|
//TODO!! Add more layers here
|
||||||
switch(log.back().abstractionLevel)
|
switch(log.back().abstractionLevel)
|
||||||
{
|
{
|
||||||
@ -80,7 +85,7 @@ void solve(vector<LogEntry>& log,Puzzle& puzzleMat)
|
|||||||
puzzleMat.a1.EvaluateQuality(log.back().myCoor, log.back().PieceCollector);
|
puzzleMat.a1.EvaluateQuality(log.back().myCoor, log.back().PieceCollector);
|
||||||
break;
|
break;
|
||||||
case 1://histogram
|
case 1://histogram
|
||||||
puzzleMat.a3.EvaluateQuality(log.back().myCoor,log.back().PieceCollector);
|
return;
|
||||||
break;
|
break;
|
||||||
case -1://random
|
case -1://random
|
||||||
setsolution(log,puzzleMat);
|
setsolution(log,puzzleMat);
|
||||||
@ -88,7 +93,6 @@ void solve(vector<LogEntry>& log,Puzzle& puzzleMat)
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
float worth = capLogElements(log);
|
float worth = capLogElements(log);
|
||||||
calculateTrueDestructionPower(log,puzzleMat, worth);
|
calculateTrueDestructionPower(log,puzzleMat, worth);
|
||||||
CalculateNewCombinedQuality(log, log.back().PieceCollector, puzzleMat.combinedQualityVector);
|
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
|
//tell log entry that it is set
|
||||||
log.back().Set();
|
log.back().Set();
|
||||||
puzzleMat.setConstraints(log.back().myCoor,log.back().PieceCollector.begin()->second);
|
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)
|
bool backtrack(vector<LogEntry>& log, Puzzle& puzzleMat)
|
||||||
{
|
{
|
||||||
|
cout << "backtracking" ;
|
||||||
if(log.empty())
|
if(log.empty())
|
||||||
{
|
{
|
||||||
cout << "Puzzle not solveable!" << endl;
|
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 more pieces possible, tset piece as not logged
|
||||||
if((log.back().PieceCollector.size())>1)
|
if((log.back().PieceCollector.size())>1)
|
||||||
{
|
{
|
||||||
|
cout << " next piece" << endl;
|
||||||
for(int i=0;i<puzzleMat.p_myBox.size();i++)
|
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
|
if(puzzleMat.p_myBox[i]->GetPartID()==log.back().PieceCollector.begin()->second->GetPartID())//sets all with partid
|
||||||
puzzleMat.p_myBox[i]->set=false;
|
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)
|
if(log.back().PieceCollector.size()==1)
|
||||||
log.back().decreaseRandomed();
|
log.back().decreaseRandomed();
|
||||||
@ -139,6 +154,7 @@ bool backtrack(vector<LogEntry>& log, Puzzle& puzzleMat)
|
|||||||
//else remove log element and backtrack once more
|
//else remove log element and backtrack once more
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
cout << " no more pieces" << endl;
|
||||||
puzzleMat.removeConstrains(log.back().myCoor); //this should remove constraints from all layers
|
puzzleMat.removeConstrains(log.back().myCoor); //this should remove constraints from all layers
|
||||||
if((log.back().PieceCollector.size()))
|
if((log.back().PieceCollector.size()))
|
||||||
for(int i=0;i<puzzleMat.p_myBox.size();i++)
|
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
|
//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) {
|
void calculateTrueDestructionPower(vector<LogEntry>& log, Puzzle& puzzleMat, float Layerworth) {
|
||||||
float destructionPower = sqrt(
|
float destructionPower = sqrt(
|
||||||
Layerworth * puzzleMat.dp.m_constraintMatrix[0][0].SpeedTable[log.back().abstractionLevel]);
|
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
|
// PART RAUER_WEIDINGER
|
||||||
float capLogElements(vector<LogEntry>& log)
|
float capLogElements(vector<LogEntry>& log)
|
||||||
{
|
{
|
||||||
|
|
||||||
// Till Now only ground structure -> incorrect variable ans vector names
|
// Till Now only ground structure -> incorrect variable ans vector names
|
||||||
double limit = 0.6;
|
double limit = 0.6;
|
||||||
double diff = 0;
|
double diff = 0;
|
||||||
|
@ -8,7 +8,6 @@
|
|||||||
|
|
||||||
#include "../functions/AbstractionLayers/Layer1/AbstractionLayer_1_Properties.h"
|
#include "../functions/AbstractionLayers/Layer1/AbstractionLayer_1_Properties.h"
|
||||||
#include "../functions/AbstractionLayers/DestructionPower/DestructionPower_Properties.h"
|
#include "../functions/AbstractionLayers/DestructionPower/DestructionPower_Properties.h"
|
||||||
#include "../functions/AbstractionLayers/LayerHistogram/AbstractionLayer_Histogram_Properties.h"
|
|
||||||
|
|
||||||
class LayerContainer;
|
class LayerContainer;
|
||||||
|
|
||||||
@ -43,7 +42,6 @@ public:
|
|||||||
|
|
||||||
bool set;
|
bool set;
|
||||||
AbstractionLayer_1_Properties m_a1;
|
AbstractionLayer_1_Properties m_a1;
|
||||||
AbstractionLayer_Histogram_Properties m_Histogram;
|
|
||||||
private:
|
private:
|
||||||
int32_t m_partID;
|
int32_t m_partID;
|
||||||
uint8_t m_numOfRotations;
|
uint8_t m_numOfRotations;
|
||||||
|
@ -9,7 +9,6 @@
|
|||||||
|
|
||||||
#include "../functions/AbstractionLayers/Layer1/AbstractionLayer_1.h"
|
#include "../functions/AbstractionLayers/Layer1/AbstractionLayer_1.h"
|
||||||
#include "../functions/AbstractionLayers/DestructionPower/DestructionPower.h"
|
#include "../functions/AbstractionLayers/DestructionPower/DestructionPower.h"
|
||||||
#include "../functions/AbstractionLayers/LayerHistogram/AbstractionLayer_Histogram.h"
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@ -47,7 +46,6 @@ public:
|
|||||||
createBox(); createp_box();
|
createBox(); createp_box();
|
||||||
dp.PreProcessing({cols,rows}, nullptr);
|
dp.PreProcessing({cols,rows}, nullptr);
|
||||||
a1.PreProcessing({cols,rows}, &p_myBox);
|
a1.PreProcessing({cols,rows}, &p_myBox);
|
||||||
a3.PreProcessing({cols,rows},&p_myBox);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -55,10 +53,11 @@ public:
|
|||||||
|
|
||||||
DestructionPower dp;
|
DestructionPower dp;
|
||||||
AbstractionLayer_1 a1;
|
AbstractionLayer_1 a1;
|
||||||
AbstractionLayer_Histogram a3;
|
|
||||||
|
|
||||||
void removeConstrains(coor removeCoordinates);
|
void removeConstrains(coor removeCoordinates);
|
||||||
void setConstraints(coor setConstraints, Part *constraintPiece);
|
void setConstraints(coor setConstraints, Part *constraintPiece);
|
||||||
|
int removeSimilar(qualityVector&, Part&);
|
||||||
|
|
||||||
void printPuzzle();
|
void printPuzzle();
|
||||||
void printBox();
|
void printBox();
|
||||||
Mat resultImage(vector<LogEntry>&);
|
Mat resultImage(vector<LogEntry>&);
|
||||||
|
Loading…
Reference in New Issue
Block a user