ometah-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[oMetah-devel] ometah ./ometah.pws common/itsPoint.cpp common/...


From: Johann
Subject: [oMetah-devel] ometah ./ometah.pws common/itsPoint.cpp common/...
Date: Thu, 26 May 2005 13:15:06 -0400

CVSROOT:        /cvsroot/ometah
Module name:    ometah
Branch:         
Changes by:     Johann <address@hidden> 05/05/26 17:15:06

Modified files:
        .              : ometah.pws 
        common         : itsPoint.cpp itsPoint.hpp 
        interface      : ometah.cpp 
        metaheuristic  : itsEstimationOfDistribution.cpp 
                         itsMetaheuristic.cpp 

Log message:
        * add some exceptions
        * add a function to print samples

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/ometah/ometah/ometah.pws.diff?tr1=1.13&tr2=1.14&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/ometah/ometah/common/itsPoint.cpp.diff?tr1=1.3&tr2=1.4&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/ometah/ometah/common/itsPoint.hpp.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/ometah/ometah/interface/ometah.cpp.diff?tr1=1.14&tr2=1.15&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/ometah/ometah/metaheuristic/itsEstimationOfDistribution.cpp.diff?tr1=1.13&tr2=1.14&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/ometah/ometah/metaheuristic/itsMetaheuristic.cpp.diff?tr1=1.13&tr2=1.14&r1=text&r2=text

Patches:
Index: ometah/common/itsPoint.cpp
diff -u ometah/common/itsPoint.cpp:1.3 ometah/common/itsPoint.cpp:1.4
--- ometah/common/itsPoint.cpp:1.3      Thu May 26 08:55:43 2005
+++ ometah/common/itsPoint.cpp  Thu May 26 17:15:06 2005
@@ -1,5 +1,5 @@
 /***************************************************************************
- * $Id: itsPoint.cpp,v 1.3 2005/05/26 08:55:43 nojhan Exp $
+ * $Id: itsPoint.cpp,v 1.4 2005/05/26 17:15:06 nojhan Exp $
  * Author : Johann Dréo <address@hidden>
  ****************************************************************************/
 
@@ -18,10 +18,14 @@
  *  along with this program; if not, write to the Free Software
  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  */
+
 #include <iostream>
-using namespace std;
+#include <sstream>
+
 #include "itsPoint.hpp"
 
+using namespace std;
+
 //! Get the solution vector
 vector<double> itsPoint::getSolution()
 {
@@ -99,3 +103,36 @@
         return res;
     }
 }
+
+string printValues( vector<itsPoint> vec, int dimension, const char* 
separatorDimension, const char* separatorPoint )
+{
+    if( vec.size() <= 0 ) {
+        throw "ErrorSize: cannot print an empty vector";
+    
+    } else {
+        if ( vec[0].getValues().size()<=0 || dimension > (signed 
int)vec[0].getValues().size() ) {
+            throw "ErrorSize: cannot print a vector of empty points";
+        }
+    }
+
+    ostringstream res;
+
+    if(dimension>-1) { // if we want a specific dimension
+        res << vec[0].getValues()[dimension];
+        for(unsigned int i=1; i<vec.size(); i++) { // points
+            res << separatorDimension << vec[i].getValues()[dimension];
+        }
+    
+    } else { // if we want all dimensions
+        
+        res << vec[0].getValues()[0];
+        for(unsigned int i=1; i<vec.size(); i++) { // points
+            res << vec[i].getValues()[0];
+            for(unsigned int j=1; j<vec[i].getValues().size(); j++) { // 
dimensions
+                res << separatorDimension << vec[i].getValues()[j];
+            }
+            res << separatorPoint;
+        }
+    }
+    return res.str();
+}
Index: ometah/common/itsPoint.hpp
diff -u ometah/common/itsPoint.hpp:1.6 ometah/common/itsPoint.hpp:1.7
--- ometah/common/itsPoint.hpp:1.6      Thu May 26 08:55:43 2005
+++ ometah/common/itsPoint.hpp  Thu May 26 17:15:06 2005
@@ -1,5 +1,5 @@
 /***************************************************************************
- * $Id: itsPoint.hpp,v 1.6 2005/05/26 08:55:43 nojhan Exp $
+ * $Id: itsPoint.hpp,v 1.7 2005/05/26 17:15:06 nojhan Exp $
  * Author :  Walid TFAILI <address@hidden>
  ****************************************************************************/
 
