Main Page | Namespace List | Class Hierarchy | Compound List | File List | Compound Members | File Members

BinaryGene.cpp

Go to the documentation of this file.
00001 /*
00002  * @file    BinaryGene.h
00003  * @author  Antonio Jesus Nebro Urbaneja
00004  * @version 1.0
00005  * @date    29 January 2004
00006  * @brief   Class representing a binary gene
00007  */
00008  
00009 #include <BinaryGene.h>
00010 
00017 BinaryGene::BinaryGene(int numberOfBits, Random * random) : 
00018             Gene(BINARY, random) {
00019   int i ;
00020   
00021   numberOfBits_ = numberOfBits           ;
00022   allele_       = new char[numberOfBits] ;
00023   
00024   if (allele_ == NULL) {
00025     cerr << "BinaryGene::BinaryGene-> Error when asking for memory" << endl ;
00026     exit(-1) ;
00027   } // if
00028   
00029   for (i = 0; i < numberOfBits; i++)
00030     if (random_->rnd(0,1) == 1)
00031       allele_[i] = '1' ;
00032     else
00033       allele_[i] = '0' ;
00034 
00035 } // BinaryGene::BinaryGene
00036 
00043 BinaryGene::BinaryGene(BinaryGene & binaryGene) : Gene(binaryGene) {
00044   int i ;
00045   
00046   numberOfBits_= binaryGene.numberOfBits_ ;
00047   allele_      = new char[numberOfBits_] ;
00048 
00049   if (allele_ == NULL) {
00050     cerr << "BinaryGene::BinaryGene-> Error when asking for memory" << endl ;
00051     exit(-1) ;
00052   } // if
00053 
00054   for (i = 0; i < numberOfBits_; i++)
00055     allele_[i] = binaryGene.allele_[i] ;  
00056 
00057 } // BinaryGene::BinaryGene
00058 
00065 BinaryGene::BinaryGene(BinaryGene * binaryGene) : Gene(binaryGene) {
00066   int i ;
00067   
00068   numberOfBits_= binaryGene->numberOfBits_ ;
00069   allele_      = new char[numberOfBits_] ;
00070 
00071   if (allele_ == NULL) {
00072     cerr << "BinaryGene::BinaryGene-> Error when asking for memory" << endl ;
00073     exit(-1) ;
00074   } // if
00075 
00076   for (i = 0; i < numberOfBits_; i++)
00077     allele_[i] = binaryGene->allele_[i] ;  
00078 } // BinaryGene::BinaryGene
00079 
00085 BinaryGene::~BinaryGene() {
00086   delete [] allele_ ;
00087 } // BinaryGene::~BinaryGene
00088 
00089 
00090 int BinaryGene::bitFlipMutation(double mutationProbability) {
00091   int mutations ;
00092   int i         ;
00093   
00094   mutations = 0 ;
00095 
00096   for (int i = 0; i < numberOfBits_ ; i++)
00097     if (random_->flip(mutationProbability) == 1) {
00098       mutations ++ ;
00099       if (allele_[i] == '1')
00100         allele_[i] = '0' ;
00101       else
00102         allele_[i] = '1' ;
00103     } //if
00104     
00105   return mutations ;
00106 } // BinaryGene::bitFlipMutation
00107 
00108 void BinaryGene::writeGenotype(ofstream& outputFile) {
00109   int i ;
00110 //  cout << "number of bits: " << numberOfBits_ << endl ;
00111   for (i = 0 ; i < numberOfBits_; i++)
00112     if (allele_[i] == '1')
00113       outputFile << "1" ;
00114     else
00115       outputFile << "0" ;
00116 } // BinaryGene::writeGenotype
00117 
00118 BinaryGene & BinaryGene::operator=(const BinaryGene& binaryGene) {
00119   int i ;
00120   numberOfBits_= binaryGene.numberOfBits_ ;
00121   for (i = 0; i < numberOfBits_; i++)
00122     allele_[i] = binaryGene.allele_[i] ;  
00123   
00124   return *this ;
00125 } // BinaryGene::operator=
00126 
00127 
00128 ostream& operator<< (ostream& outputStream, BinaryGene& gene) {
00129   int i ;
00130   
00131   outputStream << (Gene&)gene << " Bits: " << gene.numberOfBits_ << " allele: " ;
00132   for (i = 0 ; i < gene.numberOfBits_; i++)
00133     if (gene.allele_[i] == '1')
00134       outputStream << "1" ;
00135     else
00136       outputStream << "0" ;
00137 } // operator<< 
00138 

Generated on Wed Feb 11 10:38:00 2004 for Paes by doxygen 1.3.3