[Avida-SVN] r1891 - branches/uml/source/main
hjg at myxo.css.msu.edu
hjg at myxo.css.msu.edu
Mon Aug 6 07:10:06 PDT 2007
Author: hjg
Date: 2007-08-06 10:10:06 -0400 (Mon, 06 Aug 2007)
New Revision: 1891
Modified:
branches/uml/source/main/cStats.cc
branches/uml/source/main/cStats.h
branches/uml/source/main/cTaskLib.cc
branches/uml/source/main/cUMLStateDiagram.cc
Log:
Looping scenario code
Modified: branches/uml/source/main/cStats.cc
===================================================================
--- branches/uml/source/main/cStats.cc 2007-08-02 19:18:18 UTC (rev 1890)
+++ branches/uml/source/main/cStats.cc 2007-08-06 14:10:06 UTC (rev 1891)
@@ -1008,7 +1008,7 @@
df.Write( GetUpdate(), "update" );
df.Write( av_number_of_states.Average(), "av num states");
df.Write( av_number_of_trans.Average(), "av num trans");
- df.Write( av_number_of_triggers.Average(), "av num triggers");
+/* df.Write( av_number_of_triggers.Average(), "av num triggers");
df.Write( av_number_of_guards.Average(), "av num guards");
df.Write( av_number_of_actions.Average(), "av num actions");
df.Write( av_number_of_state_diagrams.Average(), "av num state diagrams");
@@ -1024,8 +1024,10 @@
df.Write( m_N2Attempt.Sum(), "total number of spin N2 attempts" );
df.Write( m_N2Passed.Sum(), "total number of spin N2 passes" );
df.Write( m_N1andN2Passed.Sum(), "total number of spin N1 & N2 passes");
+*/
df.Write( m_scenario5.Sum(), "total number of scenario 5 all transitions");
- df.Write( m_scenario6.Sum(), "total number of scenario 5 all transitions");
+ df.Write( m_scenario5loop.Sum(), "total number of scenario 5 all transitions - might loop");
+ df.Write( m_scenario6loop.Sum(), "total number of scenario 6 all transitions - might loop");
av_number_of_states.Clear();
@@ -1034,7 +1036,6 @@
av_number_of_guards.Clear();
av_number_of_actions.Clear();
av_number_of_state_diagrams.Clear();
-
av_number_of_trans_lab.Clear();
m_hydraAttempt.Clear();
@@ -1050,7 +1051,8 @@
m_N1andN2Passed.Clear();
m_scenario5.Clear();
m_scenario6.Clear();
+ m_scenario5loop.Clear();
+ m_scenario6loop.Clear();
-
df.Endl();
}
Modified: branches/uml/source/main/cStats.h
===================================================================
--- branches/uml/source/main/cStats.h 2007-08-02 19:18:18 UTC (rev 1890)
+++ branches/uml/source/main/cStats.h 2007-08-06 14:10:06 UTC (rev 1891)
@@ -271,9 +271,10 @@
cDoubleSum m_N1andN2Passed;
cDoubleSum m_scenario5;
cDoubleSum m_scenario6;
+ cDoubleSum m_scenario5loop;
+ cDoubleSum m_scenario6loop;
-
cStats(); // @not_implemented
cStats(const cStats&); // @not_implemented
cStats& operator=(const cStats&); // @not_implemented
@@ -655,6 +656,8 @@
void N1andN2Passed() { m_N1andN2Passed.Add(1); }
void scenario5Complete() { m_scenario5.Add(1); }
void scenario6Complete() { m_scenario6.Add(1); }
+ void scenario5Loop() { m_scenario5loop.Add(1); }
+ void scenario6Loop() { m_scenario6loop.Add(1); }
};
Modified: branches/uml/source/main/cTaskLib.cc
===================================================================
--- branches/uml/source/main/cTaskLib.cc 2007-08-02 19:18:18 UTC (rev 1890)
+++ branches/uml/source/main/cTaskLib.cc 2007-08-06 14:10:06 UTC (rev 1891)
@@ -3120,13 +3120,34 @@
if (org->getParentXMI() != org->getUMLModel()->getXMI()) {
// create the scenario
- path1.push_back("[]/");
path1.push_back("timerEvent[]/");
path1.push_back("[]/^SensorInterface.readSensor()");
path1.push_back("sensorData[]/");
path1.push_back("[obstacle=1]/^WheelActuatorInterface.stop()");
- path1.push_back("stopped[]/");
+ path1.push_back("wheelStopped[]/");
path1.push_back("[]/^NavigationControl.suspend()");
+ path1.push_back("[]/^SensorInterface.readSensor()");
+ path1.push_back("sensorData[]/");
+ path1.push_back("[]/^NavigationControl.restart()");
+// sequence is repeated to encourage looping.
+ path1.push_back("timerEvent[]/");
+ path1.push_back("[]/^SensorInterface.readSensor()");
+ path1.push_back("sensorData[]/");
+ path1.push_back("[obstacle=1]/^WheelActuatorInterface.stop()");
+ path1.push_back("wheelStopped[]/");
+ path1.push_back("[]/^NavigationControl.suspend()");
+ path1.push_back("[]/^SensorInterface.readSensor()");
+ path1.push_back("sensorData[]/");
+ path1.push_back("[]/^NavigationControl.restart()");
+ path1.push_back("timerEvent[]/");
+ path1.push_back("[]/^SensorInterface.readSensor()");
+ path1.push_back("sensorData[]/");
+ path1.push_back("[obstacle=1]/^WheelActuatorInterface.stop()");
+ path1.push_back("wheelStopped[]/");
+ path1.push_back("[]/^NavigationControl.suspend()");
+ path1.push_back("[]/^SensorInterface.readSensor()");
+ path1.push_back("sensorData[]/");
+ path1.push_back("[]/^NavigationControl.restart()");
// check for scneario
bonus = ((org->getUMLModel()->getStateDiagram(0)->findPath(path1))); // / path1.size());
@@ -3136,7 +3157,7 @@
}
// Track in stats.
- if (bonus == 7) {
+ if (bonus == 9) {
m_world->GetStats().scenario5Complete();
}
@@ -3156,12 +3177,19 @@
if (org->getParentXMI() != org->getUMLModel()->getXMI()) {
// create the scenario
- path1.push_back("[]/");
path1.push_back("timerEvent[]/");
path1.push_back("[]/^SensorInterface.readSensor()");
path1.push_back("sensorData[]/");
path1.push_back("[obstacle=0]/");
-
+// sequence is repeated to encourage looping.
+ path1.push_back("timerEvent[]/");
+ path1.push_back("[]/^SensorInterface.readSensor()");
+ path1.push_back("sensorData[]/");
+ path1.push_back("[obstacle=0]/");
+ path1.push_back("timerEvent[]/");
+ path1.push_back("[]/^SensorInterface.readSensor()");
+ path1.push_back("sensorData[]/");
+ path1.push_back("[obstacle=0]/");
// check for scneario
bonus = ((org->getUMLModel()->getStateDiagram(0)->findPath(path1))); // / path1.size());
@@ -3171,9 +3199,9 @@
}
// Track in stats.
- if (bonus == 5) {
+ if (bonus == 4) {
m_world->GetStats().scenario6Complete();
- }
+ }
// Set bonus info for current model
org->getUMLModel()->setBonusInfo("scenario6", bonus);
@@ -3498,8 +3526,8 @@
(organism->getUMLModel()->getBonusInfo("spinw2") == 0)) {
return bonus;
} */
- if ((organism->getUMLModel()->getBonusInfo("scenario5") != 7) ||
- (organism->getUMLModel()->getBonusInfo("scenario6") != 5)) {
+ if ((organism->getUMLModel()->getBonusInfo("scenario5") != 6) ||
+ (organism->getUMLModel()->getBonusInfo("scenario6") != 4)) {
return bonus;
}
@@ -3512,6 +3540,8 @@
bonus /= mt;
}
+ if (bonus > 5) bonus = 5;
+
return bonus;
}
Modified: branches/uml/source/main/cUMLStateDiagram.cc
===================================================================
--- branches/uml/source/main/cUMLStateDiagram.cc 2007-08-02 19:18:18 UTC (rev 1890)
+++ branches/uml/source/main/cUMLStateDiagram.cc 2007-08-06 14:10:06 UTC (rev 1891)
@@ -29,10 +29,10 @@
// This function accepts a path throught the state diagram as a deque and returns the length
// of the longest path segment that the diagram satisfies.
// The function is complicated by the fact that the longest path segment could start at the
-// beginning, middle, or end of the path itself AND the path could begin at any reachable vertex.
+// beginning, middle, or end of the path itself.
+// Currently the path must begin at the 0 vertex.
int cUMLStateDiagram::findPath(std::deque<std::string> p) {
unsigned int path_dist = 0; // the current path distance satisfied is 0.
-// int path_total_length = p.size();
// int path_longest_length = 0;
unsigned int len = 0;
int num_vert = num_vertices(sd0);
More information about the Avida-cvs
mailing list