[Avida-SVN] r2415 - in branches/uml/source: cpu main

hjg at myxo.css.msu.edu hjg at myxo.css.msu.edu
Mon Mar 3 08:04:12 PST 2008


Author: hjg
Date: 2008-03-03 11:04:12 -0500 (Mon, 03 Mar 2008)
New Revision: 2415

Modified:
   branches/uml/source/cpu/cHardwareCPU.cc
   branches/uml/source/cpu/cHardwareCPU.h
   branches/uml/source/main/cMDEAbsenceProperty.cc
   branches/uml/source/main/cMDEExistenceProperty.cc
   branches/uml/source/main/cMDEExpression.h
   branches/uml/source/main/cMDEPrecedenceProperty.cc
   branches/uml/source/main/cMDEProperty.h
   branches/uml/source/main/cMDEPropertyGenerator.cc
   branches/uml/source/main/cMDEPropertyGenerator.h
   branches/uml/source/main/cMDEResponseProperty.cc
   branches/uml/source/main/cMDEUniversalProperty.cc
   branches/uml/source/main/cUMLModel.cc
   branches/uml/source/main/cUMLModel.h
Log:
Added checking for related classes.


Modified: branches/uml/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.cc	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/cpu/cHardwareCPU.cc	2008-03-03 16:04:12 UTC (rev 2415)
@@ -5107,17 +5107,18 @@
 	float val = 0;
 	// Call a function on the model to create this property.
 	// Currently it just uses p
-	std::string s = organism->getUMLModel()->getPropertyGenerator()->getPstring();
-	float intp = organism->getUMLModel()->getPropertyGenerator()->getPInterest();
+	cMDEPropertyGenerator* pg = organism->getUMLModel()->getPropertyGenerator();
+	cMDEPropertyGenerator* pop_pg = m_world->GetPopulation().getUMLModel()->getPropertyGenerator();
 	
+	std::string s = pg->getPstring();
+	float intp = pg->getPInterest();
+	bool related = pg->getP()->getUsesRelatedClasses();
+	
 	if (s != "<null>" ) {
-//		std::string n = organism->getStateDiagram()->getName();
-//		s = n + "." + s;
-//		val = organism->getUMLModel()->addAbsenceProperty(s);
-		val = m_world->GetPopulation().getUMLModel()->getPropertyGenerator()->addAbsenceProperty(s, intp);
+		val = pop_pg->addAbsenceProperty(s, intp, related);
 	}
 	
-	organism->getUMLModel()->getPropertyGenerator()->addPropertyReward(val);
+	pg->addPropertyReward(val);
 
 	return val;
 } 
@@ -5126,17 +5127,20 @@
 { 
 	float val = 0;
 	// Call a function on the model to create this property.
-	std::string s = organism->getUMLModel()->getPropertyGenerator()->getPstring();
-	float intp = organism->getUMLModel()->getPropertyGenerator()->getPInterest();
+	// Currently it just uses p
+	cMDEPropertyGenerator* pg = organism->getUMLModel()->getPropertyGenerator();
+	cMDEPropertyGenerator* pop_pg = m_world->GetPopulation().getUMLModel()->getPropertyGenerator();
 	
+	std::string s = pg->getPstring();
+	float intp = pg->getPInterest();
+	bool related = pg->getP()->getUsesRelatedClasses();
+	
 	if (s != "<null>" ) {
-//		std::string n = organism->getStateDiagram()->getName();
-//		s = n + "." + s;
-//		val = organism->getUMLModel()->addUniversalProperty(s);
-		val = m_world->GetPopulation().getUMLModel()->getPropertyGenerator()->addUniversalProperty(s, intp);
+
+		val = pop_pg->addUniversalProperty(s, intp, related);
 	}
 	
-	organism->getUMLModel()->getPropertyGenerator()->addPropertyReward(val);
+	pg->addPropertyReward(val);
 
 	return val;
 } 
