[avida-cvs] avida CVS commits: /current/source/main Makefile.am genebank.cc genebank.hh
wisnelaw
avida-cvs at alife.org
Fri Aug 1 00:03:36 PDT 2003
wisnelaw Thu Jul 31 16:03:36 2003 EDT
Modified files:
/avida/current/source/main Makefile.am genebank.cc genebank.hh
Log:
fixed a few bugs in previous commit.
-law
-------------- next part --------------
Index: avida/current/source/main/Makefile.am
diff -u avida/current/source/main/Makefile.am:1.30 avida/current/source/main/Makefile.am:1.31
--- avida/current/source/main/Makefile.am:1.30 Thu Jul 31 15:34:27 2003
+++ avida/current/source/main/Makefile.am Thu Jul 31 16:03:35 2003
@@ -43,7 +43,6 @@
mutations.hh mutations.cc \
org_message.hh org_message.cc \
organism.hh organism.cc \
- parasite.hh parasite.cc \
phenotype.hh phenotype.cc \
population.hh population.cc \
population_cell.hh population_cell.cc \
Index: avida/current/source/main/genebank.cc
diff -u avida/current/source/main/genebank.cc:1.31 avida/current/source/main/genebank.cc:1.32
--- avida/current/source/main/genebank.cc:1.31 Thu Jul 31 15:34:27 2003
+++ avida/current/source/main/genebank.cc Thu Jul 31 16:03:35 2003
@@ -13,7 +13,6 @@
#include "genotype.hh"
#include "config.hh"
#include "stats.hh"
-#include "parasite.hh"
#include "../cpu/test_util.hh"
@@ -691,7 +690,6 @@
genotype_control = new cGenotypeControl(*this);
species_control = new cSpeciesControl(*this);
- parasite_control = new cParasiteControl(*this);
}
@@ -699,7 +697,6 @@
{
delete genotype_control;
delete species_control;
- delete parasite_control;
}
void cGenebank::UpdateReset()
@@ -1220,9 +1217,9 @@
return total;
}
-//void cGenebank::SpeciesTest(char * message, cGenotype & genotype)
-//{
- //cSpecies * cur_species = genotype.GetSpecies();
+void cGenebank::SpeciesTest(char * message, cGenotype & genotype)
+{
+ cSpecies * cur_species = genotype.GetSpecies();
// if (cur_species) {
// g_debug.Comment("UD %d: %s on genotype [%d] (size %d) of species [%d]",
@@ -1239,624 +1236,4 @@
// cur_species->GetID(), cur_species->GetNumGenotypes(),
// cur_species->GetNumThreshold(), cur_species->GetQueueType());
// }
-//}
-
-void cGenebank::AddParasite(cParasite * in_parasite, int in_list_num)
-{
- assert( in_parasite != 0 );
-
- if ( in_list_num < 0 )
- in_list_num = FindCRC(in_parasite->GetGenome()) % GENOTYPE_HASH_SIZE;
-
- active_parasites[in_list_num].Insert(*in_parasite);
- parasite_control->Insert(*in_parasite);
- //stats.AddParasite(in_parasite->GetID());
-
- // Speciation... If we are creating a new parasite here, we must
- // initilize it to the species of its parent parasite.
-
- cSpecies * parent_species = NULL;
- if ( in_parasite->GetParentParasite() != NULL) {
- parent_species = in_parasite->GetParentParasite()->GetSpecies();
- }
-
- //in_parasite->SetSpecies(parent_species);
- //if (parent_species != NULL) parent_species->AddParasite();
-}
-
-
-cParasite * cGenebank::AddParasite(const cGenome & in_genome,
- cParasite * parent_parasite)
-{
- int list_num = FindCRC(in_genome) % GENOTYPE_HASH_SIZE;
- cParasite * found_parasite;
-
- found_parasite = active_parasites[list_num].Find(in_genome);
-
- if (!found_parasite) {
- found_parasite = new cParasite(stats.GetUpdate());
- found_parasite->SetGenome(in_genome);
- found_parasite->SetParent(parent_parasite);
-
- AddParasite( found_parasite, list_num );
- /*
- active_parasites[list_num].Insert(*found_parasite);
- parasite_control->Insert(*found_parasite);
- stats.AddParasite(found_parasite->GetID());
-
- // Speciation... If we are creating a new parasite here, we must
- // initilize it to the species of its parent parasite.
-
- cSpecies * parent_species = NULL;
- if (parent_parasite != NULL) {
- parent_species = parent_parasite->GetSpecies();
- }
-
- found_parasite->SetSpecies(parent_species);
- if (parent_species != NULL) parent_species->AddParasite();
- */
- }
-
- return found_parasite;
-}
-
-cParasite * cGenebank::FindParasite(const cGenome & in_genome) const
-{
- int list_num = FindCRC(in_genome) % GENOTYPE_HASH_SIZE;
- return active_parasites[list_num].Find(in_genome);
-}
-
-void cGenebank::RemoveParasite(cParasite & in_parasite)
-{
- // If this parasite is still active, mark it no longer active and
- // take it out of the hash table so it doesn't have any new organisms
- // assigned to it.
-
- if (in_parasite.GetActive() == true) {
- int list_num = FindCRC(in_parasite.GetGenome()) % GENOTYPE_HASH_SIZE;
- active_parasites[list_num].Remove(in_parasite);
- parasite_control->Remove(in_parasite);
- in_parasite.Deactivate(stats.GetUpdate());
- if (cConfig::GetTrackMainLineage()) {
- parasite_control->InsertHistoric(in_parasite);
- }
- }
-
- // If we are tracking the main lineage, we only want to delete a
- // parasite when all of its decendents have also died out.
-
- if (cConfig::GetTrackMainLineage()) {
- // If there are more offspring parasites, hold off on deletion...
- if (in_parasite.GetNumOffspringParasites() != 0) return;
-
- // If this is a dead end, delete it and recurse up...
- cParasite * parent = in_parasite.GetParentParasite();
- if (parent != NULL) {
- parent->RemoveOffspringParasite();
-
- // Test to see if we need to update the coalescent parasite.
- const int new_coal = parasite_control->UpdateCoalescent();
- //stats.SetCoalescentParasiteDepth(new_coal);
- // cout << "Set coalescent to " << found_gen->GetDepth() << endl;
-
- if (parent->GetNumOrganisms() == 0) {
- // Regardless, run RemoveParasite on the parent.
- RemoveParasite(*parent);
- }
- }
-
- parasite_control->RemoveHistoric(in_parasite);
- }
-
- // Handle the relevent statistics...
- /* stats.RemoveParasite(in_parasite.GetID(),
- in_parasite.GetParentID(), in_parasite.GetParentDistance(),
- in_parasite.GetDepth(), in_parasite.GetTotalOrganisms(),
- in_parasite.GetTotalParasites(),
- stats.GetUpdate() - in_parasite.GetUpdateBorn(),
- in_parasite.GetLength());*/
- //if (in_parasite.GetThreshold()) {
- // stats.RemoveThreshold(in_parasite.GetID());
- //}
-
-
- // Speciation... If a Threshold parasite was removed, the position of this
- // species in the active list will at least shift, and it is possible that
- // the species is made inactive, or removed all-togeather. If it is a non-
- // threshold parasite, then the species will only be effected if this was
- // the last parasite of that species.
-
- //cSpecies * cur_species = in_parasite.GetSpecies();
- /*if (cur_species) {
-
- // First, re-adjust the species.
-
- // cur_species->RemoveParasite();
-
- // Then, check to see how this species changes if it is a threshold.
-
- // if (in_parasite.GetThreshold()) {
- // cur_species->RemoveThreshold(in_parasite);
-
- // If we are out of thresholds, move this species to the inactive
- // list for now. Otherwise, just adjust it.
-
- if (cur_species->GetNumThreshold() == 0) {
- species_control->SetInactive(*cur_species);
- }
- else {
- species_control->Adjust(*cur_species);
- }
- }
-
- // Finally, remove the species completely if it has no parasites left.
-
- //if (!cur_species->GetNumParasites()) {
- // species_control->SetGarbage(*cur_species);
- }*/
- //}
-
-
- delete &in_parasite;
-}
-
-void cGenebank::ThresholdParasite(cParasite & in_parasite)
-{
- cSpecies * found_species = NULL;
-
- in_parasite.SetName( GetLabel(in_parasite.GetLength(),
- parasite_count[in_parasite.GetLength()]++) );
- in_parasite.SetThreshold();
-
- // If speciation is on, assign a species to the parasite now that it is
- // threshold.
-
- //if (cConfig::GetSpeciesRecording()) {
- // Record the old species to know if it changes.
-
- //cSpecies * old_species = in_parasite.GetSpecies();
-
- // Determine the "proper" species.
-
- //found_species = species_control->Find(in_parasite,
- // cConfig::GetSpeciesRecording());
-
- // If no species was found, create a new one.
- /*
- if (!found_species) {
- found_species = new cSpecies(in_parasite.GetGenome(), stats.GetUpdate());
- if (in_parasite.GetSpecies())
- found_species->SetParentID(in_parasite.GetSpecies()->GetID());
- species_control->SetActive(*found_species);
- stats.AddSpecies(found_species->GetID());
-
- // Since this is a new species, see if we should be printing it.
-
- if (cConfig::GetSpeciesPrint()) {
- cString filename;
- filename.Set("genebank/spec-%04d", found_species->GetID());
- cTestUtil::PrintGenome(in_parasite.GetGenome(), filename,
- &in_parasite, stats.GetUpdate());
- }
-
- else {
- // If we are not creating a new species, but are adding a threshold
- // to one which is currently in-active, make sure to move it back to
- // the active list.
-
- if (found_species->GetNumThreshold() == 0) {
- species_control->SetActive(*found_species);
- }
- }
-
- // Now that we know for sure what the species is, and that it is in
- // the proper list, setup both the species and the parasite.
-
- in_parasite.SetSpecies(found_species);
- found_species->AddThreshold(in_parasite);
-
- // Finally test to see if the species has been changed, and adjust
- // accordingly.
-
- if (found_species != old_species) {
- found_species->AddParasite();
- if (old_species) {
- old_species->RemoveParasite();
- if (old_species->GetNumParasites() == 0)
- species_control->SetGarbage(*old_species);
- }
- }
- else {
- if (found_species->GetNumThreshold() > 1) {
- species_control->Adjust(*found_species);
- }
- }
- }
-
- // Do the relevent statistics...
-
- if (cConfig::GetSpeciesRecording()) {
- stats.AddThreshold(in_parasite.GetID(), in_parasite.GetName()(),
- found_species->GetID());
- } else {
- stats.AddThreshold(in_parasite.GetID(), in_parasite.GetName()());
- }
-
- // Print the parasite?
-
- if (cConfig::GetParasitePrint()) {
- cString filename;
- filename.Set("genebank/%s", in_parasite.GetName()());
- cTestUtil::PrintGenome(in_parasite.GetGenome(), filename,
- &in_parasite, stats.GetUpdate());
- }*/
-}
-
-bool cGenebank::AdjustParasite(cParasite & in_parasite)
-{
- if (!parasite_control->Adjust(in_parasite)) return false;
-
- if ((in_parasite.GetNumOrganisms() >= cConfig::GetThreshold() ||
- &in_parasite == parasite_control->GetBest()) &&
- !(in_parasite.GetThreshold())) {
- ThresholdParasite(in_parasite);
- }
-
- return true;
-}
-
-/////////////////////
-// cParasiteQueue
-/////////////////////
-
-cParasiteQueue::cParasiteQueue()
-{
- size = 0;
- root.SetNext(&root);
- root.SetPrev(&root);
-}
-
-
-cParasiteQueue::~cParasiteQueue()
-{
- while (root.GetNext() != &root) {
- Remove(root.GetNext());
- }
-}
-
-bool cParasiteQueue::OK()
-{
- bool result = true;
- int count = 0;
-
- for (cParasiteElement * temp_element = root.GetNext();
- temp_element != &root;
- temp_element = temp_element->GetNext()) {
- assert (temp_element->GetNext()->GetPrev() == temp_element);
- assert (temp_element->GetParasite()->GetID() >= 0);
-
- count++;
- assert (count <= size);
- }
-
- assert (count == size);
-
- return result;
-}
-
-void cParasiteQueue::Insert(cParasite & in_parasite)
-{
- cParasiteElement * new_element = new cParasiteElement(&in_parasite);
- new_element->SetNext(root.GetNext());
- new_element->SetPrev(&root);
- root.GetNext()->SetPrev(new_element);
- root.SetNext(new_element);
- size++;
-}
-
-void cParasiteQueue::Remove(cParasite & in_parasite)
-{
- cParasiteElement * cur_element;
-
- for (cur_element = root.GetNext();
- cur_element != &root;
- cur_element = cur_element->GetNext()) {
- if (cur_element->GetParasite() == &in_parasite) break;
- }
-
- assert (cur_element != &root);
-
- Remove(cur_element);
-}
-
-void cParasiteQueue::Remove(cParasiteElement * in_element)
-{
- in_element->GetPrev()->SetNext(in_element->GetNext());
- in_element->GetNext()->SetPrev(in_element->GetPrev());
- in_element->SetNext(NULL);
- in_element->SetPrev(NULL);
- delete(in_element);
-
- size--;
-}
-
-cParasite * cParasiteQueue::Find(const cGenome & in_genome) const
-{
- for (cParasiteElement * cur_element = root.GetNext();
- cur_element != &root;
- cur_element = cur_element->GetNext()) {
- if (cur_element->GetParasite()->GetGenome() == in_genome) {
- return cur_element->GetParasite();
- }
- }
- return NULL;
-}
-
-///////////////////////
-// cParasiteControl
-///////////////////////
-
-cParasiteControl::cParasiteControl(cGenebank & in_gb) : genebank(in_gb)
-{
- size = 0;
- best = NULL;
- coalescent = NULL;
- for (int i = 0; i < GENOTYPE_THREADS; i++) threads[i] = NULL;
-
- historic_list = NULL;
- historic_count = 0;
-}
-
-cParasiteControl::~cParasiteControl()
-{
-}
-
-bool cParasiteControl::OK()
-{
- int ret_value = true;
-
- // Cycle through the list, making sure all connections are proper, size
- // is correct, and all parasites are OK().
-
- cParasite * cur_pos = best;
- for (int i = 0; i < size; i++) {
- if (!cur_pos->OK()) ret_value = false;
- assert (cur_pos->GetNext()->GetPrev() == cur_pos);
- cur_pos = cur_pos->GetNext();
- }
-
- assert (cur_pos == best);
-
- return ret_value;
-}
-
-void cParasiteControl::Insert(cParasite & in_parasite, cParasite * prev_parasite)
-{
- if (prev_parasite == NULL) {
- assert(size == 0); // Destroying a full parasite queue...
-
- best = &in_parasite;
- best->SetNext(best);
- best->SetPrev(best);
- }
- else {
- in_parasite.SetPrev(prev_parasite);
- in_parasite.SetNext(prev_parasite->GetNext());
- prev_parasite->SetNext(&in_parasite);
- in_parasite.GetNext()->SetPrev(&in_parasite);
- }
-
- size++;
-}
-
-void cParasiteControl::Remove(cParasite & in_parasite)
-{
- if (size == 1) {
- best = NULL;
- }
- if (&in_parasite == best) {
- best = best->GetNext();
- }
-
- in_parasite.GetNext()->SetPrev(in_parasite.GetPrev());
- in_parasite.GetPrev()->SetNext(in_parasite.GetNext());
- in_parasite.SetNext(NULL);
- in_parasite.SetPrev(NULL);
-
- size--;
-}
-
-void cParasiteControl::RemoveHistoric(cParasite & in_parasite)
-{
- if (historic_count == 1) {
- historic_list = NULL;
- }
- if (&in_parasite == historic_list) {
- historic_list = historic_list->GetNext();
- }
-
- in_parasite.GetNext()->SetPrev(in_parasite.GetPrev());
- in_parasite.GetPrev()->SetNext(in_parasite.GetNext());
- in_parasite.SetNext(NULL);
- in_parasite.SetPrev(NULL);
-
- historic_count--;
-}
-
-void cParasiteControl::InsertHistoric(cParasite & in_parasite)
-{
- if (historic_count == 0) {
- in_parasite.SetNext(&in_parasite);
- in_parasite.SetPrev(&in_parasite);
- }
- else {
- in_parasite.SetPrev(historic_list->GetPrev());
- in_parasite.SetNext(historic_list);
- historic_list->GetPrev()->SetNext(&in_parasite);
- historic_list->SetPrev(&in_parasite);
- }
-
- historic_list = &in_parasite;
- historic_count++;
-}
-
-
-int cParasiteControl::UpdateCoalescent()
-{
- // Test to see if any updating needs to be done...
- // Don't update active coalescent parasite, or if there is more than
- // one offspring.
- if (coalescent != NULL &&
- (coalescent->GetNumOrganisms() > 0 ||
- coalescent->GetNumOffspringParasites() > 1)) {
- return coalescent->GetDepth();
- }
-
- // If there is no best, there is nothing to search through...
- if (best == NULL) return -1;
-
- // Find the new point...
- cParasite * test_gen = best;
- cParasite * found_gen = best;
- cParasite * parent_gen = best->GetParentParasite();
-
- while (parent_gen != NULL) {
- // See if this parasite should be the new found parasite...
- if (test_gen->GetNumOrganisms() > 0 ||
- test_gen->GetNumOffspringParasites() > 1) {
- found_gen = test_gen;
- }
-
- // Move to the next parasite...
- test_gen = parent_gen;
- parent_gen = test_gen->GetParentParasite();
- }
-
- coalescent = found_gen;
-
- return coalescent->GetDepth();
-}
-
-
-bool cParasiteControl::CheckPos(cParasite & in_parasite)
-{
- int next_OK = false;
- int prev_OK = false;
-
- if (in_parasite.GetNumOrganisms() >= in_parasite.GetNext()->GetNumOrganisms()) {
- next_OK =true;
- }
- if (in_parasite.GetNumOrganisms() <= in_parasite.GetPrev()->GetNumOrganisms()) {
- prev_OK =true;
- }
-
- if ((&in_parasite == best && next_OK) ||
- (next_OK && prev_OK) ||
- (&in_parasite == best->GetPrev() && prev_OK)) {
- return true;
- }
-
- return false;
-}
-
-void cParasiteControl::Insert(cParasite & new_parasite)
-{
- // If there is nothing in the list, add this.
-
- if (size == 0) {
- Insert(new_parasite, NULL);
- }
-
- // Otherwise tack it on the end.
-
- else {
- Insert(new_parasite, best->GetPrev());
- }
-}
-
-bool cParasiteControl::Adjust(cParasite & in_parasite)
-{
- if (in_parasite.GetDeferAdjust() == true) return true;
-
- cParasite * cur_parasite = in_parasite.GetPrev();
-
- // Check to see if this parasite should be removed completely.
-
- if (in_parasite.GetNumOrganisms() == 0) {
- genebank.RemoveParasite(in_parasite);
- return false;
- }
-
- // Do not adjust if this was and still is the best parasite, or is
- // otherwise in the proper spot...
-
- if (CheckPos(in_parasite)) {
- return true;
- }
-
- // Otherwise, remove it from the queue for just the moment.
-
- Remove(in_parasite);
-
- // Also, if this parasite is the best, put it there.
-
- if (in_parasite.GetNumOrganisms() > best->GetNumOrganisms()) {
- Insert(in_parasite, best->GetPrev());
- best = &in_parasite;
- return true;
- }
-
- // Finally, find out where this parasite *does* go.
-
- while (cur_parasite->GetNumOrganisms() >= in_parasite.GetNumOrganisms() &&
- cur_parasite != best->GetPrev()) {
- cur_parasite = cur_parasite->GetNext();
- }
- while (cur_parasite->GetNumOrganisms() < in_parasite.GetNumOrganisms() &&
- cur_parasite != best) {
- cur_parasite = cur_parasite->GetPrev();
- }
-
- Insert(in_parasite, cur_parasite);
-
- return true;
-}
-
-
-cParasite * cParasiteControl::Find(const cGenome & in_genome) const
-{
- int i;
- cParasite * cur_parasite = best;
-
- for (i = 0; i < size; i++) {
- if (in_genome == cur_parasite->GetGenome()) {
- return cur_parasite;
- }
- cur_parasite = cur_parasite->GetNext();
- }
-
- return NULL;
-}
-
-int cParasiteControl::FindPos(cParasite & in_parasite, int max_depth)
-{
- cParasite * temp_parasite = best;
- if (max_depth < 0 || max_depth > size) max_depth = size;
-
- for (int i = 0; i < max_depth; i++) {
- if (temp_parasite == &in_parasite) return i;
- temp_parasite = temp_parasite->GetNext();
- }
-
- return -1;
-}
-
-cParasite * cParasiteControl::Next(int thread)
-{
- return threads[thread] = threads[thread]->GetNext();
-}
-
-cParasite * cParasiteControl::Prev(int thread)
-{
- return threads[thread] = threads[thread]->GetPrev();
}
Index: avida/current/source/main/genebank.hh
diff -u avida/current/source/main/genebank.hh:1.20 avida/current/source/main/genebank.hh:1.21
--- avida/current/source/main/genebank.hh:1.20 Thu Jul 31 15:34:27 2003
+++ avida/current/source/main/genebank.hh Thu Jul 31 16:03:35 2003
@@ -20,7 +20,6 @@
class cGenome;
class cSpecies;
class cStats;
-class cParasite;
#define GENOTYPE_HASH_SIZE 307 // @CAO Is this an optimal number?
#define SPECIES_HASH_SIZE 101
@@ -159,95 +158,13 @@
inline int GetInactiveSize() const { return inactive_queue.GetSize(); }
};
-class cParasiteElement {
-private:
- cParasite * parasite;
- cParasiteElement * next;
- cParasiteElement * prev;
-public:
- inline cParasiteElement(cParasite * in_gen=NULL) : parasite(in_gen) {
- next = NULL; prev = NULL;
- }
- inline ~cParasiteElement() { ; }
-
- inline cParasite * GetParasite() const { return parasite; }
- inline cParasiteElement * GetNext() const { return next; }
- inline cParasiteElement * GetPrev() const { return prev; }
-
- inline void SetNext(cParasiteElement * in_next) { next = in_next; }
- inline void SetPrev(cParasiteElement * in_prev) { prev = in_prev; }
-};
-
-class cParasiteQueue {
-private:
- int size;
- cParasiteElement root;
-
- void Remove(cParasiteElement * in_element);
-public:
- cParasiteQueue();
- ~cParasiteQueue();
-
- bool OK();
-
- void Insert(cParasite & in_parasite);
- void Remove(cParasite & in_parasite);
- cParasite * Find(const cGenome & in_genome) const;
-};
-
-class cParasiteControl {
-private:
- int size;
- cParasite * best;
- cParasite * coalescent;
- cParasite * threads[GENOTYPE_THREADS];
- cGenebank & genebank;
-
- cParasite * historic_list;
- int historic_count;
-
- void Insert(cParasite & in_parasite, cParasite * prev_parasite);
- bool CheckPos(cParasite & in_parasite);
-public:
- cParasiteControl(cGenebank & in_gb);
- ~cParasiteControl();
-
- bool OK();
- void Remove(cParasite & in_parasite);
- void Insert(cParasite & new_parasite);
- bool Adjust(cParasite & in_parasite);
-
- void RemoveHistoric(cParasite & in_parasite);
- void InsertHistoric(cParasite & in_parasite);
- int GetHistoricCount() { return historic_count; }
-
- int UpdateCoalescent();
-
- inline int GetSize() const { return size; }
- inline cParasite * GetBest() const { return best; }
- inline cParasite * GetCoalescent() const { return coalescent; }
-
- cParasite * Find(const cGenome & in_genome) const;
- int FindPos(cParasite & in_parasite, int max_depth = -1);
-
- inline cParasite * Get(int thread) const { return threads[thread]; }
- inline cParasite * Reset(int thread)
- { return threads[thread] = best; }
- inline cParasite * ResetHistoric(int thread)
- { return threads[thread] = historic_list; }
- cParasite * Next(int thread);
- cParasite * Prev(int thread);
-};
class cGenebank {
private:
unsigned int genotype_count[MAX_CREATURE_SIZE];
- unsigned int parasite_count[MAX_CREATURE_SIZE];
cGenotypeQueue active_genotypes[GENOTYPE_HASH_SIZE];
- cParasiteQueue active_parasites[GENOTYPE_HASH_SIZE];
cGenotypeControl * genotype_control;
cSpeciesControl * species_control;
- cParasiteControl * parasite_control;
cStats & stats;
private:
@@ -310,14 +227,6 @@
unsigned int FindCRC(const cGenome & in_genome) const;
void SpeciesTest(char * message, cGenotype & genotype);
-
- void AddParasite(cParasite *in_parasite, int in_list_num = -1 );
- cParasite * AddParasite(const cGenome & in_genome,
- cParasite * parent_parasite = NULL);
- cParasite * FindParasite(const cGenome & in_genome) const;
- void RemoveParasite(cParasite & in_parasite);
- void ThresholdParasite(cParasite & in_parasite);
- bool AdjustParasite(cParasite & in_parasite);
};
#endif
More information about the Avida-cvs
mailing list