Update type of elements in QAP eval and QAP incrEval

This commit is contained in:
verel 2015-06-09 11:08:41 +02:00
commit c9475c4ed0
6 changed files with 79 additions and 32 deletions

View file

@ -53,7 +53,7 @@ public:
* Constructor * Constructor
* @param _param the parameter of type double to save in the vector * @param _param the parameter of type double to save in the vector
*/ */
moVectorMonitor(eoValueParam<double> & _param) : doubleParam(&_param), intParam(NULL), intLongParam(NULL), eotParam(NULL) moVectorMonitor(eoValueParam<double> & _param) : doubleParam(&_param), intParam(NULL), intLongParam(NULL), intLongLongParam(NULL), eotParam(NULL)
{ {
// precision of the output by default // precision of the output by default
precisionOutput = std::cout.precision(); precisionOutput = std::cout.precision();
@ -63,7 +63,7 @@ public:
* Default Constructor * Default Constructor
* @param _param the parameter of type unsigned int to save in the vector * @param _param the parameter of type unsigned int to save in the vector
*/ */
moVectorMonitor(eoValueParam<unsigned int> & _param) : doubleParam(NULL), intParam(&_param), intLongParam(NULL), eotParam(NULL) moVectorMonitor(eoValueParam<unsigned int> & _param) : doubleParam(NULL), intParam(&_param), intLongParam(NULL), intLongLongParam(NULL), eotParam(NULL)
{ {
// precision of the output by default // precision of the output by default
precisionOutput = std::cout.precision(); precisionOutput = std::cout.precision();
@ -73,7 +73,17 @@ public:
* Default Constructor * Default Constructor
* @param _param the parameter of type unsigned int to save in the vector * @param _param the parameter of type unsigned int to save in the vector
*/ */
moVectorMonitor(eoValueParam<unsigned long> & _param) : doubleParam(NULL), intParam(NULL), intLongParam(&_param), eotParam(NULL) moVectorMonitor(eoValueParam<unsigned long> & _param) : doubleParam(NULL), intParam(NULL), intLongParam(&_param), intLongLongParam(NULL), eotParam(NULL)
{
// precision of the output by default
precisionOutput = std::cout.precision();
}
/**
* Default Constructor
* @param _param the parameter of type unsigned int to save in the vector
*/
moVectorMonitor(eoValueParam<long long int> & _param) : doubleParam(NULL), intParam(NULL), intLongParam(NULL), intLongLongParam(&_param), eotParam(NULL)
{ {
// precision of the output by default // precision of the output by default
precisionOutput = std::cout.precision(); precisionOutput = std::cout.precision();
@ -83,7 +93,18 @@ public:
* Default Constructor * Default Constructor
* @param _param the parameter of type EOT to save in the vector * @param _param the parameter of type EOT to save in the vector
*/ */
moVectorMonitor(eoValueParam<EOT> & _param) : doubleParam(NULL), intParam(NULL), intLongParam(NULL), eotParam(&_param) moVectorMonitor(eoValueParam<EOT> & _param) : doubleParam(NULL), intParam(NULL), intLongParam(NULL), intLongLongParam(NULL), eotParam(&_param)
{
// precision of the output by default
precisionOutput = std::cout.precision();
}
/**
* Default Constructor
* @param _param the parameter of type eoScalarFitness to save in the vector
*/
template <class Compare>
moVectorMonitor(eoValueParam<eoScalarFitness<long long int, Compare> > & _param) : doubleParam(NULL), intParam(NULL), intLongParam(NULL), intLongLongParam(& (eoValueParam<long long int>&)_param), eotParam(NULL)
{ {
// precision of the output by default // precision of the output by default
precisionOutput = std::cout.precision(); precisionOutput = std::cout.precision();
@ -94,7 +115,7 @@ public:
* @param _param the parameter of type eoScalarFitness to save in the vector * @param _param the parameter of type eoScalarFitness to save in the vector
*/ */
template <class ScalarType, class Compare> template <class ScalarType, class Compare>
moVectorMonitor(eoValueParam<eoScalarFitness<ScalarType, Compare> > & _param) : doubleParam( & (eoValueParam<double>&)_param), intParam(NULL), intLongParam(NULL), eotParam(NULL) moVectorMonitor(eoValueParam<eoScalarFitness<ScalarType, Compare> > & _param) : doubleParam( & (eoValueParam<double>&)_param), intParam(NULL), intLongParam(NULL), intLongLongParam(NULL), eotParam(NULL)
{ {
// precision of the output by default // precision of the output by default
precisionOutput = std::cout.precision(); precisionOutput = std::cout.precision();
@ -105,7 +126,7 @@ public:
* @param _param unvalid Parameter * @param _param unvalid Parameter
*/ */
template <class T> template <class T>
moVectorMonitor(eoValueParam<T> & _param) : doubleParam(NULL), intParam(NULL), intLongParam(NULL), eotParam(NULL) moVectorMonitor(eoValueParam<T> & _param) : doubleParam(NULL), intParam(NULL), intLongParam(NULL), intLongLongParam(NULL), eotParam(NULL)
{ {
std::cerr << "Sorry the type can not be in a vector of moVectorMonitor" << std::endl; std::cerr << "Sorry the type can not be in a vector of moVectorMonitor" << std::endl;
} }
@ -134,7 +155,10 @@ public:
if (intLongParam != NULL) if (intLongParam != NULL)
valueVec.push_back((double) intLongParam->value()); valueVec.push_back((double) intLongParam->value());
else else
eotVec.push_back(eotParam->value()); if (intLongLongParam != NULL)
valueVec.push_back((double) intLongLongParam->value());
else
eotVec.push_back(eotParam->value());
return *this ; return *this ;
} }
@ -189,7 +213,10 @@ public:
if (intLongParam != NULL) if (intLongParam != NULL)
return intLongParam->longName(); return intLongParam->longName();
else else
return eotParam->longName(); if (intLongLongParam != NULL)
return intLongLongParam->longName();
else
return eotParam->longName();
} }
/** /**
@ -259,6 +286,7 @@ protected:
eoValueParam<double> * doubleParam ; eoValueParam<double> * doubleParam ;
eoValueParam<unsigned int> * intParam ; eoValueParam<unsigned int> * intParam ;
eoValueParam<unsigned long> * intLongParam ; eoValueParam<unsigned long> * intLongParam ;
eoValueParam<long long int> * intLongLongParam ;
eoValueParam<EOT> * eotParam ; eoValueParam<EOT> * eotParam ;
std::vector<double> valueVec; std::vector<double> valueVec;

View file

@ -35,8 +35,10 @@ Contact: paradiseo-help@lists.gforge.inria.fr
/** /**
* Incremental evaluation Function for the QAP problem * Incremental evaluation Function for the QAP problem
*
* ElemType is the type of elements in the matrix. This type must be signed and not unsigned.
*/ */
template< class Neighbor > template< class Neighbor, typename ElemType = long int >
class moQAPIncrEval : public moEval<Neighbor> class moQAPIncrEval : public moEval<Neighbor>
{ {
public: public:
@ -46,7 +48,7 @@ public:
* default constructor * default constructor
* @param _qapEval full evaluation of the QAP problem * @param _qapEval full evaluation of the QAP problem
*/ */
moQAPIncrEval(QAPeval<EOT> & _qapEval) { moQAPIncrEval(QAPeval<EOT, ElemType> & _qapEval) {
n = _qapEval.getNbVar(); n = _qapEval.getNbVar();
A = _qapEval.getA(); A = _qapEval.getA();
B = _qapEval.getB(); B = _qapEval.getB();
@ -58,7 +60,7 @@ public:
* @param _neighbor the neighbor to consider (of type moSwapNeigbor) * @param _neighbor the neighbor to consider (of type moSwapNeigbor)
*/ */
virtual void operator()(EOT & _solution, Neighbor & _neighbor) { virtual void operator()(EOT & _solution, Neighbor & _neighbor) {
int d; ElemType d;
int k; int k;
unsigned i = _neighbor.first(); unsigned i = _neighbor.first();
@ -81,10 +83,10 @@ private:
int n; int n;
// matrix A // matrix A
int ** A; ElemType ** A;
// matrix B // matrix B
int ** B; ElemType ** B;
}; };

View file

@ -71,6 +71,8 @@ public:
consecutiveTables(); consecutiveTables();
else else
randomTables(); randomTables();
generateTables();
}; };
/** /**
@ -365,6 +367,20 @@ protected:
} }
} }
/**
* To generate the tables:
* The component function is random
* each contribution is independent from the others ones
* and drawn from the distribution given by contribution()
*
*/
virtual void generateTables() {
for(int i = 0; i < N; i++) {
for(int j = 0; j < (1<<(K+1)); j++)
tables[i][j] = contribution();
}
}
/** /**
* To generate a contribution in the table f_i * To generate a contribution in the table f_i
* *
@ -386,10 +402,6 @@ protected:
for(int i = 0; i < N; i++) { for(int i = 0; i < N; i++) {
// random links to the bit // random links to the bit
choose(i, tabTirage); choose(i, tabTirage);
// table of contribution with random numbers from [0,1)
for(int j = 0; j < (1<<(K+1)); j++)
tables[i][j] = contribution();
} }
} }
@ -403,10 +415,6 @@ protected:
for(int i = 0; i < N; i++) { for(int i = 0; i < N; i++) {
// consecutive link to bit i // consecutive link to bit i
consecutiveLinks(i); consecutiveLinks(i);
// table of contribution with random numbers from [0,1)
for(int j = 0; j < (1<<(K+1)); j++)
tables[i][j] = contribution();
} }
} }

View file

@ -53,6 +53,7 @@ public:
using nkLandscapesEval<EOT>::loadTables; using nkLandscapesEval<EOT>::loadTables;
using nkLandscapesEval<EOT>::consecutiveTables; using nkLandscapesEval<EOT>::consecutiveTables;
using nkLandscapesEval<EOT>::randomTables; using nkLandscapesEval<EOT>::randomTables;
using nkLandscapesEval<EOT>::generateTables;
// parameter p : probability to have the contribution to zero, otherwise random number from [0,1) // parameter p : probability to have the contribution to zero, otherwise random number from [0,1)
double p; double p;
@ -79,6 +80,8 @@ public:
consecutiveTables(); consecutiveTables();
else else
randomTables(); randomTables();
generateTables();
} }
/** /**

View file

@ -53,6 +53,7 @@ public:
using nkLandscapesEval<EOT>::loadTables; using nkLandscapesEval<EOT>::loadTables;
using nkLandscapesEval<EOT>::consecutiveTables; using nkLandscapesEval<EOT>::consecutiveTables;
using nkLandscapesEval<EOT>::randomTables; using nkLandscapesEval<EOT>::randomTables;
using nkLandscapesEval<EOT>::generateTables;
// parameter q : number of different integer values in the table: [0..q[ // parameter q : number of different integer values in the table: [0..q[
unsigned q; unsigned q;
@ -78,6 +79,8 @@ public:
consecutiveTables(); consecutiveTables();
else else
randomTables(); randomTables();
generateTables();
} }
/** /**

View file

@ -34,11 +34,14 @@ Contact: paradiseo-help@lists.gforge.inria.fr
/** /**
* Full evaluation Function for QAP problem * Full evaluation Function for QAP problem
*
* ElemType is the type of elements in the matrix. This type must be signed and not unsigned.
*/ */
template< class EOT > template< class EOT, typename ElemType = long int >
class QAPeval : public eoEvalFunc<EOT> class QAPeval : public eoEvalFunc<EOT>
{ {
public: public:
//typedef typename EOT::Fitness ElemType ;
/* /*
* Constructor from instance file * Constructor from instance file
@ -56,18 +59,18 @@ public:
unsigned i, j; unsigned i, j;
file >> n; file >> n;
A = new int *[n]; A = new ElemType *[n];
B = new int *[n]; B = new ElemType *[n];
for(i = 0; i < n; i++) { for(i = 0; i < n; i++) {
A[i] = new int[n]; A[i] = new ElemType[n];
for(j = 0; j < n; j++) { for(j = 0; j < n; j++) {
file >> A[i][j]; file >> A[i][j];
} }
} }
for(i = 0; i < n; i++) { for(i = 0; i < n; i++) {
B[i] = new int[n]; B[i] = new ElemType[n];
for(j = 0; j < n; j++) for(j = 0; j < n; j++)
file >> B[i][j]; file >> B[i][j];
} }
@ -100,7 +103,7 @@ public:
* @param _solution the solution to evaluate * @param _solution the solution to evaluate
*/ */
void operator()(EOT & _solution) { void operator()(EOT & _solution) {
int cost = 0; ElemType cost = 0;
for (int i = 0; i < n; i++) for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++) for (int j = 0; j < n; j++)
@ -114,7 +117,7 @@ public:
* *
* @return matrix A * @return matrix A
*/ */
int** getA() { ElemType** getA() {
return A; return A;
} }
@ -123,7 +126,7 @@ public:
* *
* @return matrix B * @return matrix B
*/ */
int** getB() { ElemType** getB() {
return B; return B;
} }
@ -141,10 +144,10 @@ private:
int n; int n;
// matrix A // matrix A
int ** A; ElemType ** A;
// matrix B // matrix B
int ** B; ElemType ** B;
}; };