@@ -5145,17 +5149,19 @@
 {
 	float val = 0;
 	// Call a function on the model to create this property.
-	std::string s = organism->getUMLModel()->getPropertyGenerator()->getPstring();
-	float intp = organism->getUMLModel()->getPropertyGenerator()->getPInterest();
+	// Currently it just uses p
+	cMDEPropertyGenerator* pg = organism->getUMLModel()->getPropertyGenerator();
+	cMDEPropertyGenerator* pop_pg = m_world->GetPopulation().getUMLModel()->getPropertyGenerator();
 	
+	std::string s = pg->getPstring();
+	float intp = pg->getPInterest();
+	bool related = pg->getP()->getUsesRelatedClasses();
+	
 	if (s != "<null>" ) {
-//		std::string n = organism->getStateDiagram()->getName();
-//		s = n + "." + s;
-//		val = organism->getUMLModel()->addExistenceProperty(s);
-		val = m_world->GetPopulation().getUMLModel()->getPropertyGenerator()->addExistenceProperty(s, intp);
+		val = pop_pg->addExistenceProperty(s, intp, related);
 	}
 	
-	organism->getUMLModel()->getPropertyGenerator()->addPropertyReward(val);
+	pg->addPropertyReward(val);
 		
 	return val;
 } 
@@ -5163,18 +5169,21 @@
 bool cHardwareCPU::Inst_PrecedenceProperty(cAvidaContext& ctx)
 {
 	float val = 0;
-	// Call a function on the model to create this property.
-	std::string p = organism->getUMLModel()->getPropertyGenerator()->getPstring();
-	std::string q = organism->getUMLModel()->getPropertyGenerator()->getQstring();
-	float intp = organism->getUMLModel()->getPropertyGenerator()->getPInterest();
-	float intq = organism->getUMLModel()->getPropertyGenerator()->getQInterest();
+	cMDEPropertyGenerator* pg = organism->getUMLModel()->getPropertyGenerator();
+	cMDEPropertyGenerator* pop_pg = m_world->GetPopulation().getUMLModel()->getPropertyGenerator();
+	
+	std::string p = pg->getPstring();
+	std::string q = pg->getQstring();
+	float intp = pg->getPInterest();
+	float intq = pg->getQInterest();
 	float inttotal = intp + intq;
+	bool related = pg->areExpressionsRelated(pg->getP(), pg->getQ());
 	
 	if (p != q) {
-		val = m_world->GetPopulation().getUMLModel()->getPropertyGenerator()->addPrecedenceProperty(p, q, inttotal);
+		val = pop_pg->addPrecedenceProperty(p, q, inttotal, related);
 	}
 	
-	organism->getUMLModel()->getPropertyGenerator()->addPropertyReward(val);
+	pg->addPropertyReward(val);
 	
 	return val;
 } 
@@ -5182,18 +5191,22 @@
 bool cHardwareCPU::Inst_ResponseProperty(cAvidaContext& ctx)
 {
 	float val = 0;
-	// Call a function on the model to create this property.
-	std::string p = organism->getUMLModel()->getPropertyGenerator()->getPstring();
-	std::string q = organism->getUMLModel()->getPropertyGenerator()->getQstring();
-	float intp = organism->getUMLModel()->getPropertyGenerator()->getPInterest();
-	float intq = organism->getUMLModel()->getPropertyGenerator()->getQInterest();
+	cMDEPropertyGenerator* pg = organism->getUMLModel()->getPropertyGenerator();
+	cMDEPropertyGenerator* pop_pg = m_world->GetPopulation().getUMLModel()->getPropertyGenerator();
+	
+	std::string p = pg->getPstring();
+	std::string q = pg->getQstring();
+	float intp = pg->getPInterest();
+	float intq = pg->getQInterest();
 	float inttotal = intp + intq;
+	bool related = pg->areExpressionsRelated(pg->getP(), pg->getQ());
 	
+	
 	if (p != q) {
-		val = m_world->GetPopulation().getUMLModel()->getPropertyGenerator()->addResponseProperty(p, q, inttotal);
+		val = pop_pg->addResponseProperty(p, q, inttotal, related);
 	}
 	
-	organism->getUMLModel()->getPropertyGenerator()->addPropertyReward(val);
+	pg->addPropertyReward(val);
 	
 	return val;
 } 

