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

hjg at myxo.css.msu.edu hjg at myxo.css.msu.edu
Fri Nov 24 10:47:02 PST 2006


Author: hjg
Date: 2006-11-24 13:46:53 -0500 (Fri, 24 Nov 2006)
New Revision: 1098

Modified:
   branches/uml/source/cpu/cHardwareCPU.cc
   branches/uml/source/main/cOrganism.cc
   branches/uml/source/main/cOrganism.h
   branches/uml/source/main/cTaskLib.cc
   branches/uml/source/main/cTaskLib.h
Log:
Transitions and states are represented as ints. The brightness sensor is hardcoded as an example. The organism is able to print both XMI and HIL. 


Modified: branches/uml/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.cc	2006-11-22 20:56:59 UTC (rev 1097)
+++ branches/uml/source/cpu/cHardwareCPU.cc	2006-11-24 18:46:53 UTC (rev 1098)
@@ -3434,7 +3434,7 @@
 	int reg_used = FindModifiedRegister(REG_AX);
 	int trans = GetRegister(reg_used);
 	
-// the origin and destination states are determined by the values in reg a and reg b.
+// the origin and destination states are determined by the values in reg b and reg c.
 // both registers could be modified by a nop...
 	reg_used = FindModifiedRegister(REG_BX);
     int orig_state = GetRegister(reg_used);
@@ -3444,15 +3444,16 @@
 	// add states to set of states 
 	organism->uml_state_set.insert(orig_state);
 	organism->uml_state_set.insert(dest_state);
+	organism->uml_trans_set.insert(pair<int, std::string>(trans, ""));
 	
-	// add trans to set of transitions
-	organism->uml_trans_set.insert(trans);
-	
 	// add transition to multipmap
 	pair<int, int> st;
 	st = make_pair (orig_state, dest_state);	
 	organism->uml_transitions.insert(pair<int, pair<int, int> >(trans, st));
 
+	// add transition to mapping by state
+	st = make_pair (trans, dest_state);
+	organism->uml_trans_by_state.insert(pair<int, pair<int, int> >(orig_state, st));
 	
 	return true;
 

Modified: branches/uml/source/main/cOrganism.cc
===================================================================
--- branches/uml/source/main/cOrganism.cc	2006-11-22 20:56:59 UTC (rev 1097)
+++ branches/uml/source/main/cOrganism.cc	2006-11-24 18:46:53 UTC (rev 1098)
@@ -78,6 +78,10 @@
   
   if (m_world->GetConfig().NET_ENABLED.Get()) m_net = new cNetSupport();
   m_id = m_world->GetStats().GetTotCreatures();
+
+  // initialize the transition information vector w/ the XMI info for transitions
+  InitTransForHIL();
+
 }
 
 
@@ -404,6 +408,10 @@
 /// This function is a copy of DoOutput /// 
 void cOrganism::ModelCheck(cAvidaContext& ctx)
 {
+
+//  printXMI(ctx);
+	printHIL(ctx);
+
   assert(m_interface);
   const tArray<double> & resource_count = m_interface->GetResources();
 
@@ -433,6 +441,7 @@
       other_output_list.Push( &(cur_neighbor->output_buf) );
     }
   }
+ 
   
 //  bool net_valid = false;
 //  if (m_net) net_valid = NetValidate(ctx, value);
@@ -458,8 +467,169 @@
   
 }
 
+void cOrganism::printHIL(cAvidaContext& ctx)
+{
+	int curr_state;
+	std::map <int, std::string>::iterator itr;
+	InitTransForHIL();
+	
+	for (t_transitionMap::iterator it = uml_trans_by_state.begin(); it != uml_trans_by_state.end(); ++it) {
+	
+		// initialize the value of current state... 
+		if (it == uml_trans_by_state.begin() ) {
+			curr_state = (*it).first;
+			cout << "Initial  \"\" " << (*it).first << ";" << endl;
+			cout << "State " << (*it).first << " {" << endl;
+		}
+		// what to do when the state we are processing transitions for changes...
+		if (curr_state != (*it).first) {
+			curr_state = (*it).first;
+			// finish previous state
+			cout << "}" << endl;
+			// add into for next state
+			cout << "State " << (*it).first << " {" << endl;
+		}
+		
+		// print out transition information....
+		// find trans in set of trans
+		if ( (itr = uml_trans_set.find((*it).second.first)) != uml_trans_set.end()) {
+			cout << "Transition \"" << (*itr).second << "\" to " << (*it).second.second << ";" << endl;
+		} 
+		
+		uml_state_set.erase((*it).first);
+		
+	}
+	cout << "}" << endl;
+	
+	// print info for states with no outgoing transitions
+	for (std::set<int>::iterator its = uml_state_set.begin(); its!= uml_state_set.end(); ++its) {
+		cout << "State " << (*its) << endl;
+		cout << "}" << endl;
+	}
+	
+}
 
