[Avida-SVN] r2527 - in branches/jobScheduling/source: cpu main
beckma24 at myxo.css.msu.edu
beckma24 at myxo.css.msu.edu
Tue Apr 8 13:07:28 PDT 2008
Author: beckma24
Date: 2008-04-08 16:07:27 -0400 (Tue, 08 Apr 2008)
New Revision: 2527
Modified:
branches/jobScheduling/source/cpu/cHardwareCPU.cc
branches/jobScheduling/source/cpu/cHardwareCPU.h
branches/jobScheduling/source/main/cAvidaConfig.h
branches/jobScheduling/source/main/cDeme.cc
branches/jobScheduling/source/main/cDeme.h
branches/jobScheduling/source/main/cPhenotype.cc
branches/jobScheduling/source/main/cPhenotype.h
branches/jobScheduling/source/main/cPopulation.cc
branches/jobScheduling/source/main/cStats.h
Log:
Modified: branches/jobScheduling/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/jobScheduling/source/cpu/cHardwareCPU.cc 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/cpu/cHardwareCPU.cc 2008-04-08 20:07:27 UTC (rev 2527)
@@ -211,6 +211,7 @@
tInstLibEntry<tMethod>("if-resources", &cHardwareCPU::Inst_IfResources, nInstFlag::STALL),
// Data collection
tInstLibEntry<tMethod>("collect-cell-data", &cHardwareCPU::Inst_CollectCellData, nInstFlag::STALL),
+ tInstLibEntry<tMethod>("kill-cell-event", &cHardwareCPU::Inst_KillCellEvent, nInstFlag::STALL),
tInstLibEntry<tMethod>("collect-cell-data-and-kill-event", &cHardwareCPU::Inst_CollectCellDataAndKillEvent, nInstFlag::STALL),
tInstLibEntry<tMethod>("donate-rnd", &cHardwareCPU::Inst_DonateRandom, nInstFlag::STALL),
@@ -2599,6 +2600,10 @@
// const bool viable = Divide_CheckViable(ctx, div_point, child_size);
// these checks should be done, but currently they make some assumptions
// that crash when evaluating this kind of organism -- JEB
+
+ // check if repro can replace an existing organism
+ if(m_world->GetConfig().REPRO_METHOD.Get() == 0 && organism->IsNeighborCellOccupied())
+ return false;
if (organism->GetPhenotype().GetCurBonus() < m_world->GetConfig().REQUIRED_BONUS.Get()) return false;
@@ -3238,9 +3243,20 @@
return true;
}
+bool cHardwareCPU::Inst_KillCellEvent(cAvidaContext& ctx) {
+ // Fail if we're running in the test CPU.
+ if((organism->GetOrgInterface().GetDemeID() < 0) || (organism->GetCellID() < 0))
+ return false;
+
+ int eventID = organism->GetCellData();
+ organism->GetOrgInterface().GetDeme()->KillCellEvent(eventID);
+ return true;
+}
+
bool cHardwareCPU::Inst_CollectCellDataAndKillEvent(cAvidaContext& ctx) {
// Fail if we're running in the test CPU.
- if((organism->GetOrgInterface().GetDemeID() < 0) || (organism->GetCellID() < 0)) return false;
+ if((organism->GetOrgInterface().GetDemeID() < 0) || (organism->GetCellID() < 0))
+ return false;
const int out_reg = FindModifiedRegister(REG_BX);
int eventID = organism->GetCellData();
Modified: branches/jobScheduling/source/cpu/cHardwareCPU.h
===================================================================
--- branches/jobScheduling/source/cpu/cHardwareCPU.h 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/cpu/cHardwareCPU.h 2008-04-08 20:07:27 UTC (rev 2527)
@@ -461,6 +461,7 @@
//! Execute the following instruction if all resources are above their min level.
bool Inst_IfResources(cAvidaContext& ctx);
bool Inst_CollectCellData(cAvidaContext& ctx);
+ bool Inst_KillCellEvent(cAvidaContext& ctx);
bool Inst_CollectCellDataAndKillEvent(cAvidaContext& ctx);
void DoDonate(cOrganism * to_org);
Modified: branches/jobScheduling/source/main/cAvidaConfig.h
===================================================================
--- branches/jobScheduling/source/main/cAvidaConfig.h 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cAvidaConfig.h 2008-04-08 20:07:27 UTC (rev 2527)
@@ -329,6 +329,7 @@
CONFIG_ADD_VAR(INJECT_METHOD, int, 0, "0 = Leaves the parasite thread state untouched.\n1 = Resets the calling thread state on inject");
CONFIG_ADD_VAR(GENERATION_INC_METHOD, int, 1, "0 = Only the generation of the child is\n increased on divide.\n1 = Both the generation of the mother and child are\n increased on divide (good with DIVIDE_METHOD 1).");
CONFIG_ADD_VAR(RESET_INPUTS_ON_DIVIDE, int, 0, "Reset environment inputs of parent upon successful divide.");
+ CONFIG_ADD_VAR(REPRO_METHOD, int, 1, "Replace existing organism: 1=yes");
CONFIG_ADD_GROUP(RECOMBINATION_GROUP, "Sexual Recombination and Modularity");
CONFIG_ADD_VAR(RECOMBINATION_PROB, double, 1.0, "probability of recombination in div-sex");
Modified: branches/jobScheduling/source/main/cDeme.cc
===================================================================
--- branches/jobScheduling/source/main/cDeme.cc 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cDeme.cc 2008-04-08 20:07:27 UTC (rev 2527)
@@ -104,8 +104,8 @@
if(_age == (*iter).first) {
// at end point
(m_world->GetStats().FlowRateTuple())[(*iter).second].first.Add(GetSize());
- (m_world->GetStats().FlowRateTuple())[(*iter).second].second.Add(GetEventsKilled());
-
+ (m_world->GetStats().FlowRateTuple())[(*iter).second].second.Add(GetEventsKilledThisSlot());
+ eventsKilledThisSlot = 0;
break;
}
}
@@ -144,6 +144,7 @@
birth_count = 0;
cur_normalized_time_used = 0;
eventsKilled = 0;
+ eventsKilledThisSlot = 0;
if(resetResources) deme_resource_count.ReinitializeResources();
}
@@ -320,6 +321,7 @@
}
event.DeactivateEvent(); //event over
eventsKilled++;
+ eventsKilledThisSlot++;
}
}
}
Modified: branches/jobScheduling/source/main/cDeme.h
===================================================================
--- branches/jobScheduling/source/main/cDeme.h 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cDeme.h 2008-04-08 20:07:27 UTC (rev 2527)
@@ -62,6 +62,7 @@
double cur_normalized_time_used; // normalized by merit and number of orgs
double last_normalized_time_used;
unsigned int eventsKilled;
+ unsigned int eventsKilledThisSlot;
// End of phenotypic traits
@@ -85,7 +86,7 @@
public:
cDeme() : _id(0), width(0), birth_count(0), org_count(0), _age(0), generation(0), total_org_energy(0.0), total_energy_testament(0.0),
time_used(0), gestation_time(0), cur_normalized_time_used(0.0), last_normalized_time_used(0.0),
- eventsKilled(0), deme_resource_count(0), m_germline_genotype_id(0) { ; }
+ eventsKilled(0), eventsKilledThisSlot(0), deme_resource_count(0), m_germline_genotype_id(0) { ; }
~cDeme() { ; }
void Setup(int id, const tArray<int>& in_cells, int in_width = -1, cWorld* world = NULL);
@@ -116,6 +117,7 @@
int GetGeneration() const { return generation; }
int GetEventsKilled() const { return eventsKilled; }
+ int GetEventsKilledThisSlot() const { return eventsKilledThisSlot;}
bool IsEmpty() const { return org_count == 0; }
bool IsFull() const { return org_count == cell_ids.GetSize(); }
Modified: branches/jobScheduling/source/main/cPhenotype.cc
===================================================================
--- branches/jobScheduling/source/main/cPhenotype.cc 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cPhenotype.cc 2008-04-08 20:07:27 UTC (rev 2527)
@@ -87,9 +87,10 @@
// 1. These are values calculated at the last divide (of self or offspring)
merit = in_phen.merit;
- executionRatio = in_phen.executionRatio;
+ executionRatio = in_phen.executionRatio;
energy_store = in_phen.energy_store;
energy_tobe_applied = in_phen.energy_tobe_applied;
+ energy_testament = in_phen.energy_testament;
genome_length = in_phen.genome_length;
bonus_instruction_count = in_phen.bonus_instruction_count;
copied_size = in_phen.copied_size;
@@ -259,6 +260,7 @@
executionRatio = 1.0;
energy_store = min(energy_store, (double) m_world->GetConfig().ENERGY_CAP.Get());
energy_tobe_applied = 0.0;
+ energy_testament = 0.0;
genome_length = _genome.GetSize();
copied_size = parent_phenotype.child_copied_size;
executed_size = parent_phenotype.executed_size;
@@ -403,6 +405,7 @@
executed_size = genome_length;
energy_store = min(m_world->GetConfig().ENERGY_GIVEN_ON_INJECT.Get(), m_world->GetConfig().ENERGY_CAP.Get());
energy_tobe_applied = 0.0;
+ energy_testament = 0.0;
executionRatio = 1.0;
gestation_time = 0;
gestation_start = 0;
@@ -537,8 +540,10 @@
}
merit = cur_merit_base * cur_bonus;
- //BB:TODO update energy store
SetEnergy(energy_store + cur_energy_bonus);
+ m_world->GetStats().SumEnergyTestamentAcceptedByOrganisms().Add(energy_testament);
+ energy_testament = 0.0;
+
genome_length = _genome.GetSize();
(void) copied_size; // Unchanged
@@ -810,6 +815,7 @@
energy_store = clone_phenotype.energy_store;
energy_tobe_applied = 0.0;
+ energy_testament = 0.0;
executionRatio = 1.0;
executionRatio = clone_phenotype.executionRatio;
@@ -1388,6 +1394,8 @@
energy_tobe_applied += cur_energy_bonus;
} else if(m_world->GetConfig().APPLY_ENERGY_METHOD.Get() == 1) {
SetEnergy(energy_store + cur_energy_bonus);
+ m_world->GetStats().SumEnergyTestamentAcceptedByOrganisms().Add(energy_testament);
+ energy_testament = 0.0;
} else {
cerr<< "Unknown APPLY_ENERGY_METHOD value " << m_world->GetConfig().APPLY_ENERGY_METHOD.Get();
exit(-1);
@@ -1398,7 +1406,10 @@
void cPhenotype::ApplyToEnergyStore() {
SetEnergy(energy_store + energy_tobe_applied);
+ m_world->GetStats().SumEnergyTestamentAcceptedByOrganisms().Add(energy_testament);
+ energy_testament = 0.0;
energy_tobe_applied = 0.0;
+ energy_testament = 0.0;
}
double cPhenotype::ExtractParentEnergy() {
@@ -1586,8 +1597,9 @@
}
merit = cur_merit_base * cur_bonus;
- //BB:TODO update energy store
SetEnergy(energy_store + cur_energy_bonus);
+ m_world->GetStats().SumEnergyTestamentAcceptedByOrganisms().Add(energy_testament);
+ energy_testament = 0.0;
genome_length = _genome.GetSize();
gestation_start = time_used;
Modified: branches/jobScheduling/source/main/cPhenotype.h
===================================================================
--- branches/jobScheduling/source/main/cPhenotype.h 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cPhenotype.h 2008-04-08 20:07:27 UTC (rev 2527)
@@ -108,6 +108,7 @@
double cur_bonus; // Current Bonus
double cur_energy_bonus; // Current energy bonus
double energy_tobe_applied; // Energy that has not yet been added to energy store.
+ double energy_testament;
int cur_num_errors; // Total instructions executed illeagally.
int cur_num_donates; // Number of donations so far
tArray<int> cur_task_count; // Total times each task was performed
Modified: branches/jobScheduling/source/main/cPopulation.cc
===================================================================
--- branches/jobScheduling/source/main/cPopulation.cc 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cPopulation.cc 2008-04-08 20:07:27 UTC (rev 2527)
@@ -1223,6 +1223,7 @@
double source_deme_energy(0.0), deme_energy_decay(0.0), parent_deme_energy(0.0), offspring_deme_energy(0.0);
if(m_world->GetConfig().ENERGY_ENABLED.Get()) {
source_deme_energy = source_deme.CalculateTotalEnergy() + source_deme.GetTotalEnergyTestament();
+ m_world->GetStats().SumEnergyTestamentAcceptedByDeme().Add(source_deme.GetTotalEnergyTestament());
deme_energy_decay = 1.0 - m_world->GetConfig().FRAC_ENERGY_DECAY_AT_DEME_BIRTH.Get();
parent_deme_energy = source_deme_energy * deme_energy_decay * (1.0 - m_world->GetConfig().FRAC_PARENT_ENERGY_GIVEN_TO_DEME_AT_BIRTH.Get());
offspring_deme_energy = source_deme_energy * deme_energy_decay * m_world->GetConfig().FRAC_PARENT_ENERGY_GIVEN_TO_DEME_AT_BIRTH.Get();
@@ -2041,9 +2042,11 @@
cDataFile& df = m_world->GetDataFile(filename);
df.WriteTimeStamp();
df.Write(m_world->GetStats().GetUpdate(), "Update");
- df.Write(stats.SumEnergyTestamentToDemeOrganisms().Average(), "Energy Testament To Deme Organisms");
- df.Write(stats.SumEnergyTestamentToFutureDeme().Average(), "Energy Testament To Future Deme");
- df.Write(stats.SumEnergyTestamentToNeighborOrganisms().Average(), "Energy Testament To Neighbor Organisms");
+ df.Write(stats.SumEnergyTestamentToDemeOrganisms().Average(), "Energy Testament to Deme Organisms");
+ df.Write(stats.SumEnergyTestamentToFutureDeme().Average(), "Energy Testament to Future Deme");
+ df.Write(stats.SumEnergyTestamentToNeighborOrganisms().Average(), "Energy Testament to Neighbor Organisms");
+ df.Write(stats.SumEnergyTestamentAcceptedByDeme().Average(), "Energy Testament Accepted by Future Deme");
+ df.Write(stats.SumEnergyTestamentAcceptedByOrganisms().Average(), "Energy Testament Accepted by Organisms");
df.Endl();
Modified: branches/jobScheduling/source/main/cStats.h
===================================================================
--- branches/jobScheduling/source/main/cStats.h 2008-04-08 14:36:55 UTC (rev 2526)
+++ branches/jobScheduling/source/main/cStats.h 2008-04-08 20:07:27 UTC (rev 2527)
@@ -279,6 +279,8 @@
cDoubleSum EnergyTestamentToFutureDeme;
cDoubleSum EnergyTestamentToNeighborOrganisms;
cDoubleSum EnergyTestamentToDemeOrganisms;
+ cDoubleSum EnergyTestamentAcceptedByOrganisms;
+ cDoubleSum EnergyTestamentAcceptedByDeme;
//(event flow rate, (deme pop size, events killed))
std::map<int, std::pair<cIntSum, cIntSum> > flow_rate_tuple;
@@ -431,6 +433,8 @@
cDoubleSum& SumEnergyTestamentToFutureDeme() { return EnergyTestamentToFutureDeme;}
cDoubleSum& SumEnergyTestamentToNeighborOrganisms() { return EnergyTestamentToNeighborOrganisms; }
cDoubleSum& SumEnergyTestamentToDemeOrganisms() { return EnergyTestamentToDemeOrganisms; }
+ cDoubleSum& SumEnergyTestamentAcceptedByOrganisms() { return EnergyTestamentAcceptedByOrganisms; }
+ cDoubleSum& SumEnergyTestamentAcceptedByDeme() { return EnergyTestamentAcceptedByDeme; }
std::map<int, std::pair<cIntSum, cIntSum> >& FlowRateTuple() { return flow_rate_tuple; }
@@ -479,7 +483,9 @@
const cDoubleSum& SumEnergyTestamentToFutureDeme() const { return EnergyTestamentToFutureDeme;}
const cDoubleSum& SumEnergyTestamentToNeighborOrganisms() const { return EnergyTestamentToNeighborOrganisms; }
const cDoubleSum& SumEnergyTestamentToDemeOrganisms() const { return EnergyTestamentToDemeOrganisms; }
-
+ const cDoubleSum& SumEnergyTestamentAcceptedByOrganisms() const { return EnergyTestamentAcceptedByOrganisms; }
+ const cDoubleSum& SumEnergyTestamentAcceptedByDeme() const { return EnergyTestamentAcceptedByDeme; }
+
const std::map<int, std::pair<cIntSum, cIntSum> >& FlowRateTuple() const { return flow_rate_tuple; }
More information about the Avida-cvs
mailing list