Modified: branches/uml/source/cpu/cHardwareCPU.h
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.h	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/cpu/cHardwareCPU.h	2008-03-03 16:04:12 UTC (rev 2415)
@@ -59,6 +59,9 @@
 #ifndef cPopulation_h
 #include "cPopulation.h"
 #endif
+#ifndef CMDEPROPERTYGENERATOR_H
+#include "cMDEPropertyGenerator.h"
+#endif
 
 #ifndef defs_h
 #include "defs.h"

Modified: branches/uml/source/main/cMDEAbsenceProperty.cc
===================================================================
--- branches/uml/source/main/cMDEAbsenceProperty.cc	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEAbsenceProperty.cc	2008-03-03 16:04:12 UTC (rev 2415)
@@ -85,7 +85,8 @@
 	outfile.open (file_name.c_str());
 	assert(outfile.is_open());
 	
-	outfile << "Globally, it is never the case that " << _expr_p  << " holds.     " << _interesting << std::endl << std::endl;
+	outfile << "Globally, it is never the case that " << _expr_p  << " holds.     "; 
+	outfile << _interesting << "     " << _uses_related_classes << std::endl << std::endl;
 	
 	outfile.close();
 	

Modified: branches/uml/source/main/cMDEExistenceProperty.cc
===================================================================
--- branches/uml/source/main/cMDEExistenceProperty.cc	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEExistenceProperty.cc	2008-03-03 16:04:12 UTC (rev 2415)
@@ -57,7 +57,8 @@
 	outfile.open (file_name.c_str());
 	assert(outfile.is_open());
 	
-	outfile << "Globally, " << _expr_p  << " eventually holds.     " << _interesting << std::endl<< std::endl;
+	outfile << "Globally, " << _expr_p  << " eventually holds.     "; 
+	outfile << _interesting << "     " << _uses_related_classes << std::endl << std::endl;
 	
 	outfile.close();
 	

Modified: branches/uml/source/main/cMDEExpression.h
===================================================================
--- branches/uml/source/main/cMDEExpression.h	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEExpression.h	2008-03-03 16:04:12 UTC (rev 2415)
@@ -58,7 +58,7 @@
 	void setUsedClassNames(std::set<std::string> s) { _used_class_names = s; }	
 	std::set<std::string> getUsedClassNames() { return _used_class_names; }
 	
-	bool isUsesRelatedClasses() { return _uses_related_classes; } 
+	bool getUsesRelatedClasses() { return _uses_related_classes; } 
 	void setUsesRelatedClasses(bool t) { _uses_related_classes = t; }
 		
 protected:

Modified: branches/uml/source/main/cMDEPrecedenceProperty.cc
===================================================================
--- branches/uml/source/main/cMDEPrecedenceProperty.cc	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEPrecedenceProperty.cc	2008-03-03 16:04:12 UTC (rev 2415)
@@ -85,7 +85,9 @@
 	assert(outfile.is_open());
 	
 	outfile << "Globally, it is always the case that if " << _expr_p  << " holds, ";
-	outfile << "then "<< _expr_q << " previously held.     " << _interesting << std::endl << std::endl;
+	outfile << "then "<< _expr_q << " previously held.     "; 
+	outfile << _interesting << "     " << _uses_related_classes << std::endl << std::endl;
+
 	
 	outfile.close();
 	

Modified: branches/uml/source/main/cMDEProperty.h
===================================================================
--- branches/uml/source/main/cMDEProperty.h	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEProperty.h	2008-03-03 16:04:12 UTC (rev 2415)
@@ -41,11 +41,18 @@
 	void setInterestingProperty(float inter) {_interesting = inter; }
 	float getInteresting() { return _interesting; }
 	
