Small modifications here and there to be MSVC++ compatible

Mainly, time.h -> ctime
        definition of loop index out of loops when multiply used
        no typename in declaration using template typename
This commit is contained in:
evomarc 2001-11-10 09:02:17 +00:00
commit d7c3d973c7
14 changed files with 56 additions and 27 deletions

View file

@ -27,7 +27,7 @@
#ifndef _make_pop_h
#define _make_pop_h
#include <sys/time.h> // for time(0) for random seeding
#include <ctime> // for time(0) for random seeding
#include <eoPop.h>
#include <eoInit.h>
#include <utils/eoRNG.h>

View file

@ -42,6 +42,9 @@
template <class EOT>
class eoDistribUpdater :
public eoBF<eoDistribution<EOT> &, eoPop<EOT> &, void>
{};
{
public:
virtual void operator()(eoDistribution<EOT> &, eoPop<EOT> &)=0;
};
#endif

View file

@ -37,7 +37,11 @@
@see eoSelectMany, eoSelectRandom, eoDetTournament, eoStochTournament, eoProportional
*/
#ifdef _MSC_VER
template<class EOT, class WorthT = EOT::Fitness>
#else
template<class EOT, class WorthT = typename EOT::Fitness>
#endif
class eoSelectOne : public eoUF<const eoPop<EOT>&, const EOT&>
{
public :

View file

@ -99,10 +99,10 @@ private :
// Adaptive mutation through a whole correlation matrix
void create_self_adapt(eoEsFull<FitT>& result)
{
unsigned theSize = eoRealInitBounded<EOT>::size();
unsigned i, theSize = eoRealInitBounded<EOT>::size();
result.stdevs.resize(theSize);
for (unsigned i = 0; i < theSize; ++i)
for (i = 0; i < theSize; ++i)
{
// should we scale sigmas to the corresponding object variable range?
result.stdevs[i] = sigma;
@ -110,7 +110,7 @@ private :
// nb of rotation angles: N*(N-1)/2 (in general!)
result.correlations.resize(theSize*(theSize - 1) / 2);
for (unsigned i = 0; i < result.correlations.size(); ++i)
for (i = 0; i < result.correlations.size(); ++i)
{
// uniform in [-PI, PI)
result.correlations[i] = rng.uniform(2 * M_PI) - M_PI;

View file

@ -1,7 +1,7 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
//-----------------------------------------------------------------------------
// eoPBILDistrib.h
// eoPBILAdditive.h
// (c) Marc Schoenauer, Maarten Keijzer, 2001
/*
This library is free software; you can redistribute it and/or

View file

@ -61,9 +61,6 @@ public:
_eo.invalidate(); // DO NOT FORGET!!!
}
/** update method - still PURE VIRTUAL */
// virtual void update(eoPop<EOT>&) = 0; // update from a population
/** Accessor to the genome size */
unsigned Size() {return genomeSize;}

View file

@ -1,7 +1,7 @@
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-
//-----------------------------------------------------------------------------
// eoPBILDistrib.h
// eoPBILOrg.h
// (c) Marc Schoenauer, Maarten Keijzer, 2001
/*
This library is free software; you can redistribute it and/or
@ -31,7 +31,7 @@
/**
* Distribution Class for PBIL algorithm
* (Population-Based Incremental Learning, Baluja and Caruana 96)
* (Population-Based Incremental Learning, Baluja and Caruana 95)
*
* This class implements the update rule from the original paper:
*

View file

@ -53,10 +53,22 @@ eoPBILDistrib<EOT> & do_make_PBILdistrib(eoParser & _parser, eoState& _state, E
if (seedParam.value() == 0)
seedParam.value() = time(0);
// the representation dependent stuff
unsigned chromSize = _parser.createParam(unsigned(10), "chromSize", "The length of the bitstrings", 'n',"Algorithm").value();
eoPBILDistrib<EOT> * ptDistrib = new eoPBILDistrib<EOT>(chromSize);
// chromosome size:
unsigned theSize;
// but it might have been already read in the definition fo the performance
eoParam* ptParam = _parser.getParamWithLongName(string("chromSize"));
if (!ptParam) // not already defined: read it here
{
theSize = _parser.createParam(unsigned(10), "chromSize", "The length of the bitstrings", 'n',"Problem").value();
}
else // it was read before, get its value
{
eoValueParam<unsigned>* ptChromSize = dynamic_cast<eoValueParam<unsigned>*>(ptParam);
theSize = ptChromSize->value();
}
eoPBILDistrib<EOT> * ptDistrib = new eoPBILDistrib<EOT>(theSize);
_state.storeFunctor(ptDistrib);
// now the initialization: read a previously saved distribution, or random

View file

@ -63,11 +63,11 @@ eoInit<EOT> & do_make_genotype(eoParser& _parser, eoState& _state, EOT)
// for bitstring, only thing needed is the size
unsigned theSize;
// but it might have been already read in the definition fo the performance
eoParam* ptParam = _parser.getParamWithLongName(string("ChromSize"));
eoParam* ptParam = _parser.getParamWithLongName(string("chromSize"));
if (!ptParam) // not already defined: read it here
{
theSize = _parser.createParam(unsigned(10), "ChromSize", "The length of the bitstrings", 'n',"Problem").value();
theSize = _parser.createParam(unsigned(10), "chromSize", "The length of the bitstrings", 'n',"Problem").value();
}
else // it was read before, get its value
{

View file

@ -239,16 +239,16 @@ template <>
void eoValueParam<std::vector<std::vector<double> > >::setValue(std::string _value)
{
std::istrstream is(_value.c_str());
unsigned sz;
unsigned i,j,sz;
is >> sz;
repValue.resize(sz);
for (unsigned i = 0; i < repValue.size(); ++i)
for (i = 0; i < repValue.size(); ++i)
{
unsigned sz2;
is >> sz2;
repValue[i].resize(sz2);
for (unsigned j = 0; j < sz2; ++j)
for (j = 0; j < sz2; ++j)
{
is >> repValue[i][j];
}

View file

@ -82,8 +82,12 @@ public :
Average fitness of a population, fitness can be a double, eoMinimizingFitness, eoMaximizingFitness or eoParetoFitness.
In the case of pareto optimization it will calculate the average of each objective.
*/
template <class EOT>
class eoAverageStat : public eoStat<EOT, typename EOT::Fitness>
#ifdef _MSC_VER
template <class EOT> class eoAverageStat : public eoStat<EOT, EOT::Fitness>
#else
template <class EOT> class eoAverageStat : public eoStat<EOT, typename EOT::Fitness>
#endif
{
public :
typedef typename EOT::Fitness fitness_type;
@ -99,7 +103,11 @@ public :
virtual void operator()(const eoPop<EOT>& _pop)
{
#ifdef _MSC_VER
doit(_pop, EOT::Fitness()); // specializations for scalar and vector
#else
doit(_pop, typename EOT::Fitness()); // specializations for scalar and vector
#endif
}
private :
@ -248,17 +256,22 @@ public :
/**
Best fitness in the population
*/
#ifdef _MSC_VER
template <class EOT>
class eoBestFitnessStat : public eoStat<EOT, EOT::Fitness>
#else
template <class EOT>
class eoBestFitnessStat : public eoStat<EOT, typename EOT::Fitness>
#endif
{
public :
typedef typename EOT::Fitness Fitness;
eoBestFitnessStat(std::string _description = "Best ") : eoStat<EOT, typename EOT::Fitness>(typename EOT::Fitness(), _description) {}
eoBestFitnessStat(std::string _description = "Best ") : eoStat<EOT, Fitness>(Fitness(), _description) {}
void operator()(const eoPop<EOT>& _pop)
{
doit(_pop, typename EOT::Fitness());
doit(_pop, Fitness());
}
private :

View file

@ -116,7 +116,7 @@ void runAlgorithm(EOT, eoParser& _parser, eoState& _state)
// initialize the population - and evaluate
// yes, this is representation indepedent once you have an eoInit
eoPop<EOT>& pop = make_pop(_parser, _state, init);
apply(eval, pop);
apply<EOT>(eval, pop);
// stopping criteria
eoContinue<EOT> & term = make_continue(_parser, _state, eval);

View file

@ -52,7 +52,7 @@ int main(int argc, char* argv[])
//// GO
///////
// evaluate intial population AFTER help and status in case it takes time
apply(eval, pop);
apply<EOT>(eval, pop);
// print it out
cout << "Initial Population\n";
pop.sortedPrintOn(cout);

View file

@ -53,7 +53,7 @@ int main(int argc, char* argv[])
//// GO
///////
// evaluate intial population AFTER help and status in case it takes time
apply(eval, pop);
apply<EOT>(eval, pop);
// print it out
cout << "Initial Population\n";
pop.sortedPrintOn(cout);