@@ -68,4 +68,16 @@
 */
 vector<itsPoint> sortOnValues(vector<itsPoint> vec, int dimension);
 
+
+//! Print the values of a point
+/*!
+    If a dimension is given, it print only values for this dimension.
+    Else, it print all values.
+    By default :
+|11 12 13|
+|21 22 23| => 11,12,13  21,22,23  31,32,33
+|31 32 33|
+*/
+string printValues( vector<itsPoint> vec, int dimension=-1, const char* 
separatorDimension=",", const char* separatorPoint="  " );
+
 #endif
Index: ometah/interface/ometah.cpp
diff -u ometah/interface/ometah.cpp:1.14 ometah/interface/ometah.cpp:1.15
--- ometah/interface/ometah.cpp:1.14    Thu May 26 08:55:43 2005
+++ ometah/interface/ometah.cpp Thu May 26 17:15:06 2005
@@ -1,5 +1,5 @@
 /***************************************************************************
- *  $Id: ometah.cpp,v 1.14 2005/05/26 08:55:43 nojhan Exp $
+ *  $Id: ometah.cpp,v 1.15 2005/05/26 17:15:06 nojhan Exp $
  *  Copyright : Université Paris 12 Val-de-Marne
  *  Author : Johann Dréo <address@hidden>
  ****************************************************************************/
@@ -148,10 +148,19 @@
     cout << "PROBLEM" << endl << setProblem.item()->getInformations();
     cout << endl;*/
     
-    setMetaheuristic.item()->setLogLevel(2);
+    setMetaheuristic.item()->addDebugKey("selectNumber");
+    setMetaheuristic.item()->setLogLevel(99);
     setMetaheuristic.item()->setSampleSize(3);
 
-    setMetaheuristic.item()->start();
+    try {
+        setMetaheuristic.item()->start();
+    }
+    catch(const char * str) {
+        cerr << str << endl;
+    }
+    catch (...) {
+        cerr << "Unknown error" << endl;
+    }
 
     
     
Index: ometah/metaheuristic/itsEstimationOfDistribution.cpp
diff -u ometah/metaheuristic/itsEstimationOfDistribution.cpp:1.13 
ometah/metaheuristic/itsEstimationOfDistribution.cpp:1.14
--- ometah/metaheuristic/itsEstimationOfDistribution.cpp:1.13   Thu May 26 
08:55:43 2005
+++ ometah/metaheuristic/itsEstimationOfDistribution.cpp        Thu May 26 
17:15:06 2005
@@ -1,5 +1,5 @@
 /***************************************************************************
- *  $Id: itsEstimationOfDistribution.cpp,v 1.13 2005/05/26 08:55:43 nojhan Exp 
$
+ *  $Id: itsEstimationOfDistribution.cpp,v 1.14 2005/05/26 17:15:06 nojhan Exp 
$
  *  Author : Johann Dréo <address@hidden>
  ****************************************************************************/
 
@@ -24,6 +24,7 @@
 #include <iostream>
 #include <vector>
 #include <algorithm>
+#include <cmath>
 
 #include "itsEstimationOfDistribution.hpp"
 #include "../common/matrix.hpp"
@@ -81,7 +82,7 @@
 
     // verify that we have the correct dimension
     if( transposedSimplifiedSample.size() != (unsigned 
int)this->problem->getDimension() ) {
-        throw "ErrorSize";
+        throw "ErrorSize: transposed matrix does not correspond to dimension";
     }
 
     // find the minimum and the maximum for each dimension  
@@ -94,18 +95,35 @@
  
 void itsEstimationOfDistribution::diversification()
 {
+    // erase all
+    sample.clear();
+
     // draw each point in an hyper cube
     for( unsigned int i=0; i < getSampleSize(); i++) {
         // draw solution
-        sample[i].setSolution( randomUniform(this->parameterUniformMinima, 
this->parameterUniformMaxima) );
+        itsPoint p;
+        p.setSolution( randomUniform(this->parameterUniformMinima, 
this->parameterUniformMaxima) );
         // get values
-        sample[i] = this->problem->call(sample[i]);
+        sample.push_back( this->problem->call(p) );
     }
 }
 
 void itsEstimationOfDistribution::intensification()
 {
-    vector<itsPoint> sortedSample = sortOnValues(this->sample,0);
+    // sort the sample
+    this->sample = sortOnValues(this->sample,0);
+
+    // get the best points
+    int selectNumber = (int) floor( (double)this->sample.size() * 
this->selectRatio);
+    printDebug("selectNumber",selectNumber);
+
+    vector<itsPoint> bests(this->sample.begin(), this->sample.begin() + 
selectNumber );
+    
+    if(bests.size()<=0) {
+        throw "ErrorSize: no more points left after selection";
+    }
+
+    this->sample = bests;
 }
 
 string itsEstimationOfDistribution::getDistribution()