+	// These functions get and set whether the expressions used by the property
+	// involve classes that are (or are not) related to one another. 
+	// This information is calculated and set by the property generator class.
+	void setUsesRelatedClasses( bool r) { _uses_related_classes = r; }
+	bool getUsesRelatedClasses() { return _uses_related_classes; }
+	
 		
 protected:
 	std::string _scope;
 	float _reward;
 	float _interesting;
+	bool _uses_related_classes;
 	
 };
 

Modified: branches/uml/source/main/cMDEPropertyGenerator.cc
===================================================================
--- branches/uml/source/main/cMDEPropertyGenerator.cc	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEPropertyGenerator.cc	2008-03-03 16:04:12 UTC (rev 2415)
@@ -9,7 +9,7 @@
 
 using namespace std;
 
-cMDEPropertyGenerator::cMDEPropertyGenerator() {
+cMDEPropertyGenerator::cMDEPropertyGenerator(bool rcm) {
   //init property data
   expression_p = 0;
   expression_q = 0;
@@ -27,6 +27,7 @@
   m_precedence_property_failure =0;
   m_response_property_success =0;
   m_response_property_failure =0;
+  m_related_class_mode = rcm; 
 }
 
 
@@ -49,7 +50,7 @@
 }
 
 
-float cMDEPropertyGenerator::addExistenceProperty(std::string s, float i)
+float cMDEPropertyGenerator::addExistenceProperty(std::string s, float i, bool related)
 {
 	// a pointer to the existence property
 	float val = 0;	
@@ -57,6 +58,7 @@
 	
 	cMDEExistenceProperty e(s);
 	
+	
 	// first, try to find the property
 	std::set<cMDEProperty*, ltcMDEProperty>::iterator mdepropiter = mdeprops.find(&e);
 	if (mdepropiter != mdeprops.end()) {
@@ -64,6 +66,7 @@
 		val += (*mdepropiter)->getInteresting();
 	} else {
 		e.setInterestingProperty(interesting);
+		e.setUsesRelatedClasses(related);
 		e.evaluate();
 		val = e.getEvaluationInformation();
 		mdeprops.insert(new cMDEExistenceProperty(e));
@@ -77,10 +80,13 @@
 		}
 	}
 	
+	if ((m_related_class_mode == 2) && (related == 1)) { val += .5; }
+	if ((m_related_class_mode == 3) && (related == 0)) { val =0; }
+	
 	return val;
 }
 
-float cMDEPropertyGenerator::addAbsenceProperty(std::string s, float i)
+float cMDEPropertyGenerator::addAbsenceProperty(std::string s, float i, bool related)
 {
 	// a pointer to the absence property
 	float val = 0;
@@ -107,11 +113,14 @@
 		}
 	}
 	
+	if ((m_related_class_mode == 2) && (related == 1)) { val += .5; }
+	if ((m_related_class_mode == 3) && (related == 0)) { val =0; }
+	
 	return val;
 	
 }
 
-float cMDEPropertyGenerator::addUniversalProperty(std::string s, float i)
+float cMDEPropertyGenerator::addUniversalProperty(std::string s, float i, bool related)
 {
 	// a pointer to the universal property
 	float val = 0;	
@@ -138,12 +147,18 @@
 		}
 	}
 	
+	if ((m_related_class_mode == 2) && (related == 1)) { val += .5; }
+	if ((m_related_class_mode == 3) && (related == 0)) { val =0; }
+	
 	return val;
 	
 }
 
 
-float cMDEPropertyGenerator::addResponseProperty(std::string s1, std::string s2, float i)
+float cMDEPropertyGenerator::addResponseProperty(std::string s1, 
+												 std::string s2, 
+												 float i, 
+												 bool related)
 {
 	// a pointer to the universal property
 	float val = 0;	
@@ -169,10 +184,17 @@
 			e.setInterestingProperty(0);
 		}
 	}
+	
+	if ((m_related_class_mode == 2) && (related == 1)) { val += .5; }
+	if ((m_related_class_mode == 3) && (related == 0)) { val =0; }
+
 	return val;
 }
 
