[Avida-SVN] r1585 - in development/source: actions main
goingssh at myxo.css.msu.edu
goingssh at myxo.css.msu.edu
Tue May 22 03:27:01 PDT 2007
Author: goingssh
Date: 2007-05-22 06:27:00 -0400 (Tue, 22 May 2007)
New Revision: 1585
Modified:
development/source/actions/PopulationActions.cc
development/source/main/cEnvironment.cc
development/source/main/cPhenotype.cc
development/source/main/cPhenotype.h
development/source/main/cReactionResult.cc
development/source/main/cReactionResult.h
development/source/main/cTaskContext.h
development/source/main/cTaskLib.cc
Log:
Implementing relative task quality based on other orgs outputs
Modified: development/source/actions/PopulationActions.cc
===================================================================
--- development/source/actions/PopulationActions.cc 2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/actions/PopulationActions.cc 2007-05-22 10:27:00 UTC (rev 1585)
@@ -34,6 +34,7 @@
#include "cPopulationCell.h"
#include "cStats.h"
#include "cWorld.h"
+#include "cOrganism.h"
/*
@@ -1430,7 +1431,7 @@
void Process(cAvidaContext& ctx)
{
for (int i = 0; i < m_world->GetPopulation().GetSize(); i++) {
- m_world->GetPopulation().GetCell(i).GetOrganism();
+ (m_world->GetPopulation().GetCell(i).GetOrganism())->GetPhenotype();
}
}
};
Modified: development/source/main/cEnvironment.cc
===================================================================
--- development/source/main/cEnvironment.cc 2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cEnvironment.cc 2007-05-22 10:27:00 UTC (rev 1585)
@@ -825,12 +825,13 @@
}
const double task_quality = m_tasklib.TestOutput(taskctx);
+
// If this task wasn't performed, move on to the next one.
if (task_quality == 0.0) continue;
// Mark this task as performed...
- result.MarkTask(task_id, task_quality);
+ result.MarkTask(task_id, task_quality, taskctx.GetTaskValue());
// And lets process it!
DoProcesses(ctx, cur_reaction->GetProcesses(), resource_count, task_quality, task_cnt, i, result);
Modified: development/source/main/cPhenotype.cc
===================================================================
--- development/source/main/cPhenotype.cc 2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cPhenotype.cc 2007-05-22 10:27:00 UTC (rev 1585)
@@ -44,6 +44,7 @@
, cur_task_count(m_world->GetEnvironment().GetNumTasks())
, eff_task_count(m_world->GetEnvironment().GetNumTasks())
, cur_task_quality(m_world->GetEnvironment().GetNumTasks())
+ , cur_task_value(m_world->GetEnvironment().GetNumTasks())
, cur_reaction_count(m_world->GetEnvironment().GetReactionLib().GetSize())
, cur_reaction_add_reward(m_world->GetEnvironment().GetReactionLib().GetSize())
, cur_inst_count(world->GetHardwareManager().GetInstSet().GetSize())
@@ -52,6 +53,7 @@
, last_task_count(m_world->GetEnvironment().GetNumTasks())
, last_reaction_add_reward(m_world->GetEnvironment().GetReactionLib().GetSize())
, last_task_quality(m_world->GetEnvironment().GetNumTasks())
+ , last_task_value(m_world->GetEnvironment().GetNumTasks())
, last_reaction_count(m_world->GetEnvironment().GetReactionLib().GetSize())
, last_inst_count(world->GetHardwareManager().GetInstSet().GetSize())
, last_sense_count(m_world->GetStats().GetSenseSize())
@@ -132,6 +134,7 @@
cur_task_count.SetAll(0);
eff_task_count.SetAll(0);
cur_task_quality.SetAll(0);
+ cur_task_value.SetAll(0);
cur_reaction_count.SetAll(0);
cur_reaction_add_reward.SetAll(0);
cur_inst_count.SetAll(0);
@@ -147,6 +150,7 @@
last_num_donates = parent_phenotype.last_num_donates;
last_task_count = parent_phenotype.last_task_count;
last_task_quality = parent_phenotype.last_task_quality;
+ last_task_value = parent_phenotype.last_task_value;
last_reaction_count = parent_phenotype.last_reaction_count;
last_reaction_add_reward = parent_phenotype.last_reaction_add_reward;
last_inst_count = parent_phenotype.last_inst_count;
@@ -222,6 +226,7 @@
cur_task_count.SetAll(0);
eff_task_count.SetAll(0);
cur_task_quality.SetAll(0);
+ cur_task_value.SetAll(0);
cur_reaction_count.SetAll(0);
cur_reaction_add_reward.SetAll(0);
cur_inst_count.SetAll(0);
@@ -236,6 +241,7 @@
last_num_donates = 0;
last_task_count.SetAll(0);
last_task_quality.SetAll(0);
+ last_task_value.SetAll(0);
last_reaction_count.SetAll(0);
last_reaction_add_reward.SetAll(0);
last_sense_count.SetAll(0);
@@ -316,6 +322,7 @@
last_num_donates = cur_num_donates;
last_task_count = cur_task_count;
last_task_quality = cur_task_quality;
+ last_task_value = cur_task_value;
last_reaction_count = cur_reaction_count;
last_reaction_add_reward = cur_reaction_add_reward;
last_inst_count = cur_inst_count;
@@ -328,6 +335,7 @@
cur_task_count.SetAll(0);
eff_task_count.SetAll(0);
cur_task_quality.SetAll(0);
+ cur_task_value.SetAll(0);
cur_reaction_count.SetAll(0);
cur_reaction_add_reward.SetAll(0);
cur_inst_count.SetAll(0);
@@ -416,6 +424,7 @@
last_num_donates = cur_num_donates;
last_task_count = cur_task_count;
last_task_quality = cur_task_quality;
+ last_task_value = cur_task_value;
last_reaction_count = cur_reaction_count;
last_reaction_add_reward = cur_reaction_add_reward;
last_inst_count = cur_inst_count;
@@ -428,6 +437,7 @@
cur_task_count.SetAll(0);
eff_task_count.SetAll(0);
cur_task_quality.SetAll(0);
+ cur_task_value.SetAll(0);
cur_reaction_count.SetAll(0);
cur_reaction_add_reward.SetAll(0);
cur_inst_count.SetAll(0);
@@ -610,6 +620,7 @@
eff_task_count[i]++;
}
if (result.TaskQuality(i) > 0) cur_task_quality[i]+= result.TaskQuality(i);
+ cur_task_value[i] = result.TaskValue(i);
}
for (int i = 0; i < num_reactions; i++) {
if (result.ReactionTriggered(i) == true) cur_reaction_count[i]++;
Modified: development/source/main/cPhenotype.h
===================================================================
--- development/source/main/cPhenotype.h 2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cPhenotype.h 2007-05-22 10:27:00 UTC (rev 1585)
@@ -107,6 +107,7 @@
tArray<int> cur_task_count; // Total times each task was performed
tArray<int> eff_task_count; // Total times each task was performed (resetable during the life of the organism)
tArray<double> cur_task_quality; // Average (total?) quality with which each task was performed
+ tArray<double> cur_task_value; // Value with which this phenotype performs task
tArray<int> cur_reaction_count; // Total times each reaction was triggered.
tArray<double> cur_reaction_add_reward; // Bonus change from triggering each reaction.
tArray<int> cur_inst_count; // Instruction exection counter
@@ -129,6 +130,7 @@
int last_num_donates;
tArray<int> last_task_count;
tArray<double> last_task_quality;
+ tArray<double> last_task_value;
tArray<int> last_reaction_count;
tArray<double> last_reaction_add_reward;
tArray<int> last_inst_count; // Instruction exection counter
@@ -246,6 +248,7 @@
const tArray<int>& GetCurTaskCount() const { assert(initialized == true); return cur_task_count; }
void ClearEffTaskCount() { assert(initialized == true); eff_task_count.SetAll(0); }
const tArray<double> & GetCurTaskQuality() const { assert(initialized == true); return cur_task_quality; }
+ const tArray<double> & GetCurTaskValue() const { assert(initialized == true); return cur_task_value; }
const tArray<int>& GetCurReactionCount() const { assert(initialized == true); return cur_reaction_count;}
const tArray<int>& GetCurInstCount() const { assert(initialized == true); return cur_inst_count; }
const tArray<int>& GetCurSenseCount() const { assert(initialized == true); return cur_sense_count; }
@@ -261,6 +264,7 @@
int GetLastNumDonates() const { assert(initialized == true); return last_num_donates; }
const tArray<int>& GetLastTaskCount() const { assert(initialized == true); return last_task_count; }
const tArray<double>& GetLastTaskQuality() const { assert(initialized == true); return last_task_quality; }
+ const tArray<double>& GetLastTaskValue() const { assert(intialized == true); return last_task_value; }
const tArray<int>& GetLastReactionCount() const { assert(initialized == true); return last_reaction_count; }
const tArray<double>& GetLastReactionAddReward() const { assert(initialized == true); return last_reaction_add_reward; }
const tArray<int>& GetLastInstCount() const { assert(initialized == true); return last_inst_count; }
Modified: development/source/main/cReactionResult.cc
===================================================================
--- development/source/main/cReactionResult.cc 2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cReactionResult.cc 2007-05-22 10:27:00 UTC (rev 1585)
@@ -34,6 +34,7 @@
, resources_detected(num_resources)
, tasks_done(num_tasks)
, tasks_quality(num_tasks)
+ , tasks_value(num_tasks)
, reactions_triggered(num_reactions)
, reaction_add_bonus(num_reactions)
, bonus_add(0.0)
@@ -55,6 +56,7 @@
resources_detected.SetAll(-1.0);
tasks_done.SetAll(false);
tasks_quality.SetAll(0.0);
+ tasks_value.SetAll(0.0);
reactions_triggered.SetAll(false);
reaction_add_bonus.SetAll(0.0);
@@ -89,11 +91,12 @@
lethal = flag;
}
-void cReactionResult::MarkTask(int id, const double quality)
+void cReactionResult::MarkTask(int id, const double quality, const double value)
{
ActivateReaction();
tasks_done[id] = true;
tasks_quality[id] = quality;
+ tasks_value[id] = value;
}
@@ -166,3 +169,9 @@
return tasks_quality[id];
}
+double cReactionResult::TaskValue(int id)
+{
+ if (GetActive() == false) return 0;
+ return tasks_value[id];
+}
+
Modified: development/source/main/cReactionResult.h
===================================================================
--- development/source/main/cReactionResult.h 2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cReactionResult.h 2007-05-22 10:27:00 UTC (rev 1585)
@@ -37,6 +37,7 @@
tArray<double> resources_detected; //Initialize to -1.0
tArray<bool> tasks_done;
tArray<double> tasks_quality;
+ tArray<double> tasks_value;
tArray<bool> reactions_triggered;
tArray<double> reaction_add_bonus;
double bonus_add;
@@ -61,7 +62,7 @@
void Produce(int id, double num);
void Detect(int id, double num);
void Lethal(bool flag);
- void MarkTask(int id, const double quality=1);
+ void MarkTask(int id, const double quality=1, const double value=0);
void MarkReaction(int id);
void AddBonus(double value, int id);
@@ -76,6 +77,7 @@
bool ReactionTriggered(int id);
bool TaskDone(int id);
double TaskQuality(int id);
+ double TaskValue(int id);
double GetAddBonus() { return bonus_add; }
double GetReactionAddBonus(const int i) { return reaction_add_bonus[i]; }
double GetMultBonus() { return bonus_mult; }
Modified: development/source/main/cTaskContext.h
===================================================================
--- development/source/main/cTaskContext.h 2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cTaskContext.h 2007-05-22 10:27:00 UTC (rev 1585)
@@ -55,7 +55,11 @@
tBuffer<int>* m_received_messages;
int m_logic_id;
bool m_on_divide;
-
+
+ // for optimize tasks actual value of function org is outputting, for all others nothing
+ // implemented for now...
+ double m_task_value;
+
cTaskEntry* m_task_entry;
tHashTable<void*, cTaskState*>* m_task_states;
@@ -77,6 +81,7 @@
, m_task_entry(NULL)
, m_task_states(NULL)
{
+ m_task_value = 0;
}
inline int GetInputAt(int index) { return m_interface->GetInputAt(index); }
@@ -90,6 +95,8 @@
inline int GetLogicId() const { return m_logic_id; }
inline void SetLogicId(int v) { m_logic_id = v; }
inline bool GetOnDivide() const { return m_on_divide; }
+ inline void SetTaskValue(double v) { m_task_value = v; }
+ inline double GetTaskValue() { return m_task_value; }
inline void SetTaskEntry(cTaskEntry* in_entry) { m_task_entry = in_entry; }
inline cTaskEntry* GetTaskEntry() { return m_task_entry; }
Modified: development/source/main/cTaskLib.cc
===================================================================
--- development/source/main/cTaskLib.cc 2007-05-22 02:50:22 UTC (rev 1584)
+++ development/source/main/cTaskLib.cc 2007-05-22 10:27:00 UTC (rev 1585)
@@ -2125,8 +2125,8 @@
schema.AddEntry("varlength", 2, 8);
// Double Arguments
schema.AddEntry("basepow", 0, 2.0);
- schema.AddEntry("max_Fx", 1, 1.0);
- schema.AddEntry("min_Fx", 2, 0.0);
+ schema.AddEntry("maxFx", 1, 1.0);
+ schema.AddEntry("minFx", 2, 0.0);
cArgContainer* args = cArgContainer::Load(argstr, schema, errors);
@@ -2166,7 +2166,7 @@
const int function = ctx.GetTaskEntry()->GetArguments().GetInt(0);
// always get x&y, at least for now, turn it into a double between 0 and 1
- double y, x;
+ double y, x, Fx;
const cArgContainer& args = ctx.GetTaskEntry()->GetArguments();
if (args.GetInt(1)) {
@@ -2187,44 +2187,46 @@
switch(function) {
case 1:
- quality = 1.0 - x;
+ Fx = x; // F1
break;
case 2:
- quality = 1.0 - ((1.0 + y) * (1.0 - sqrt(x / (1.0 + y)))) / 2.0; // F2
+ Fx = (1.0 + y) * (1.0 - sqrt(x / (1.0 + y))); // F2
break;
case 3:
- quality = 1.0 - ((1.0 + y) * (1.0 - pow(x / (1.0 + y), 2.0))) / 2.0; // F3
+ Fx = (1.0 + y) * (1.0 - pow(x / (1.0 + y), 2.0)); // F3
break;
case 4:
- quality = 1.0 - (((1.0 + y) * (1.0 - sqrt(x / (1.0 + y)) - (x / (1.0 + y)) * sin(3.14159 * x * 10.0)) + .76) / 2.76);
- break;
+ Fx = (1.0 + y) * (1.0 - sqrt(x / (1.0 + y)) - (x / (1.0 + y)) * sin(3.14159 * x * 10.0));
+ break;
case 5:
x = x * -2.0;
- quality = 1 - (x * x + y * y) / 5.0;
+ Fx = x*x + y*y;
break;
case 6:
x = x * -2.0;
- quality = 1 - ((x + 2.0) * (x + 2.0) + y * y) / 5.0;
+ Fx = (x + 2.0)*(x + 2.0) + y*y;
break;
case 7:
x = x * 4.0;
- quality = 1 - (sqrt(x) + y) / 3.0;
+ Fx = sqrt(x) + y;
break;
case 8:
x = x * 4.0;
- quality = 1 - (sqrt(4.0 - x) + y) / 3.0;
+ Fx = sqrt(4.0 - x) + y;
break;
default:
quality = .001;
}
+ ctx.SetTaskValue(Fx);
+ quality = (args.GetDouble(1) - Fx + .001) / (args.GetDouble(1) - args.GetDouble(2) + .001);
// because want org to only have 1 shot to use outputs for all functions at once, even if they
// output numbers that give a quality of 0 on a function, still want to mark it as completed
More information about the Avida-cvs
mailing list