Index: ometah/metaheuristic/itsMetaheuristic.cpp
diff -u ometah/metaheuristic/itsMetaheuristic.cpp:1.13 
ometah/metaheuristic/itsMetaheuristic.cpp:1.14
--- ometah/metaheuristic/itsMetaheuristic.cpp:1.13      Thu May 26 08:55:43 2005
+++ ometah/metaheuristic/itsMetaheuristic.cpp   Thu May 26 17:15:06 2005
@@ -30,6 +30,7 @@
 #include <cstdlib>
 #include "itsMetaheuristic.hpp"
 #include "../common/random.hpp"
+#include "../common/itsPoint.hpp"
 #include "../problem/itsProblem.hpp"
 #include "../communication/itsCommunicationClient.hpp"
  
@@ -82,6 +83,7 @@
   this->logKeys["communications"] = 2;
   this->logKeys["instanciations"] = 2;
   this->logKeys["iterations"] = 2;
+  this->logKeys["sample_step"] = 3;
 
 }
 
@@ -105,16 +107,30 @@
 
 void itsMetaheuristic::start()
 {
+  printLog("steps","initialization");
   initialization();
 
   // no iterations has been computed
   iterationsCurrent=0;
 
+
+  // log
+  ostringstream msg1;
+  msg1 << "iteration " << iterationsCurrent;
+  printLog("iterations", msg1.str() );
+  printLog("sample_steps", printValues( this->sample ) );
+
   // while no stopping criterion reached
   while( !isStoppingCriteria() ) {
+  
     // main phases
+    printLog("steps","learning");
     learning();
+    
+    printLog("steps","diversification");
     diversification();
+  
+    printLog("steps","intensification");
     intensification();
     
     // one more iteration
@@ -124,6 +140,8 @@
     ostringstream msg;
     msg << "iteration " << iterationsCurrent;
     printLog("iterations", msg.str() );
+    printLog("sample_steps", printValues( this->sample ) );
+
   }
 }
 
@@ -241,9 +259,8 @@
 void itsMetaheuristic::setSampleSize(unsigned int size)
 {
     this->sampleSize = size;
-    // WARNING : changing the size cause the vector to be reinitialized
-    this->sample.erase( this->sample.begin(), this->sample.end() );
-    this->sample.reserve( this->sampleSize );
+    // WARNING : changing the size may cause data loss or null points
+    this->sample.resize(size);
 }
 
 
Index: ometah/ometah.pws
diff -u ometah/ometah.pws:1.13 ometah/ometah.pws:1.14
--- ometah/ometah.pws:1.13      Thu May 26 08:55:43 2005
+++ ometah/ometah.pws   Thu May 26 17:15:06 2005
@@ -1,10 +1,10 @@
 
 [filenumbers]
-0=108
+0=122
 1=1
-2=84
-3=67
-4=153
+2=113
+3=81
+4=162
 5=27
 6=1
 7=56
@@ -32,7 +32,7 @@
 
 [filelist]
 
0=/home/nojhan/travail/openMetaheuristic/source/ometah/metaheuristic/itsEstimationOfDistribution.cpp
-1=/home/nojhan/travail/openMetaheuristic/source/ometah/metaheuristic/itsEstimationOfDistribution.hpp
+1=/home/nojhan/travail/openMetaheuristic/source/ometah/metaheuristic/itsMetaheuristic.cpp
 2=/home/nojhan/travail/openMetaheuristic/source/ometah/common/itsPoint.cpp
 3=/home/nojhan/travail/openMetaheuristic/source/ometah/common/itsPoint.hpp
 4=/home/nojhan/travail/openMetaheuristic/source/ometah/interface/ometah.cpp




reply via email to

[Prev in Thread] Current Thread [Next in Thread]