[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<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>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 >=0 & brightnessValue<=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