#pragma implementation

#include "hpg.h"
#include "indiv.h"


double indiv::objective_score(){
  return -1;
}

indiv *indiv::generate_new(){
  return new indiv(main);
}

indiv *indiv::copy(bool copy_outcomes){
  indiv *o=(indiv*)indiv::copy(copy_outcomes);
  
  for (unsigned int i=0;i<main->nodims;i++)
      o->values[i]=values[i];

  return o;
}

void indiv::getvalues(){
  //get ordered bit settings
  module *mod;
  unsigned int mnr=0, index, vind;

  vars.clear();
  vals.clear();

  for (unsigned int i=0;i<main->n;i++){
    vars.push_back(i);//assume indiv represents 0..n-1
    vals.push_back(-1);
  }

  for (vector<module*>::iterator mit=modules.begin();mit!=modules.end();mit++){
    mod=*mit;
    index=*(valindex.begin()+mnr);
    vector<int> &values=*(mod->optvalues.begin()+index);
    vector<int>::iterator vit=values.begin();
    for (vector<int>::iterator it=mod->vars.begin();it!=mod->vars.end();it++){
      vind=*it;
      *(vals.begin()+vind)=*vit;
      vit++;
    }
    mnr++;
  }
}

void indiv::initialize(){
  for (unsigned int i=0;i<main->nodims;i++)
      values[i]=(int)round(myrand());  
}

indiv::indiv(hpg *hpgp) {
  main=hpgp;
  values = new int[main->nodims];
  for (unsigned int i=0;i<main->nodims;i++)
    values[i]=0;    
}

indiv::~indiv(){    
  delete [] values;
}



