00001 #include "GeneralPopulation.h"
00002 #include "VecMat.h"
00003 using namespace std;
00004 GeneralPopulation::GeneralPopulation(const int popsize, const int genesize):
00005 Probabilities(popsize),
00006 CrowdingDistances(popsize),
00007 Population(popsize,genesize)
00008 {
00009 OldStored = false;
00010 }
00011
00012 GeneralPopulation::~GeneralPopulation()
00013 {}
00014
00015 GeneralPopulation::GeneralPopulation(GeneralPopulation &Old):
00016 OldPopulation(Old.OldPopulation),
00017 Probabilities(Old.Probabilities),
00018 CrowdingDistances(Old.CrowdingDistances),
00019 Population(Old.Population)
00020 {
00021 OldStored = Old.OldStored;
00022 }
00023
00024 GeneralPopulation::GeneralPopulation(const tpopulation &FirstHalf, const tpopulation &SecondHalf):
00025 OldPopulation(FirstHalf.size1()+SecondHalf.size1(),FirstHalf.size2()),
00026 Probabilities(FirstHalf.size1()+SecondHalf.size1()),
00027 CrowdingDistances(FirstHalf.size1()+SecondHalf.size1()),
00028 Population(FirstHalf.size1()+SecondHalf.size1(),FirstHalf.size2())
00029 {
00030 OldStored = false;
00031 ublas::matrix_range<tpopulation> PopFirstHalf(Population, ublas::range(0,FirstHalf.size1()), ublas::range(0,FirstHalf.size2()));
00032 ublas::matrix_range<tpopulation> PopSecondHalf(Population, ublas::range(FirstHalf.size1(),FirstHalf.size1()+SecondHalf.size1()),
00033 ublas::range(0,FirstHalf.size2()));
00034 PopFirstHalf = FirstHalf;
00035 PopSecondHalf = SecondHalf;
00036 }
00037
00038 GeneralPopulation& GeneralPopulation::operator=(const GeneralPopulation &source)
00039 {
00040 if (this != &source)
00041 {
00042 OldPopulation = source.OldPopulation;
00043 Population = source.Population;
00044 Probabilities = source.Probabilities;
00045 CrowdingDistances = source.CrowdingDistances;
00046 }
00047 return *this;
00048 }
00049
00050 void GeneralPopulation::PrintPopulation(ostream &output) const
00051 {
00052 const int popsize = Population.size1();
00053 const int genesize = Population.size2();
00054 int i,j;
00055 output << popsize << " " << genesize << endl;
00056 for (i = 0; i < popsize; ++i)
00057 {
00058 for (j = 0; j < genesize; ++j)
00059 output << Population(i,j) << " ";
00060 output << endl;
00061 }
00062 }
00063 void GeneralPopulation::ResizePop(const int popsize, const int genesize)
00064 {
00065 OldPopulation.resize(popsize,genesize);
00066 Population.resize(popsize,genesize);
00067 Probabilities.resize(popsize);
00068 CrowdingDistances.resize(popsize);
00069 }
00070
00071 void GeneralPopulation::ReadPopulation(std::istream &input)
00072 {
00073 unsigned int popsize, genesize, dummy;
00074 unsigned int i,j;
00075
00076 input >> popsize >> genesize;
00077 ResizePop(popsize,genesize);
00078 for (i = 0; i < popsize; ++i)
00079 {
00080 for (j = 0; j < genesize; ++j)
00081 {
00082 input >> dummy;
00083 Population(i,j) = (dummy == 1);
00084 }
00085 }
00086 }
00087 void GeneralPopulation::PrintProbabilities(std::ostream &output) const
00088 {
00089 for (unsigned int i = 0; i < Probabilities.size(); ++i)
00090 {
00091 output << Probabilities(i) << " ";
00092 }
00093 output << endl;
00094 }
00095
00096 void GeneralPopulation::PrintDistances(std::ostream &output) const
00097 {
00098 for (unsigned int i = 0; i < CrowdingDistances.size(); ++i)
00099 {
00100 output << CrowdingDistances(i) << " ";
00101 }
00102 output << endl;
00103 }