[Avida-SVN] r3065 - in branches/hjg-dev/source: cpu main
hjg at myxo.css.msu.edu
hjg at myxo.css.msu.edu
Fri Dec 19 15:54:19 PST 2008
Author: hjg
Date: 2008-12-19 18:54:19 -0500 (Fri, 19 Dec 2008)
New Revision: 3065
Modified:
branches/hjg-dev/source/cpu/cHardwareCPU.cc
branches/hjg-dev/source/main/cAvidaConfig.h
branches/hjg-dev/source/main/cTaskLib.cc
branches/hjg-dev/source/main/cTaskLib.h
Log:
bug fixes. sigh.
Modified: branches/hjg-dev/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/hjg-dev/source/cpu/cHardwareCPU.cc 2008-12-19 21:46:02 UTC (rev 3064)
+++ branches/hjg-dev/source/cpu/cHardwareCPU.cc 2008-12-19 23:54:19 UTC (rev 3065)
@@ -7425,7 +7425,12 @@
if (strings_to_match.size()) len = strings_to_match[0].GetSize();
// organism->SetAverageReputation(max);
int rep = (max - floor(len/2));
- if (rep > 0) organism->AddReputation(rep);
+
+ if (m_world->GetConfig().STRING_REPUTATION.Get() == 0) {
+ organism->SetAverageReputation(rep);
+ } else if ((m_world->GetConfig().STRING_REPUTATION.Get() == 1) && (rep > 0)){
+ organism->AddReputation(rep);
+ }
}
Modified: branches/hjg-dev/source/main/cAvidaConfig.h
===================================================================
--- branches/hjg-dev/source/main/cAvidaConfig.h 2008-12-19 21:46:02 UTC (rev 3064)
+++ branches/hjg-dev/source/main/cAvidaConfig.h 2008-12-19 23:54:19 UTC (rev 3065)
@@ -569,10 +569,8 @@
CONFIG_ADD_VAR(DONATION_FAILURE_PERCENT, int, 0, "Percentage of times that a donation fails");
CONFIG_ADD_VAR(RANDOMIZE_RAW_MATERIAL_AMOUNT, int, 0, "Should all the organisms receive the same amount 0/1 (off/on)");
CONFIG_ADD_VAR(DONATION_RESTRICTIONS, int, 0, "0=none\n1=inter-species only\n2=different tag only");
- CONFIG_ADD_VAR(INHERIT_REPUTATION, int, 0, "0=reputation are not inherited\n1=reputations are inherited\n2=tags are inherited");
- CONFIG_ADD_VAR(MATCH_PERCENT, int, 0, "0=percentage above chance\n1=percentage");
- CONFIG_ADD_VAR(STRING_MATCH, int, 0, "0=only production\n1=production and donation");
-
+ CONFIG_ADD_VAR(INHERIT_REPUTATION, int, 0, "0=reputations are not inherited\n1=reputations are inherited\n2=tags are inherited");
+ CONFIG_ADD_VAR(STRING_REPUTATION, int, 0, "0=reputation is average\n2=reputation is additive");
#endif
Modified: branches/hjg-dev/source/main/cTaskLib.cc
===================================================================
--- branches/hjg-dev/source/main/cTaskLib.cc 2008-12-19 21:46:02 UTC (rev 3064)
+++ branches/hjg-dev/source/main/cTaskLib.cc 2008-12-19 23:54:19 UTC (rev 3065)
@@ -359,6 +359,8 @@
if (name == "strcat")
Load_StrCat(name, info, envreqs, errors);
+ else if(name == "all_strings")
+ Load_AllStrings(name, info, envreqs, errors);
if (name == "sort_inputs")
Load_SortInputs(name, info, envreqs, errors);
@@ -433,9 +435,8 @@
NewTask(name, "Consume raw materials", &cTaskLib::Task_ConsumeRawMaterials);
else if(name == "save_raw_mat")
NewTask(name, "Save raw materials", &cTaskLib::Task_SaveRawMaterials);
- else if(name == "all_strings")
- NewTask(name, "Produce or collect all strings", &cTaskLib::Task_AllStrings);
+
// event tasks
if(name == "move_to_event")
NewTask(name, "Moved into cell containing event", &cTaskLib::Task_MoveToEvent);
@@ -1995,13 +1996,13 @@
double base_bonus = 0;
//static_cast<double>(max_num_matched) * 2.0 / static_cast<double>(string_to_match.GetSize()) - 1;
- if (m_world->GetConfig().MATCH_PERCENT.Get() == 0) {
+// if (m_world->GetConfig().MATCH_PERCENT.Get() == 0) {
// percent over 50% (Sherri)
base_bonus = static_cast<double>(max_num_matched) * 2.0 / static_cast<double>(string_to_match.GetSize()) - 1;
- } else if (m_world->GetConfig().MATCH_PERCENT.Get() == 1) {
+// } else if (m_world->GetConfig().MATCH_PERCENT.Get() == 1) {
// percent (hjg)
- base_bonus = static_cast<double>(max_num_matched) / static_cast<double>(string_to_match.GetSize());
- }
+ // base_bonus = static_cast<double>(max_num_matched) / static_cast<double>(string_to_match.GetSize());
+ //}
if (partial)
@@ -2088,8 +2089,7 @@
std::pair < int, int > best_string;
int donated_string;
- // Check if the organism received this string
- if (m_world->GetConfig().STRING_MATCH.Get()==1) {
+
best_string = ctx.GetOrganism()->MatchString(string_to_match);
num_matched = best_string.first;
donated_string = num_matched;
@@ -2097,19 +2097,18 @@
max_num_matched = num_matched;
// max_org_id = best_string.second;
}
- }
-
+
double bonus = 0.0;
double base_bonus = 0.0;
- if (m_world->GetConfig().MATCH_PERCENT.Get() == 0) {
+ //if (m_world->GetConfig().MATCH_PERCENT.Get() == 0) {
// percent over 50% (Sherri)
base_bonus = static_cast<double>(max_num_matched) * 2.0 / static_cast<double>(string_to_match.GetSize()) - 1;
- } else if (m_world->GetConfig().MATCH_PERCENT.Get() == 1) {
+// } else if (m_world->GetConfig().MATCH_PERCENT.Get() == 1) {
// percent (hjg)
- base_bonus = static_cast<double>(max_num_matched) / static_cast<double>(string_to_match.GetSize());
- }
+ // base_bonus = static_cast<double>(max_num_matched) / static_cast<double>(string_to_match.GetSize());
+ //}
if (partial)
@@ -2124,12 +2123,22 @@
}
+/* This loads the string cat parameters.*/
+void cTaskLib::Load_AllStrings(const cString& name, const cString& argstr, cEnvReqs& envreqs, tList<cString>* errors)
+{
+ cArgSchema schema;
+ schema.AddEntry("returnval",0, 0);
+ cArgContainer* args = cArgContainer::Load(argstr, schema, errors);
+ if (args) NewTask(name, "AllStrings", &cTaskLib::Task_AllStrings, 0, args);
+}
double cTaskLib::Task_AllStrings(cTaskContext& ctx) const
{
// Check if the organism either created or received as a donation ;
// if it misses one, then fail it.
tBuffer<int> temp_buf(ctx.GetOutputBuffer());
+ int return_type = ctx.GetTaskEntry()->GetArguments().GetInt(0);
+
cString string_to_match; // = ctx.GetTaskEntry()->GetArguments().GetString(0);
// int binary = ctx.GetTaskEntry()->GetArguments().GetInt(1);
@@ -2137,10 +2146,10 @@
int num_matched = 0;
//int test_output;
int max_num_matched = 0;
- int sum_matched;
+ double sum_matched = 0;
int num_real=0;
double bonus = 0;
- int total_size = 0;
+ double total_size = 0;
// Given the desired string, pass it to the organism which will
@@ -2167,11 +2176,16 @@
total_size += string_to_match.GetSize();
}
+
if (sum_matched == total_size) {
m_world->GetStats().IncPerfectMatch();
}
- bonus = sum_matched/total_size;
+ if (return_type) {
+ bonus = sum_matched/total_size;
+ } else if (sum_matched == total_size) {
+ bonus = 1;
+ }
return bonus;
}
Modified: branches/hjg-dev/source/main/cTaskLib.h
===================================================================
--- branches/hjg-dev/source/main/cTaskLib.h 2008-12-19 21:46:02 UTC (rev 3064)
+++ branches/hjg-dev/source/main/cTaskLib.h 2008-12-19 23:54:19 UTC (rev 3065)
@@ -252,6 +252,7 @@
double Task_MatchNumber(cTaskContext& ctx) const;
void Load_StrCat(const cString& name, const cString& argstr, cEnvReqs& envreqs, tList<cString>* errors);
double Task_StrCat(cTaskContext& ctx) const;
+ void Load_AllStrings(const cString& name, const cString& argstr, cEnvReqs& envreqs, tList<cString>* errors);
double Task_AllStrings(cTaskContext& ctx) const;
More information about the Avida-cvs
mailing list