+void cOrganism::printXMI(cAvidaContext& ctx)
+{
 
+// UML pretty print part....
+  std::set<int>::iterator it_st_start;
+  std::set<int>::iterator it_st_end;
+  std::set<int>::iterator i;
+
+  
+  it_st_start = uml_state_set.begin();
+  it_st_end = uml_state_set.end();
+  int count;
+
+  // print state XMI information
+  cout << "<UML:StateMachine xmi.id=\"XDE-BACD03B9-FA04-4C7F-B464-748CB92A47B2\"";
+  cout << "name=\"StateMachine1\" isSpecification=\"false\">" << endl;
+  cout << "<UML:StateMachine.top>" << endl;  
+  cout << "<UML:CompositeState xmi.id=\"XDE-3C5902C0-E8A6-4E0C-88D5-4ACB7E0EDF15\"";
+  cout << "isConcurrent=\"false\" name=\"TOP\" isSpecification=\"false\">" << endl;
+  cout << "<UML:CompositeState.subvertex>" << endl;
+
+  for(i = it_st_start; i!=it_st_end; ++i){
+    if (i == it_st_start) { 
+		  // initial state 
+//		cout << "<UML:Pseudostate xmi.id=\"" << *i << "\" kind=\"initial\" outgoing=\"\"";
+		cout << "<UML:Pseudostate xmi.id=\"" << *i << "\" kind=\"initial\" ";
+		cout << "name=\"\" isSpecification=\"false\"/>" << endl;
+
+	} else {
+//		cout << "<UML:CompositeState xmi.id=\"" << *i << "\" isConcurrent=\"false\" outgoing=\"\" name=\"";
+		cout << "<UML:CompositeState xmi.id=\"" << *i << "\" isConcurrent=\"false\" name=\"";
+		cout << *i << "\" isSpecification=\"false\"/>" << endl;
+	}
+  }
+  cout << "</UML:CompositeState.subvertex>" << endl;
+  cout << "</UML:CompositeState>" << endl;
+  cout << "</UML:StateMachine.top>" << endl;
+
+
+  count = 0;
+  cout << "<UML:StateMachine.transitions>" << endl;
+  for (t_transitionMap::iterator it = uml_transitions.begin(); it != uml_transitions.end(); ++it) {
+	 cout << "<UML:Transition xmi.id=\"" << (*it).first << "\" source=\"" << (*it).second.first;
+	 cout << "\" target=\"" <<  (*it).second.second << "\" name=\"" <<  (*it).first;
+	 cout << "\" isSpecification=\"false\">" << endl;
+	 
+	 if (trans_info.size() > count) {
+		 cout << trans_info[count] << endl;
+	 }
+	 cout << "</UML:Transition>" << endl;
+
+	 count ++;
+  }
+  
+  cout << "</UML:StateMachine.transitions>" << endl;
+  cout << "</UML:StateMachine>" << endl;
+
+// end of UML pretty printing... 
+
+}
+
+
+void cOrganism::InitTransForXMI()
+{
+	//  0 - init state to state 1
+	trans_info.push_back("");
+	// 1 - state 1 to state 2 - getOperationalState()
+	trans_info.push_back("<UML:Transition.trigger> <UML:Event> <UML:ModelElement.namespace> <UML:Namespace> <UML:Namespace.ownedElement> <UML:CallEvent xmi.id=\"XDE-7126ED39-5D5D-4160-924B-303514B17EAB\" operation=\"XDE-1266DA8A-61C0-43B4-A77C-200F54A6585D\" name=\"getOperationalState\" isSpecification=\"false\"/> </UML:Namespace.ownedElement></UML:Namespace> </UML:ModelElement.namespace> </UML:Event> </UML:Transition.trigger> ");
+	// 2 - state 2 to state 1 - opState = True
+	trans_info.push_back("<UML:Transition.effect> <UML:UninterpretedAction xmi.id=\"XDE-D9BCD8D1-7FC4-4B14-9E76-D3A642799013\" isAsynchronous=\"false\" name=\"\" isSpecification=\"false\"> <UML:Action.script> <UML:ActionExpression language=\"\" body=\"operationalState:=1;^ComputingComponent.ccTRUE\"/>` </UML:Action.script> </UML:UninterpretedAction> </UML:Transition.effect>");
+	// 3 - state 2 to state 1 - opState = False
+	trans_info.push_back ("<UML:Transition.effect> <UML:UninterpretedAction xmi.id=\"XDE-9F00136E-D61D-4BB0-B7D6-1E795238FD1E\" isAsynchronous=\"false\" name=\"\" isSpecification=\"false\"> <UML:Action.script> <UML:ActionExpression language=\"\" body=\"operationalState:=0;^ComputingComponent.ccFALSE\"/> </UML:Action.script> </UML:UninterpretedAction> </UML:Transition.effect>");
+	// 4 - state 1 to state 3 - getBrightnessValue()
+	trans_info.push_back ("<UML:Transition.trigger> <UML:Event> <UML:ModelElement.namespace> <UML:Namespace> <UML:Namespace.ownedElement> <UML:CallEvent xmi.id=\"XDE-A28463C5-2F9F-457C-B6F3-241526CA4791\" operation=\"XDE-E84A5762-CA92-4E03-A237-FE5AE2C99D9A\" name=\"getBrightnessValue\" isSpecification=\"false\"/> </UML:Namespace.ownedElement> </UML:Namespace> </UML:ModelElement.namespace> </UML:Event> </UML:Transition.trigger>"); 
+	// 5 - state 3 to state 4 - Environment.getBrightnessValue();
+	trans_info.push_back ("<UML:Transition.effect> <UML:UninterpretedAction xmi.id=\"XDE-6C3D3042-5C7A-4746-8A90-BEDB86FD2FF4\" isAsynchronous=\"false\" name=\"\" isSpecification=\"false\"> <UML:Action.script> <UML:ActionExpression language=\"\" body=\"^Environment.getBrightnessValue\"/> </UML:Action.script> </UML:UninterpretedAction> </UML:Transition.effect>" ) ;
+	// 6 - state 4 to state 5 - setBrightnessValue();
+	trans_info.push_back ("<UML:Transition.trigger> <UML:Event> <UML:ModelElement.namespace> <UML:Namespace> <UML:Namespace.ownedElement> <UML:CallEvent xmi.id=\"XDE-79243838-9C4E-4908-9637-9F9583043BE4\" operation=\"XDE-C8BD0DBA-E427-41A0-95F4-98FAA920ACA9\" name=\"setBrightnessValue\" isSpecification=\"false\"/> </UML:Namespace.ownedElement> </UML:Namespace>  </UML:ModelElement.namespace> </UML:Event>  </UML:Transition.trigger>");
+	// 7 - state 5 to state 6 - value < min
+	trans_info.push_back ("<UML:Transition.guard> <UML:Guard> <UML:Guard.expression> <UML:BooleanExpression body=\"brightnessValue&lt;0\" language=\"\"/> </UML:Guard.expression> </UML:Guard> </UML:Transition.guard> <UML:Transition.effect> <UML:UninterpretedAction xmi.id=\"XDE-0B7A10EB-A9FC-4DE8-BBF1-AF1C9A970E7F\" isAsynchronous=\"false\" name=\"\" isSpecification=\"false\"> <UML:Action.script> <UML:ActionExpression language=\"\" body=\"correctedBrightnessValue:=0\"/> </UML:Action.script> </UML:UninterpretedAction> </UML:Transition.effect>");
+	// 8 - state 5 to state 6 - value > max
+	trans_info.push_back ("<UML:Transition.guard> <UML:Guard> <UML:Guard.expression> <UML:BooleanExpression body=\"brightnessValue&gt;1000\" language=\"\"/> </UML:Guard.expression> </UML:Guard> </UML:Transition.guard> <UML:Transition.effect> <UML:UninterpretedAction xmi.id=\"XDE-7D6DDE48-7568-4043-B00A-87EFBE1A6CB3\" isAsynchronous=\"false\" name=\"\" isSpecification=\"false\"> <UML:Action.script> <UML:ActionExpression language=\"\" body=\"correctedBrightnessValue:=1000\"/> </UML:Action.script> </UML:UninterpretedAction> </UML:Transition.effect>");
+	// 9 - state 5 to state 6 - value > min && value < max
+	trans_info.push_back ("<UML:Transition.guard> <UML:Guard> <UML:Guard.expression> <UML:BooleanExpression body=\"brightnessValue &gt;=0 &amp; brightnessValue&lt;=1000\" language=\"\"/> </UML:Guard.expression> </UML:Guard> </UML:Transition.guard> <UML:Transition.effect> <UML:UninterpretedAction xmi.id=\"XDE-8E3B2DF6-D63B-4A70-9CD3-FF0DE13EEDAD\" isAsynchronous=\"false\" name=\"\" isSpecification=\"false\"> <UML:Action.script> <UML:ActionExpression language=\"\" body=\"correctedBrightnessValue:=brightnessValue\"/> </UML:Action.script> </UML:UninterpretedAction> </UML:Transition.effect>");
+	// 10 - state 6 to state 1 - set Computing Component brightness value
+	trans_info.push_back("<UML:Transition.effect> <UML:UninterpretedAction xmi.id=\"XDE-101E5C46-12EA-4169-9DC9-D3661EE9836B\" isAsynchronous=\"false\" name=\"\" isSpecification=\"false\"> <UML:Action.script> <UML:ActionExpression language=\"\" body=\"^ComputingComponent.setBrightnessValue(brightnessValue)\"/> </UML:Action.script> </UML:UninterpretedAction> </UML:Transition.effect>");
+	
+}
+
+void cOrganism::InitTransForHIL()
+{
+
+	// assign transition values to map elements
+	std::map <int, std::string>::iterator it;
+	 
+	if (uml_trans_set.size() >= 6) {
+	it = uml_trans_set.begin();
+	(*it).second = "";
+	++it;
+	(*it).second = "^Environment.getBrightnessValue";
+	++it;
+	(*it).second = "/operationalState:=1^ComputingComponent.ccTRUE";
+	++it;
+	(*it).second = "/operationalState:=0^ComputingComponent.ccFALSE";
+	++it;
+	(*it).second = "getOperationalState";
+	++it;
+	(*it).second = "getBrightnessValue";
+/*	++it;
+	(*it).second = "^ComputingComponent.setBrightnessValue(brightnessValue)";
+	++it;
+	(*it).second = "[brightnessValue<0]/correctedBrightnessValue:=0";
+	++it;
+	(*it).second = "[brightnessValue >=0 & brightnessValue<=1000]/correctedBrightnessValue:=brightnessValue";
+	++it;
+	(*it).second = "[brightnessValue>1000]/correctedBrightnessValue:=1000";
+	++it;
+	(*it).second = "setBrightnessValue(brightnessValue)";*/
+	}
+}
+
 bool cOrganism::InjectParasite(const cGenome& injected_code)
 {
   assert(m_interface);

Modified: branches/uml/source/main/cOrganism.h
===================================================================
--- branches/uml/source/main/cOrganism.h	2006-11-22 20:56:59 UTC (rev 1097)
+++ branches/uml/source/main/cOrganism.h	2006-11-24 18:46:53 UTC (rev 1098)
@@ -15,9 +15,8 @@
 #include <map>
 #include <utility>
 #include <set>
-//#include <multimap>
-//#include <string>
-//using namespace std;
+#include <string>
+#include <vector>
 
 
 #ifndef cCPUMemory_h
@@ -197,12 +196,17 @@
   // UML Stuff
   t_stateMap uml_states;
   t_transitionMap uml_transitions;
+  t_transitionMap uml_trans_by_state;
   std::set <int> uml_state_set;
-  std::set <int> uml_trans_set;
+  std::map <int, std::string> uml_trans_set;
   void ModelCheck(cAvidaContext& ctx);
+  void printXMI(cAvidaContext& ctx);
+  void printHIL(cAvidaContext& ctx);
+  std::vector<std::string> trans_info;
+  void InitTransForXMI();
+  void InitTransForHIL();
 
 
-
   bool InjectParasite(const cGenome& genome);
   bool InjectHost(const cCodeLabel& in_label, const cGenome& genome);
   void AddParasite(cInjectGenotype* cur) { m_parasites.Push(cur); }

Modified: branches/uml/source/main/cTaskLib.cc
===================================================================
--- branches/uml/source/main/cTaskLib.cc	2006-11-22 20:56:59 UTC (rev 1097)
+++ branches/uml/source/main/cTaskLib.cc	2006-11-24 18:46:53 UTC (rev 1098)
@@ -324,20 +324,8 @@
 	  NewTask(name, "Successfully Received Network Message", &cTaskLib::Task_NetReceive);
   
   // UML tasks
-  if (name == "uml_stA")
-	NewTask(name, "Successfully Created State A", &cTaskLib::Task_CreateStateA);
-  else if (name == "uml_stB")
-	NewTask(name, "Successfully Created State B", &cTaskLib::Task_CreateStateB);	
-  else if (name == "uml_stC")
-	NewTask(name, "Successfully Created State C", &cTaskLib::Task_CreateStateC);
-  else if (name == "uml_sts")
+  if (name == "uml_sts")
 	NewTask(name, "Successfully Created the right number of states", &cTaskLib::Task_CreateStates);  
-  else if (name == "uml_trA") 
-	NewTask(name, "Successfully Created Transition A", &cTaskLib::Task_CreateTransA);  
-  else if (name == "uml_trB") 
-	NewTask(name, "Successfully Created Transition B", &cTaskLib::Task_CreateTransB);  	
-  else if (name == "uml_trC") 
-	NewTask(name, "Successfully Created Transition C", &cTaskLib::Task_CreateTransC);  
   else if (name == "uml_trX") 
 	NewTask(name, "Successfully Created all transitions", &cTaskLib::Task_CreateTransX);  	
   else if (name == "uml_trs")
@@ -1848,41 +1836,7 @@
   return 0.0;
 }
 
