Update type of elements in QAP eval and QAP incrEval
This commit is contained in:
parent
dbb8fbe9a7
commit
c9475c4ed0
6 changed files with 79 additions and 32 deletions
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue