00001 #include <iostream> 00002 #include "SimpleSelect.h" 00003 #include "BinaryTournamentSelect.h" 00004 #include "UniformRNG.h" 00005 #include "BinaryPopulation.h" 00006 #include "gentypes.h" 00007 using namespace std; 00008 #include <boost/numeric/ublas/io.hpp> 00009 #include <boost/function.hpp> 00010 #include <boost/bind.hpp> 00011 00012 const int popsize = 10; 00013 const int genesize =10; 00014 const tprobabilityv &SetProbabilities(const tprobabilityv &Probabilities) 00015 { 00016 return Probabilities; 00017 } 00018 00019 int main() 00020 { 00021 UniformRNG Random; 00022 00023 00024 tprobabilityv probabilities(popsize); 00025 BinaryPopulation Population(popsize,genesize,&Random); 00026 BinaryTournamentSelect Select(&Random,boost::bind(&GeneralPopulation::GetProbabilities,boost::ref(Population)), 00027 boost::bind(&GeneralPopulation::GetCrowdingDistances,boost::ref(Population))); 00028 tcrowddistv distances(popsize); 00029 double sum=0; 00030 const double fixed = Random.GetNumber(); 00031 00032 for (int i = 0; i < popsize/2; ++i) 00033 { 00034 probabilities(i) = fixed; 00035 distances(i) = Random.GetNumber(); 00036 sum += probabilities(i); 00037 } 00038 for (int i = popsize/2; i < popsize; ++i) 00039 { 00040 probabilities(i) = Random.GetNumber(); 00041 distances(i) = Random.GetNumber(); 00042 sum += probabilities(i); 00043 } 00044 cout <<"Input Probabilities: "; 00045 for (int i = 0; i < popsize; ++i) 00046 { 00047 probabilities(i) /= sum; 00048 cout << probabilities(i) << " "; 00049 } 00050 cout << endl; 00051 cout <<"Input Distances: "; 00052 cout << distances; 00053 cout << endl; 00054 Population.SetProbabilities(probabilities); 00055 Population.SetCrowdingDistances(distances); 00056 Select.Init(); 00057 for (int i = 0; i < popsize; ++i) 00058 { 00059 cout << probabilities(i) << " " << Select.GetOne() << endl; 00060 } 00061 00062 }
1.5.5