Moved the static eoRNG rng to an extern eoRNG

This external object is now defined in eoPersistent.cpp

This should change...
This commit is contained in:
mac 2000-02-19 16:30:42 +00:00
commit 2443677f13
12 changed files with 257 additions and 227 deletions

View file

@ -28,6 +28,14 @@
#ifndef COMPAT_H
#define COMPAT_H
#include <string>
#include <iostream>
#ifdef _1__GNUC__
// Specifics for GNUC
#define NO_GOOD_ISTREAM_ITERATORS
#endif
#ifdef _MSC_VER
/*
Maarten: added this code here because Mirkosoft has the

View file

@ -43,7 +43,7 @@ template <class EOT> class eoDetTournament: public eoSelectOne<EOT>
{
public:
/// (Default) Constructor.
eoDetTournament(unsigned _Tsize = 2 ):eoSelectOne(), Tsize(_Tsize) {
eoDetTournament(unsigned _Tsize = 2 ):eoSelectOne<EOT>(), Tsize(_Tsize) {
// consistency check
if (Tsize < 2) {
cout << "Warning, Tournament size should be >= 2\nAdjusted\n";

View file

@ -45,6 +45,8 @@ class eoGOpSelector: public eoOpSelector<EOT>, public vector<eoGeneralOp<EOT>*>
{
public:
typedef eoOpSelector<EOT>::ID ID;
/// Dtor
virtual ~eoGOpSelector() {
for ( list< eoGeneralOp<EOT>* >::iterator i= ownOpList.begin();
@ -84,12 +86,12 @@ public:
virtual string className() const { return "eoGOpSelector"; };
///
void printOn(ostream& _os) const {
_os << className() << endl;
for ( unsigned i=0; i!= rates.size(); i++ ) {
_os << *(operator[](i)) << "\t" << rates[i] << endl;
}
}
void printOn(ostream& _os) const {}
// _os << className().c_str() << endl;
// for ( unsigned i=0; i!= rates.size(); i++ ) {
// _os << *(operator[](i)) << "\t" << rates[i] << endl;
// }
//}
const vector<float>& getRates(void) const { return rates; }

View file

@ -30,8 +30,7 @@
#ifndef eoInserter_h
#define eoInserter_h
#include "eoObject.h"
#include "eoPop.h"
/**
* eoInserter: Interface class that enables an operator to insert
new individuals into the (intermediate) population.

View file

@ -79,7 +79,7 @@ public:
* @param _os A ostream.
*/
virtual void printOn(ostream& _os) const {
_os << className();
_os << className().c_str();
// _os << arity;
};

View file

@ -8,3 +8,7 @@ istream & operator >> ( istream& _is, eoPersistent& _o ) {
_o.readFrom(_is);
return _is;
};
#include "eoRNG.h"
eoRng rng;

View file

@ -31,6 +31,7 @@
// EO includes
#include <eoRnd.h>
#include <eoPersistent.h>
#include <eoEvalFunc.h>
/** Subpopulation: it is used to move parts of population
from one algorithm to another and one population to another. It is safer
@ -90,6 +91,21 @@ class eoPop: public vector<EOT>, public eoObject, public eoPersistent {
}
};
/** Ctor for fixed-size chromosomes, with variable content
@param _popSize total population size
@param _eoSize chromosome size. EOT should accept a fixed-size ctor
@param _geneRdn random number generator for each of the genes
*/
eoPop( unsigned _popSize, unsigned _eoSize, eoRnd<Type> & _geneRnd, eoEvalFunc<EOT>& _eval)
:vector<EOT>() {
for ( unsigned i = 0; i < _popSize; i ++ ){
EOT tmpEOT( _eoSize, _geneRnd);
push_back( tmpEOT );
_eval(back());
}
};
/** Ctor from an istream; reads the population from a stream,
each element should be in different lines
@param _is the stream

View file

@ -60,6 +60,7 @@ public:
modified or whatever
@param _id a previously assigned ID
@throw runtime_error if the ID does not exist*/
virtual eoOp<EOT>& getOp( ID _id ) {
MMF::iterator i=begin();
ID j = 1;
@ -135,7 +136,7 @@ public:
base classes, so you don´t have to worry about, for instance, fitness.
@param _s the ostream in which things are written*/
virtual void printOn( ostream& _s ) const{
_s << className() << endl;
_s << className().c_str() << endl;
for ( MMF::const_iterator i=begin(); i!=end(); i++ ) {
_s << i->first << "\t" << *(i->second )<< endl;
}

View file

@ -197,7 +197,7 @@ public :
{
if (total == 0)
{ // count
for (unsigned i = 0; i < vec.size(); ++i)
for (int i = 0; i < vec.size(); ++i)
total += vec[i];
}
@ -270,7 +270,7 @@ private :
/**
The one and only global eoRng object
*/
static eoRng rng;
extern eoRng rng;
/**
The class uniform_generator can be used in the STL generate function

View file

@ -44,7 +44,7 @@ template<class EOT> class eoSteadyStateEA: public eoAlgo<EOT>
eoGOpSelector<EOT>& _opSelector,
eoPopIndiSelector<EOT>& _selector,
eoSteadyStateInserter<EOT>& _inserter,
eoTerm<Chrom>& _terminator,
eoTerm<EOT>& _terminator,
unsigned _steps = 0 )
: step(_opSelector, _selector, _inserter),
terminator( _terminator)
@ -57,19 +57,20 @@ template<class EOT> class eoSteadyStateEA: public eoAlgo<EOT>
terminator( _terminator){};
/// Apply one generation of evolution to the population.
virtual void operator()(eoPop<Chrom>& pop) {
virtual void operator()(eoPop<EOT>& pop) {
do {
try
{
step(pop);
}
catch (exception& e)
catch (exception& e)
{
string s = e.what();
s.append( " in eoSteadyStateEA ");
throw runtime_error( s );
}
} while ( terminator( pop ) );
}
/// Class name.

View file

@ -43,7 +43,7 @@ template <class EOT> class eoUniformSelect: public eoSelectOne<EOT>
{
public:
/// (Default) Constructor.
eoUniformSelect():eoSelectOne() {}
eoUniformSelect():eoSelectOne<EOT>() {}
/// not a big deal!!!
virtual const EOT& operator()(const eoPop<EOT>& pop) {

View file

@ -144,7 +144,6 @@ public :
}
/// Helper class to make sure that stuff that is inserted will be used again with the next operator
template <class EOT>
class eoIndiSelectorInserter : public eoIndiSelector<EOT>, public eoInserter<EOT>
{
public :
@ -204,7 +203,7 @@ public :
void operator()( eoIndiSelector<EOT>& _in,
eoInserter<EOT>& _out ) const {
eoIndiSelectorInserter<EOT> in_out(_in);
eoIndiSelectorInserter in_out(_in);
for (size_t i = 0; i < ops.size(); ++i)
{