-double cTaskLib::Task_CreateStateA(cTaskContext* ctx) const
-{
-	cOrganism* org = ctx->organism; 
-	cOrganism::t_stateMap::iterator i;
 
-	if ( (i = org->uml_states.find(0)) != org->uml_states.end()) {
-		return 1.0;	
-		}
-	return 0.0;	
-}
-
-double cTaskLib::Task_CreateStateB(cTaskContext* ctx) const
-{
-	cOrganism* org = ctx->organism; 
-	cOrganism::t_stateMap::iterator i;
-	
-	if ( (i = org->uml_states.find(1)) != org->uml_states.end()) {
-		return 1.0;
-		}
-	return 0.0;	
-}
-
-double cTaskLib::Task_CreateStateC(cTaskContext* ctx) const
-{
-	
-	cOrganism* org = ctx->organism; 
-	cOrganism::t_stateMap::iterator i;
-	
-	if ( (i = org->uml_states.find(2)) != org->uml_states.end()) {
-		return 1.0;
-		}
-	return 0.0;	
-}
-
-
 double cTaskLib::Task_CreateStates(cTaskContext* ctx) const
 {
 	cOrganism* organism = ctx->organism; 
@@ -1896,179 +1850,7 @@
 	return bonus;
 }
 
-double cTaskLib::Task_CreateTransA(cTaskContext* ctx) const
-{
 
-	std::pair<cOrganism::tr_it, cOrganism::tr_it> trans_range;
-	std::pair<int, int> st;
-	cOrganism* organism = ctx->organism; 
-	cOrganism::tr_it i;
-	double bonus = 0.0;
-	std::set<int>::iterator it;
-	int state1, state2, state3, trans;
-	
-		
-	if ((organism->uml_state_set.size() > 3) && (organism->uml_trans_set.size() > 0)) {
-		// get the 3 states
-		it = organism->uml_state_set.begin();
-		state1 = *it;
-		it++;
-		state2 = *it;
-		it++;
-		state3 = *it;
-		it = organism->uml_trans_set.begin();
-		trans = *it;
-		
-
-		// reward for each transition 
-//		int key_0 = organism->uml_transitions.begin()->first();
-		trans_range = organism->uml_transitions.equal_range(trans);
-		for(i=trans_range.first; i!=trans_range.second; ++i) {
-			st = i->second;
-			
-			if ((st.first == state1) && (st.second == state2)) {
-				bonus += 1.0;
-				break;
-			}
-		}
-	}	
-	return bonus;	
-/*	std::pair<cOrganism::tr_it, cOrganism::tr_it> trans_range;
-	std::pair<int, int> st;
-	cOrganism* org = ctx->organism; 
-	cOrganism::tr_it i;
-	
-	trans_range = org->uml_transitions.equal_range(0);
-	for(i=trans_range.first; i!=trans_range.second; ++i) {
-		st = i->second;
-		
-		if ((st.first == 0) && (st.second == 1)) {
-			return 1.0;
-		}
-		
-	}
-	
-	return 0.0;	
-*/	
-}
-
-double cTaskLib::Task_CreateTransB(cTaskContext* ctx) const
-{
-	std::pair<cOrganism::tr_it, cOrganism::tr_it> trans_range;
-	std::pair<int, int> st;
-	cOrganism* organism = ctx->organism; 
-	cOrganism::tr_it i;
-	double bonus = 0.0;
-	std::set<int>::iterator it;
-	int state1, state2, state3, trans;
-	
-		
-	if ((organism->uml_state_set.size() > 3) && (organism->uml_trans_set.size() > 1)) {
-		// get the 3 states
-		it = organism->uml_state_set.begin();
-		state1 = *it;
-		it++;
-		state2 = *it;
-		it++;
-		state3 = *it;
-		it = organism->uml_trans_set.begin();
-		it++;
-		trans = *it;
-	
-		// reward for each transition 
-		trans_range = organism->uml_transitions.equal_range(trans);
-		for(i=trans_range.first; i!=trans_range.second; ++i) {
-			st = i->second;
-			
-			if ((st.first == state2) && (st.second == state3)) {
-				bonus += 1.0;
-				break;
-			}
-		}
-	}
-	return bonus;
-
-/*
-	std::pair<cOrganism::tr_it, cOrganism::tr_it> trans_range;
-	std::pair<int, int> st;
-	cOrganism* org = ctx->organism; 
-	cOrganism::tr_it i;
-	
-	trans_range = org->uml_transitions.equal_range(1);
-	for(i=trans_range.first; i!=trans_range.second; ++i) {
-		st = i->second;
-		
-		if ((st.first == 1) && (st.second == 2)) {
-			return 1.0;
-		}
-		
-	}
-	
-	return 0.0;	
-*/	
-
-}
-
-double cTaskLib::Task_CreateTransC(cTaskContext* ctx) const
-{
-
-	std::pair<cOrganism::tr_it, cOrganism::tr_it> trans_range;
-	std::pair<int, int> st;
-	cOrganism* organism = ctx->organism; 
-	cOrganism::tr_it i;
-	double bonus = 0.0;
-	std::set<int>::iterator it;
-	int state1, state2, state3, trans;
-	
-		
-	if ((organism->uml_state_set.size() > 3)  && (organism->uml_trans_set.size() > 2)) {
-		// get the 3 states
-		it = organism->uml_state_set.begin();
-		state1 = *it;
-		it++;
-		state2 = *it;
-		it++;
-		state3 = *it;
-		it = organism->uml_trans_set.begin();
-		it++;
-		trans = *it;
-
-	
-	
-		// reward for each transition 
-		trans_range = organism->uml_transitions.equal_range(trans);
-		for(i=trans_range.first; i!=trans_range.second; ++i) {
-			st = i->second;
-			
-			if ((st.first == state3) && (st.second == state1)) {
-				bonus += 1.0;
-				break;
-			}
-		}
-	
-	}
-
-	return bonus;	
-
-/*	std::pair<cOrganism::tr_it, cOrganism::tr_it> trans_range;
-	std::pair<int, int> st;
-	cOrganism* org = ctx->organism; 
-	cOrganism::tr_it i;
-	
-	trans_range = org->uml_transitions.equal_range(2);
-	for(i=trans_range.first; i!=trans_range.second; ++i) {
-		st = i->second;
-		
-		if ((st.first == 2) && (st.second == 0)) {
-			return 1.0;
-		}
-		
-	}
-	
-	return 0.0;	
-*/	
-}
-
 double cTaskLib::Task_CreateTransX(cTaskContext* ctx) const
 {
 	std::pair<cOrganism::tr_it, cOrganism::tr_it> trans_range;
@@ -2077,11 +1859,14 @@
 	cOrganism::tr_it i;
 	double bonus = 0.0;
 	std::set<int>::iterator it;
+	cOrganism::t_transitionMap::iterator it2; 
 	int state0, state1, state2, state3, state4, state5, state6;
 	int trans1, trans2, trans3, trans4, trans5, trans6, trans7;
-	int trans8, trans9, trans10, trans11;
-		
-	if ((organism->uml_state_set.size() > 6) && (organism->uml_trans_set.size() > 10)){
+	int trans8, trans9, trans10, trans0;
+	
+
+
+	if ((organism->uml_state_set.size() > 6) && (organism->uml_transitions.size() > 10)){		
 		// get the 7 states
 		it = organism->uml_state_set.begin();
 		state0 = *it;
@@ -2098,29 +1883,42 @@
 		it++;
 		state6 = *it;
 
-		it = organism->uml_trans_set.begin();
-		trans1 = *it;
-		it++;
-		trans2 = *it;
-		it++;
-		trans3 = *it;
-		it++;
-		trans4 = *it;
-		it++;
-		trans5 = *it;
-		it++;
-		trans6 = *it; 
-		it++;
-		trans7 = *it;
-		it++;
-		trans8 = *it;
-		it++;
-		trans9 = *it;
-		it++;
-		trans11 = *it;
+		it2 = organism->uml_transitions.begin();
+		trans0 = (*it2).first;
+		it2++;
+		trans1 = (*it2).first;
+		it2++;
+		trans2 = (*it2).first;
+		it2++;
+		trans3 = (*it2).first;
+		it2++;
+		trans4 = (*it2).first;
+		it2++;
+		trans5 = (*it2).first;
+		it2++;
+		trans6 = (*it2).first; 
+		it2++;
+		trans7 = (*it2).first;
+		it2++;
+		trans8 = (*it2).first;
+		it2++;
+		trans9 = (*it2).first;
+
 	
 	
 	// reward for each transition 
+		// transition 0
+		trans_range = organism->uml_transitions.equal_range(trans3);
+		for(i=trans_range.first; i!=trans_range.second; ++i) {
+			st = i->second;
+			
+			if ((st.first == state0) && (st.second == state1)) {
+
+				bonus += 1.0;
+				break;
+			}
+		}
+		
 		// transition 1
 		trans_range = organism->uml_transitions.equal_range(trans1);
 		for(i=trans_range.first; i!=trans_range.second; ++i) {
@@ -2239,17 +2037,7 @@
 			}
 		}
 		
-		// transition 11
-		trans_range = organism->uml_transitions.equal_range(trans3);
-		for(i=trans_range.first; i!=trans_range.second; ++i) {
-			st = i->second;
-			
-			if ((st.first == state0) && (st.second == state1)) {
-
-				bonus += 1.0;
-				break;
-			}
-		}
+		
 	
 	}
 
@@ -2262,8 +2050,8 @@
 	double bonus = 0.0;
 	
 	// reward for constructing 7 states - brightness sensor
-	if (organism->uml_trans_set.size() <= 11) {
-		bonus += organism->uml_trans_set.size();
+	if (organism->uml_transitions.size() <= 11) {
+		bonus += organism->uml_transitions.size();
 	} 
 
 	return bonus;

Modified: branches/uml/source/main/cTaskLib.h
===================================================================
--- branches/uml/source/main/cTaskLib.h	2006-11-22 20:56:59 UTC (rev 1097)
+++ branches/uml/source/main/cTaskLib.h	2006-11-24 18:46:53 UTC (rev 1098)
@@ -230,13 +230,7 @@
   double Task_NetReceive(cTaskContext* ctx) const;
   
   // UML Tasks... 
-  double Task_CreateStateA(cTaskContext* ctx) const;
-  double Task_CreateStateB(cTaskContext* ctx) const;
-  double Task_CreateStateC(cTaskContext* ctx) const;
   double Task_CreateStates(cTaskContext* ctx) const;
-  double Task_CreateTransA(cTaskContext* ctx) const;
-  double Task_CreateTransB(cTaskContext* ctx) const;
-  double Task_CreateTransC(cTaskContext* ctx) const;
   double Task_CreateTransX(cTaskContext* ctx) const;
   double Task_CreateTranss(cTaskContext* ctx) const;
 




More information about the Avida-cvs mailing list