-float cMDEPropertyGenerator::addPrecedenceProperty(std::string s1, std::string s2, float i)
+float cMDEPropertyGenerator::addPrecedenceProperty(std::string s1, 
+												   std::string s2, 
+												   float i, 
+												   bool related)
 {
 	// a pointer to the universal property
 	float val = 0;	
@@ -200,6 +222,10 @@
 
 		}
 	}
+	
+	if ((m_related_class_mode == 2) && (related == 1)) { val += .5; }
+	if ((m_related_class_mode == 3) && (related == 0)) { val =0; }
+
 	return val;	
 	
 }
@@ -214,6 +240,7 @@
 	// set related class names
 	e->setRelatedClassNames(rcs);
 	e->addUsedClassName(c);
+	e->addRelatedClassName(c);
 	e->setUsesRelatedClasses(true);
 		
 	std::vector<cMDEExpression*>::iterator exprit;
@@ -238,6 +265,7 @@
 	// set related class names
 	e->setRelatedClassNames(rcs);
 	e->addUsedClassName(a1->getClassName());
+	e->addRelatedClassName(a1->getClassName());
 	e->setUsesRelatedClasses(true);
 	
 	std::vector<cMDEExpression*>::iterator exprit;
@@ -261,6 +289,7 @@
 	// set related class names
 	e->setRelatedClassNames(rcs);
 	e->addUsedClassName(a1->getClassName());
+	e->addRelatedClassName(a1->getClassName());
 	e->setUsesRelatedClasses(true);
 
 	std::vector<cMDEExpression*>::iterator exprit;
