[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