@@ -281,26 +310,20 @@
 {
 	bool val = false;
 	cMDECompoundExpression* e = new cMDECompoundExpression(e1, e2, op); 
-	
-	// Get the related class names of expression 1
-	// Get the used class names of expression 2
-	std::set<std::string> rcns = e1->getRelatedClassNames();
-	std::set<std::string> ucns = e2->getUsedClassNames();
-	
+		
 	// determine if it uses related classes
-	bool test = includes(rcns.begin(), rcns.end(), ucns.begin(), ucns.end());
-	e->setUsesRelatedClasses(test);
+	e->setUsesRelatedClasses(areExpressionsRelated(e1, e2));
 	
 	// set related class names
 	e->setRelatedClassNames(e1->getRelatedClassNames()); 
-	rcns = e2->getRelatedClassNames();
+	std::set<std::string> rcns = e2->getRelatedClassNames();
 	for (std::set<std::string>::iterator it = rcns.begin(); it!=rcns.end(); it++) { 
 		e->addRelatedClassName(*it);
 	}
 	
 	// set used class names
 	e->setUsedClassNames(e1->getUsedClassNames()); 
-	ucns = e2->getUsedClassNames();
+	std::set<std::string> ucns = e2->getUsedClassNames();
 	for (std::set<std::string>::iterator it = ucns.begin(); it!=ucns.end(); it++) { 
 		e->addUsedClassName(*it);
 	}	
@@ -353,13 +376,41 @@
 void cMDEPropertyGenerator::printExpressions() 
 {
 	std::vector<cMDEExpression*>::iterator exprit;
+	std::set<std::string> used_class_names;
+	std::set<std::string> related_class_names;
+	std::set<std::string>::iterator it;
+	
 	int count =0; 
 	for (exprit = expressions.begin(); exprit < expressions.end(); exprit++){
+		used_class_names = (*exprit)->getUsedClassNames(); 
+		related_class_names = (*exprit)->getRelatedClassNames();
 		std::cout << count << " " << (*exprit)->getExpr() << std::endl;
+		std::cout << "     uses related classes: " << (*exprit)->getUsesRelatedClasses() << std::endl;
+		std::cout << "     used class names: " << std::endl;
+		for (it = used_class_names.begin(); it!=used_class_names.end(); it++) {
+			std::cout << "          " << (*it) << std::endl;
+		}
+		std::cout << "     related class names: " << std::endl;
+		for (it = related_class_names.begin(); it!=related_class_names.end(); it++) {
+			std::cout << "          " << (*it) << std::endl;
+		}
+		
 		count++;
 	}
 
 }
 
 
+bool cMDEPropertyGenerator::areExpressionsRelated(cMDEExpression* e1, cMDEExpression* e2)
+{
+	// Get the related class names of expression 1
+	// Get the used class names of expression 2
+	std::set<std::string> rcns = e1->getRelatedClassNames();
+	std::set<std::string> ucns = e2->getUsedClassNames();
+	
+	// determine if it uses related classes
+	bool test = includes(rcns.begin(), rcns.end(), ucns.begin(), ucns.end());
+	
+	return test;
+}
 

Modified: branches/uml/source/main/cMDEPropertyGenerator.h
===================================================================
--- branches/uml/source/main/cMDEPropertyGenerator.h	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEPropertyGenerator.h	2008-03-03 16:04:12 UTC (rev 2415)
@@ -26,7 +26,7 @@
 
 class cMDEPropertyGenerator { 
 public:
-	cMDEPropertyGenerator();
+	cMDEPropertyGenerator(bool);
 	~cMDEPropertyGenerator();
 	
 	// Get info about the properties satisfied by the model.
@@ -67,11 +67,11 @@
 																											  
 
 	// Properties
-	float addExistenceProperty(std::string, float);
-	float addAbsenceProperty(std::string, float);
-	float addUniversalProperty(std::string, float);
-	float addResponseProperty(std::string, std::string, float);
-	float addPrecedenceProperty(std::string, std::string, float);
+	float addExistenceProperty(std::string, float, bool);
+	float addAbsenceProperty(std::string, float, bool);
+	float addUniversalProperty(std::string, float, bool);
+	float addResponseProperty(std::string, std::string, float, bool);
+	float addPrecedenceProperty(std::string, std::string, float, bool);
 
 //	bool addExpression(std::string, std::set<std::string>);  
 //	bool relatedExpressions(cMDEExpression*, cMDEExpression*); 
@@ -99,6 +99,7 @@
 	bool absoluteMoveExpressionQ(int x) { return absoluteMoveIndex(expressions, expression_q, x); }
 	bool relativeMoveExpressionR(int x) { return relativeMoveIndex(expressions, expression_r, x); }
 	bool absoluteMoveExpressionR(int x) { return absoluteMoveIndex(expressions, expression_r, x); }
+	bool areExpressionsRelated(cMDEExpression*, cMDEExpression*);
 	
 	bool ANDExpressions();
 	bool ORExpressions();
@@ -159,6 +160,7 @@
 	int m_response_property_success;
 	int m_response_property_failure;
 	float m_property_reward;
+	int m_related_class_mode;
 	
 
 	// vector of expressions

Modified: branches/uml/source/main/cMDEResponseProperty.cc
===================================================================
--- branches/uml/source/main/cMDEResponseProperty.cc	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEResponseProperty.cc	2008-03-03 16:04:12 UTC (rev 2415)
@@ -72,7 +72,8 @@
 	assert(outfile.is_open());
 	
 	outfile << "Globally, it is always the case that if " << _expr_p  << " holds, ";
-	outfile << "then "<< _expr_q << " eventually holds.     " << _interesting  << std::endl << std::endl;
+	outfile << "then "<< _expr_q << " eventually holds.     "; 
+	outfile << _interesting << "     " << _uses_related_classes << std::endl << std::endl;
 	
 	outfile.close();
 	

Modified: branches/uml/source/main/cMDEUniversalProperty.cc
===================================================================
--- branches/uml/source/main/cMDEUniversalProperty.cc	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cMDEUniversalProperty.cc	2008-03-03 16:04:12 UTC (rev 2415)
@@ -85,8 +85,8 @@
 	outfile.open (file_name.c_str());
 	assert(outfile.is_open());
 	
-	outfile << "Globally, it is always the case that " << _expr_p  << " holds.     " << _interesting << std::endl << std::endl;
+	outfile << "Globally, it is always the case that " << _expr_p  << " holds.     ";
+	outfile << _interesting << "     " << _uses_related_classes << std::endl << std::endl;
 	
-	outfile.close();
-	
-}
\ No newline at end of file
+	outfile.close();	
+}

Modified: branches/uml/source/main/cUMLModel.cc
===================================================================
--- branches/uml/source/main/cUMLModel.cc	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cUMLModel.cc	2008-03-03 16:04:12 UTC (rev 2415)
@@ -70,7 +70,8 @@
                    std::vector<scenario_info>& scenarios,
                    int& hydra_mode, 
 				   bool& witness_mode, 
-				   int& gen_mode) {
+				   int& gen_mode, 
+				   int& related_class_mode) {
   std::string data, line; 
 	int cur_class = -1;
 	int num_classes;
@@ -95,6 +96,7 @@
 			infile >> temp1 >> hydra_mode;
 			infile >> temp1 >> witness_mode;
 			infile >> temp1 >> gen_mode;
+			infile >> temp1 >> related_class_mode;
 			// resize state diagrams & classes to correspond to the number of classes.
 			classes.resize(num_classes);
 			state_diagrams.resize(classes.size());
@@ -257,11 +259,12 @@
 int cUMLModel::_cfg_hydra_mode;
 bool cUMLModel::_cfg_witness_mode;
 int cUMLModel::_cfg_gen_mode;
+int cUMLModel::_cfg_related_class_mode;
 
 
 cUMLModel::cUMLModel(const char* seed_model) {
   if(!_cfgLoaded) {
-    seed_diagrams(seed_model, _cfg_classes, _cfg_state_diagrams, _cfg_scenarios, _cfg_hydra_mode, _cfg_witness_mode, _cfg_gen_mode);
+    seed_diagrams(seed_model, _cfg_classes, _cfg_state_diagrams, _cfg_scenarios, _cfg_hydra_mode, _cfg_witness_mode, _cfg_gen_mode, _cfg_related_class_mode);
     _cfgLoaded = true;
   }
   
@@ -271,9 +274,10 @@
   hydraMode = _cfg_hydra_mode; 
   witnessMode = _cfg_witness_mode;
   genMode = _cfg_gen_mode;
+  relatedClassMode = _cfg_related_class_mode;
   
   // Initialize the property generator.
-  gen = new cMDEPropertyGenerator();
+  gen = new cMDEPropertyGenerator(_cfg_related_class_mode);
   createExpressionsFromClasses();
 }
 

Modified: branches/uml/source/main/cUMLModel.h
===================================================================
--- branches/uml/source/main/cUMLModel.h	2008-03-03 14:37:02 UTC (rev 2414)
+++ branches/uml/source/main/cUMLModel.h	2008-03-03 16:04:12 UTC (rev 2415)
@@ -109,6 +109,7 @@
 	bool readyForHydra(); 
 	bool getWitnessMode() {return witnessMode; }
 	int getGenMode() { return genMode; }
+	int getRelatedClassMode() { return relatedClassMode; }
 //	float checkProperties();
 	
 
@@ -125,6 +126,10 @@
 	bool witnessMode;
 	// Mode 0 = model generation; mode 1 = property generation
 	int genMode;
+	// Mode 0 = print
+	// Mode 1 = contribute to interest + print
+	// Mode 2 = forbid unrelated + print
+	int relatedClassMode;
 	
   // The following are set once per Avida experiment, when the first cUMLModel is constructed:
   static bool _cfgLoaded; //!< Whether or not we've already loaded seed-model.cfg.
@@ -135,6 +140,8 @@
   static int _cfg_hydra_mode; //!< Execution mode for hydra, as read from seed-model.cfg.
   static bool _cfg_witness_mode; //!< Execution mode for hydra, as read from seed-model.cfg.
   static int _cfg_gen_mode; //!< Generation mode, as read from seed-model.cfg.
+  static int _cfg_related_class_mode; //!< Related class mode, as read from seed-model.cfg
+								  // where 0 = print, 1 = interest + print, 2 = forbid + print
   
   cMDEPropertyGenerator* gen; 
 




More information about the Avida-cvs mailing list