[Avida-SVN] r1798 - in branches/uml: Avida.xcodeproj source/cpu source/main
hjg at myxo.css.msu.edu
hjg at myxo.css.msu.edu
Fri Jul 13 11:30:21 PDT 2007
Author: hjg
Date: 2007-07-13 14:30:21 -0400 (Fri, 13 Jul 2007)
New Revision: 1798
Modified:
branches/uml/Avida.xcodeproj/project.pbxproj
branches/uml/source/cpu/cHardwareCPU.cc
branches/uml/source/cpu/cHardwareCPU.h
branches/uml/source/main/cOrganism.cc
branches/uml/source/main/cStats.cc
branches/uml/source/main/cStats.h
branches/uml/source/main/cTaskContext.h
branches/uml/source/main/cTaskLib.cc
branches/uml/source/main/cTaskLib.h
Log:
Modified: branches/uml/Avida.xcodeproj/project.pbxproj
===================================================================
--- branches/uml/Avida.xcodeproj/project.pbxproj 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/Avida.xcodeproj/project.pbxproj 2007-07-13 18:30:21 UTC (rev 1798)
@@ -23,6 +23,8 @@
/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
+ 3EDCA1BC0C47FAB50078778D /* cUMLModel.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA0150C46C9B70078778D /* cUMLModel.cc */; };
+ 3EDCA1BD0C47FAB70078778D /* cUMLStateDiagram.cc in Sources */ = {isa = PBXBuildFile; fileRef = 3EDCA0170C46C9B70078778D /* cUMLStateDiagram.cc */; };
5629D8110C3EE14800C5F152 /* cTextWindow.cc in Sources */ = {isa = PBXBuildFile; fileRef = 5629D80D0C3EE13500C5F152 /* cTextWindow.cc */; };
5629D8180C3EE20C00C5F152 /* libncurses.5.4.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 70658C59085DF67D00486BED /* libncurses.5.4.dylib */; };
5629D8190C3EE21300C5F152 /* libavida-core.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7023EC330C0A426900362B9C /* libavida-core.a */; };
@@ -834,7 +836,7 @@
DCC315CE076253A5008F7A48 /* environment.rotate */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = environment.rotate; sourceTree = "<group>"; };
DCC315D0076253A5008F7A48 /* task_event_gen.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = task_event_gen.cc; sourceTree = "<group>"; };
DCC315D1076253A5008F7A48 /* task_event_gen.old.cc */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = task_event_gen.old.cc; sourceTree = "<group>"; };
- DCC3164D07626CF3008F7A48 /* avida */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = avida; sourceTree = BUILT_PRODUCTS_DIR; };
+ DCC3164D07626CF3008F7A48 /* avida */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = avida; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -1947,6 +1949,8 @@
7023ECA10C0A431B00362B9C /* SaveLoadActions.cc in Sources */,
70436B280C36C64400A05ABA /* cThread.cc in Sources */,
70436B6C0C36C98900A05ABA /* PlatformExpert.cc in Sources */,
+ 3EDCA1BC0C47FAB50078778D /* cUMLModel.cc in Sources */,
+ 3EDCA1BD0C47FAB70078778D /* cUMLStateDiagram.cc in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -2151,7 +2155,11 @@
7023EC350C0A42BC00362B9C /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
- HEADER_SEARCH_PATHS = "$(inherited)";
+ GCC_ENABLE_CPP_RTTI = YES;
+ HEADER_SEARCH_PATHS = (
+ /opt/local/include,
+ "$(inherited)",
+ );
PRODUCT_NAME = "avida-core";
};
name = Development;
@@ -2159,7 +2167,11 @@
7023EC360C0A42BC00362B9C /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
- HEADER_SEARCH_PATHS = "$(inherited)";
+ GCC_ENABLE_CPP_RTTI = YES;
+ HEADER_SEARCH_PATHS = (
+ /opt/local/include,
+ "$(inherited)",
+ );
PRODUCT_NAME = "avida-core";
};
name = Deployment;
@@ -2167,7 +2179,11 @@
7023EC370C0A42BC00362B9C /* Deployment-G5 */ = {
isa = XCBuildConfiguration;
buildSettings = {
- HEADER_SEARCH_PATHS = "$(inherited)";
+ GCC_ENABLE_CPP_RTTI = YES;
+ HEADER_SEARCH_PATHS = (
+ /opt/local/include,
+ "$(inherited)",
+ );
PRODUCT_NAME = "avida-core";
};
name = "Deployment-G5";
@@ -2175,7 +2191,11 @@
7023EC380C0A42BC00362B9C /* Deployment-Universal */ = {
isa = XCBuildConfiguration;
buildSettings = {
- HEADER_SEARCH_PATHS = "$(inherited)";
+ GCC_ENABLE_CPP_RTTI = YES;
+ HEADER_SEARCH_PATHS = (
+ /opt/local/include,
+ "$(inherited)",
+ );
PRODUCT_NAME = "avida-core";
};
name = "Deployment-Universal";
@@ -2183,7 +2203,11 @@
7023EC390C0A42BC00362B9C /* Profile */ = {
isa = XCBuildConfiguration;
buildSettings = {
- HEADER_SEARCH_PATHS = "$(inherited)";
+ GCC_ENABLE_CPP_RTTI = YES;
+ HEADER_SEARCH_PATHS = (
+ /opt/local/include,
+ "$(inherited)",
+ );
PRODUCT_NAME = "avida-core";
};
name = Profile;
Modified: branches/uml/source/cpu/cHardwareCPU.cc
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.cc 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/cpu/cHardwareCPU.cc 2007-07-13 18:30:21 UTC (rev 1798)
@@ -478,7 +478,15 @@
tInstLibEntry<tMethod>("action-2", &cHardwareCPU::Inst_Action2, false,
"Change to action 2"),
tInstLibEntry<tMethod>("action-3", &cHardwareCPU::Inst_Action3, false,
- "Change to action 3"),
+ "Change to action 3"),
+ tInstLibEntry<tMethod>("action-4", &cHardwareCPU::Inst_Action4, false,
+ "Change to action 4"),
+ tInstLibEntry<tMethod>("action-5", &cHardwareCPU::Inst_Action5, false,
+ "Change to action 5"),
+ tInstLibEntry<tMethod>("action-6", &cHardwareCPU::Inst_Action6, false,
+ "Change to action 6"),
+ tInstLibEntry<tMethod>("action-7", &cHardwareCPU::Inst_Action7, false,
+ "Change to action 7"),
// Placebo instructions
@@ -4907,5 +4915,15 @@
bool cHardwareCPU::Inst_Action3(cAvidaContext& ctx)
{ return (organism->getStateDiagram()->absoluteJumpAction(3)); }
+bool cHardwareCPU::Inst_Action4(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(4)); }
+bool cHardwareCPU::Inst_Action5(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(5)); }
+bool cHardwareCPU::Inst_Action6(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(6)); }
+
+bool cHardwareCPU::Inst_Action7(cAvidaContext& ctx)
+{ return (organism->getStateDiagram()->absoluteJumpAction(7)); }
+
Modified: branches/uml/source/cpu/cHardwareCPU.h
===================================================================
--- branches/uml/source/cpu/cHardwareCPU.h 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/cpu/cHardwareCPU.h 2007-07-13 18:30:21 UTC (rev 1798)
@@ -611,6 +611,10 @@
bool Inst_Action1(cAvidaContext& ctx);
bool Inst_Action2(cAvidaContext& ctx);
bool Inst_Action3(cAvidaContext& ctx);
+ bool Inst_Action4(cAvidaContext& ctx);
+ bool Inst_Action5(cAvidaContext& ctx);
+ bool Inst_Action6(cAvidaContext& ctx);
+ bool Inst_Action7(cAvidaContext& ctx);
};
Modified: branches/uml/source/main/cOrganism.cc
===================================================================
--- branches/uml/source/main/cOrganism.cc 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cOrganism.cc 2007-07-13 18:30:21 UTC (rev 1798)
@@ -599,12 +599,11 @@
if(GetCellID()==-1) return;
m_model.printXMI();
- assert(m_interface);
const tArray<double> & resource_count = m_interface->GetResources();
-
+
tList<tBuffer<int> > other_input_list;
tList<tBuffer<int> > other_output_list;
-
+
// If tasks require us to consider neighbor inputs, collect them...
if (m_world->GetEnvironment().UseNeighborInput()) {
const int num_neighbors = m_interface->GetNumNeighbors();
@@ -612,11 +611,11 @@
m_interface->Rotate();
cOrganism * cur_neighbor = m_interface->GetNeighbor();
if (cur_neighbor == NULL) continue;
-
+
other_input_list.Push( &(cur_neighbor->m_input_buf) );
}
}
-
+
// If tasks require us to consider neighbor outputs, collect them...
if (m_world->GetEnvironment().UseNeighborOutput()) {
const int num_neighbors = m_interface->GetNumNeighbors();
@@ -624,36 +623,47 @@
m_interface->Rotate();
cOrganism * cur_neighbor = m_interface->GetNeighbor();
if (cur_neighbor == NULL) continue;
-
+
other_output_list.Push( &(cur_neighbor->m_output_buf) );
}
}
- // bool net_valid = false;
+// bool net_valid = false;
// if (m_net) net_valid = NetValidate(ctx, value);
-
+
// Do the testing of tasks performed...
-
+
// if on IO add value to m_output_buf, if on divide don't need to
- //if (!on_divide) m_output_buf.Add(value);
+// if(!on_divide) output_buffer.Add(value);
tArray<double> res_change(resource_count.GetSize());
tArray<int> insts_triggered;
- bool clear_input = false;
-
+
tBuffer<int>* received_messages_point = &m_received_messages;
if (!m_world->GetConfig().SAVE_RECEIVED.Get()) received_messages_point = NULL;
- cTaskContext taskctx(m_interface, m_input_buf, m_output_buf, other_input_list, other_output_list, 0, 0, 0, received_messages_point, this);
- m_phenotype.TestOutput(ctx, taskctx, resource_count, res_change, insts_triggered);
+ // Edited for UML branch
+ cTaskContext taskctx(m_interface, m_input_buf, m_output_buf, other_input_list,
+ other_output_list, 0, 0, 0, received_messages_point);
+ bool task_completed = m_phenotype.TestOutput(ctx, taskctx, resource_count, res_change, insts_triggered);
+
+ if(m_world->GetConfig().ENERGY_ENABLED.Get() && m_world->GetConfig().APPLY_ENERGY_METHOD.Get() == 1 && task_completed) {
+ m_phenotype.RefreshEnergy();
+ double newMerit = m_phenotype.ApplyToEnergyStore();
+ if(newMerit != -1) {
+ m_interface->UpdateMerit(newMerit);
+ }
+ }
+
m_interface->UpdateResources(res_change);
+ //if(m_world->GetConfig().CLEAR_ON_OUTPUT.Get()) input_buffer.Clear(); @JEB Not fully implemented
+
for (int i = 0; i < insts_triggered.GetSize(); i++) {
const int cur_inst = insts_triggered[i];
m_hardware->ProcessBonusInst(ctx, cInstruction(cur_inst));
}
- if (clear_input) m_input_buf.Clear();
m_world->GetStats().addState(m_model.numStates());
m_world->GetStats().addTrans(m_model.numTrans());
Modified: branches/uml/source/main/cStats.cc
===================================================================
--- branches/uml/source/main/cStats.cc 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cStats.cc 2007-07-13 18:30:21 UTC (rev 1798)
@@ -996,3 +996,46 @@
}
df.Endl();
}
+
+
+void cStats::PrintUMLData(const cString& filename)
+{
+ cDataFile& df = m_world->GetDataFile(filename);
+
+ df.WriteComment( "Avida uml data\n" );
+ df.WriteComment("the average number of transitions and states per organism");
+ df.WriteTimeStamp();
+ 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_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");
+ df.Write( av_number_of_trans_lab.Average(), "av num of trans lab");
+ df.Write( m_hydraAttempt.Sum(), "total number of hydra attempts" );
+ df.Write( m_hydraPassed.Sum(), "total number of hydra passes" );
+ df.Write( m_spinAttempt.Sum(), "total number of spin attempts" );
+ df.Write( m_spinPassed.Sum(), "total number of spin passes" );
+ df.Write( m_panAttempt.Sum(), "total number of pan attempts" );
+ df.Write( m_panPassed.Sum(), "total number of pan passes" );
+
+ av_number_of_states.Clear();
+ av_number_of_trans.Clear();
+ av_number_of_triggers.Clear();
+ 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();
+ m_hydraPassed.Clear();
+ m_spinAttempt.Clear();
+ m_spinPassed.Clear();
+ m_panAttempt.Clear();
+ m_panPassed.Clear();
+
+
+df.Endl();
+}
Modified: branches/uml/source/main/cStats.h
===================================================================
--- branches/uml/source/main/cStats.h 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cStats.h 2007-07-13 18:30:21 UTC (rev 1798)
@@ -249,6 +249,23 @@
tArray<int> sense_last_exe_count;
tArray<cString> sense_names;
+// Stats for UML state diagrams
+ cDoubleSum av_number_of_states;
+ cDoubleSum av_number_of_trans;
+ cDoubleSum av_number_of_triggers;
+ cDoubleSum av_number_of_guards;
+ cDoubleSum av_number_of_actions;
+ cDoubleSum av_number_of_state_diagrams;
+
+ cDoubleSum av_number_of_trans_lab;
+ cDoubleSum m_hydraAttempt;
+ cDoubleSum m_hydraPassed;
+ cDoubleSum m_spinAttempt;
+ cDoubleSum m_spinPassed;
+ cDoubleSum m_panAttempt;
+ cDoubleSum m_panPassed;
+
+
cStats(); // @not_implemented
cStats(const cStats&); // @not_implemented
cStats& operator=(const cStats&); // @not_implemented
@@ -605,7 +622,26 @@
void PrintMarketData(const cString& filename);
void PrintSenseData(const cString& filename);
void PrintSenseExeData(const cString& filename);
+ void PrintUMLData(const cString& filename);
+
+ // UML Data Function
+ void addState(int x) { av_number_of_states.Add(x); }
+ void addTrans(int x) { av_number_of_trans.Add(x); }
+ void addTriggers(int x) { av_number_of_triggers.Add(x); }
+ void addGuards(int x) { av_number_of_guards.Add(x); }
+ void addActions(int x) { av_number_of_actions.Add(x); }
+ void addStateDiagrams(int x) { av_number_of_state_diagrams.Add(x); }
+
+ void addTransLabel(int x) { av_number_of_trans_lab.Add(x); }
+ void HydraAttempt() { m_hydraAttempt.Add(1); }
+ void HydraPassed() { m_hydraPassed.Add(1); }
+ void SpinAttempt() { m_spinAttempt.Add(1); }
+ void SpinPassed() { m_spinPassed.Add(1); }
+ void PanAttempt() { m_panAttempt.Add(1); }
+ void PanPassed() { m_panPassed.Add(1); }
+
+
};
Modified: branches/uml/source/main/cTaskContext.h
===================================================================
--- branches/uml/source/main/cTaskContext.h 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cTaskContext.h 2007-07-13 18:30:21 UTC (rev 1798)
@@ -37,6 +37,9 @@
#ifndef tHashTable_h
#include "tHashTable.h"
#endif
+#ifndef cOrganism
+#include "cOrganism.h"
+#endif
class cTaskEntry;
class cTaskState;
@@ -55,7 +58,9 @@
tBuffer<int>* m_received_messages;
int m_logic_id;
bool m_on_divide;
+
+
// for optimize tasks actual value of function org is outputting, for all others nothing
// implemented for now...
double m_task_value;
@@ -63,11 +68,18 @@
cTaskEntry* m_task_entry;
tHashTable<void*, cTaskState*>* m_task_states;
+
public:
+
+ // For UML branch - Note: should eventually be made private.
+ bool m_task_success_complete;
+ cOrganism* organism;
+
+
cTaskContext(cOrgInterface* interface, const tBuffer<int>& inputs, const tBuffer<int>& outputs,
const tList<tBuffer<int> >& other_inputs, const tList<tBuffer<int> >& other_outputs,
bool in_net_valid, int in_net_completed, bool in_on_divide = false,
- tBuffer<int>* in_received_messages = NULL)
+ tBuffer<int>* in_received_messages = NULL, cOrganism* in_org = NULL)
: m_interface(interface)
, m_input_buffer(inputs)
, m_output_buffer(outputs)
@@ -80,6 +92,8 @@
, m_on_divide(in_on_divide)
, m_task_entry(NULL)
, m_task_states(NULL)
+ , organism(in_org)
+ , m_task_success_complete(true)
{
m_task_value = 0;
}
Modified: branches/uml/source/main/cTaskLib.cc
===================================================================
--- branches/uml/source/main/cTaskLib.cc 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cTaskLib.cc 2007-07-13 18:30:21 UTC (rev 1798)
@@ -37,6 +37,9 @@
#include <cmath>
#include <climits>
#include <iomanip>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
// Various workarounds for Visual Studio shortcomings
#if AVIDA_PLATFORM(WINDOWS)
@@ -382,7 +385,7 @@
NewTask(name, "Successfully Received Network Message", &cTaskLib::Task_NetReceive);
- // UML tasks
+ // UML tasks
else if (name == "trans1") //
NewTask(name, "Successfully created trans 1", &cTaskLib::Task_Trans1);
else if (name == "trans2") //
@@ -405,6 +408,12 @@
NewTask(name, "Successfully created trans 10", &cTaskLib::Task_Trans10);
else if (name == "scene-1") //
NewTask(name, "Successfully created scenario 1", &cTaskLib::Task_Scenario1);
+ else if (name == "scene-2") //
+ NewTask(name, "Successfully created scenario 2", &cTaskLib::Task_Scenario2);
+ else if (name == "scene-3") //
+ NewTask(name, "Successfully created scenario 3", &cTaskLib::Task_Scenario3);
+ else if (name == "scene-4") //
+ NewTask(name, "Successfully created scenario 4", &cTaskLib::Task_Scenario4);
else if (name == "numStates") //
NewTask(name, "Successfully created 5 states", &cTaskLib::Task_NumStates);
else if (name == "numTrans") //
@@ -417,10 +426,16 @@
NewTask(name, "Successfully ran Spin", &cTaskLib::Task_SpinN1);
else if (name == "spin-w1") //
NewTask(name, "Successfully ran Spin witness trace", &cTaskLib::Task_SpinW1);
+ else if (name == "spin2") //
+ NewTask(name, "Successfully ran Spin", &cTaskLib::Task_SpinN2);
+ else if (name == "spin-w2") //
+ NewTask(name, "Successfully ran Spin witness trace", &cTaskLib::Task_SpinW2);
else if (name == "mult_trans") //
NewTask(name, "Successfully completed multiple transitions", &cTaskLib::Task_MultTrans);
+
+
// Make sure we have actually found a task
if (task_array.GetSize() == start_size) {
@@ -2749,7 +2764,7 @@
double bonus = 0.0;
//Init
- ctx.task_success_complete = true;
+ ctx.m_task_success_complete = true;
// if (ctx.organism->currTrans(1, -1, -1, -1, -1, "^TempSensor.getOpState()")) {
// if (ctx.organism->currTrans(1, -1, -1, -1, -1, 1)) {
@@ -2759,11 +2774,11 @@
// temp sensor
if (ctx.organism->getUMLModel()->getStateDiagram(1)->findTrans(0, 1, 0, 0, 0))
{
- // ctx.task_success_complete += 1;
+ // ctx.m_task_success_complete += 1;
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2781,7 +2796,7 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2800,7 +2815,7 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2819,7 +2834,7 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2835,7 +2850,7 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2852,7 +2867,7 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2867,7 +2882,7 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2883,7 +2898,7 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2899,7 +2914,7 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
@@ -2915,10 +2930,11 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
+
double cTaskLib::Task_Scenario1(cTaskContext& ctx) const
{
double bonus = 0.0;
@@ -2926,9 +2942,9 @@
// Check if the tasks are complete so far...
// This provides a basic ordering mechanism for the tasks.
- if (!ctx.task_success_complete) {
+/* if (!ctx.m_task_success_complete) {
return 0;
- }
+ }*/
// Check if this model is different than the organism's parent's model
if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
@@ -2938,7 +2954,9 @@
path1.push_back("setTempOpState");
// check for scneario
- bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1)) / path1.size());
+// bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1)) / path1.size());
+ bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1))); // / path1.size());
+
} else {
bonus = ctx.organism->getParentBonus("scenario1");
}
@@ -2946,16 +2964,138 @@
// Set bonus info for current model
ctx.organism->getUMLModel()->setBonusInfo("scenario1", bonus);
- if (bonus == 1) {
- ctx.task_success_complete = true;
+ /*if (bonus == 2) {
+ ctx.m_task_success_complete = ctx.m_task_success_complete && true;
} else {
- ctx.task_success_complete = false;
+ ctx.m_task_success_complete = false;
}
+ path1.clear();*/
+ return bonus;
+}
+
+
+double cTaskLib::Task_Scenario2(cTaskContext& ctx) const
+{
+ double bonus = 0.0;
+ std::deque<std::string> path1;
+ // Check if the tasks are complete so far...
+ // This provides a basic ordering mechanism for the tasks.
+ /*if (!ctx.m_task_success_complete) {
+ return 0;
+ }*/
+
+ // Check if this model is different than the organism's parent's model
+ if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
+
+ // create the scenario
+ path1.push_back("^TempSensor.getTempData()");
+ path1.push_back("setTempData");
+
+ // check for scneario
+ //bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1)) / path1.size());
+ bonus = ((ctx.organism->getUMLModel()->getStateDiagram(1)->findPath(path1))); // / path1.size());
+
+ } else {
+ bonus = ctx.organism->getParentBonus("scenario2");
+ }
+
+ // Set bonus info for current model
+ /*ctx.organism->getUMLModel()->setBonusInfo("scenario2", bonus);
+ if (bonus == 2) {
+ ctx.m_task_success_complete = ctx.m_task_success_complete && true;
+ } else {
+ ctx.m_task_success_complete = false;
+ }*/
+
+ // Set bonus info for current model
+ ctx.organism->getUMLModel()->setBonusInfo("scenario2", bonus);
+
return bonus;
}
+double cTaskLib::Task_Scenario3(cTaskContext& ctx) const
+{
+ double bonus = 0.0;
+ std::deque<std::string> path1;
+
+ // Check if the tasks are complete so far...
+ // This provides a basic ordering mechanism for the tasks.
+ /*if (!ctx.m_task_success_complete) {
+ return 0;
+ }*/
+
+ // Check if this model is different than the organism's parent's model
+ if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
+
+ // create the scenario
+ path1.push_back("getOpState");
+ path1.push_back("op_state:=1");
+ path1.push_back("^SoftwareSensor.setTempOpState(op_state)");
+
+
+ // check for scneario
+ //bonus = ((ctx.organism->getUMLModel()->getStateDiagram(0)->findPath(path1)) / path1.size());
+ bonus = ((ctx.organism->getUMLModel()->getStateDiagram(0)->findPath(path1))); // / path1.size());
+ } else {
+ bonus = ctx.organism->getParentBonus("scenario3");
+ }
+
+ // Set bonus info for current model
+ ctx.organism->getUMLModel()->setBonusInfo("scenario3", bonus);
+
+ /*int temp = path1.size();
+
+ if (bonus == 3) {
+ ctx.m_task_success_complete = ctx.m_task_success_complete && true;
+ } else {
+ ctx.m_task_success_complete = false;
+ }*/
+
+ return bonus;
+}
+
+double cTaskLib::Task_Scenario4(cTaskContext& ctx) const
+{
+ double bonus = 0.0;
+ std::deque<std::string> path1;
+
+ // Check if the tasks are complete so far...
+ // This provides a basic ordering mechanism for the tasks.
+ /*if (!ctx.m_task_success_complete) {
+ return 0;
+ }*/
+
+ // Check if this model is different than the organism's parent's model
+ if (ctx.organism->getParentXMI() != ctx.organism->getUMLModel()->getXMI()) {
+
+ // create the scenario
+ path1.push_back("getOpState");
+ path1.push_back("op_state:=0");
+ path1.push_back("^SoftwareSensor.setTempOpState(op_state)");
+
+
+ // check for scneario
+// bonus = ((ctx.organism->getUMLModel()->getStateDiagram(0)->findPath(path1)) / path1.size());
+ bonus = ((ctx.organism->getUMLModel()->getStateDiagram(0)->findPath(path1))); // / path1.size());
+
+ } else {
+ bonus = ctx.organism->getParentBonus("scenario4");
+ }
+
+ // Set bonus info for current model
+ ctx.organism->getUMLModel()->setBonusInfo("scenario4", bonus);
+
+ /*if (bonus == 3) {
+ ctx.m_task_success_complete = ctx.m_task_success_complete && true;
+ } else {
+ ctx.m_task_success_complete = false;
+ }*/
+
+ return bonus;
+}
+
double cTaskLib::Task_NumStates(cTaskContext& ctx) const
{
double ns = (double) ctx.organism->getStateDiagram()->numStates();
@@ -2989,9 +3129,22 @@
temp = organism->getUMLModel()->getXMI();
- if (!ctx.task_success_complete) {
+ int temp1, temp2, temp3, temp4;
+ temp1= ctx.organism->getUMLModel()->getBonusInfo("scenario1");
+ temp2= ctx.organism->getUMLModel()->getBonusInfo("scenario2");
+ temp3= ctx.organism->getUMLModel()->getBonusInfo("scenario3");
+ temp4= ctx.organism->getUMLModel()->getBonusInfo("scenario4");
+
+ if (!((ctx.organism->getUMLModel()->getBonusInfo("scenario1") == 2) &&
+ // (ctx.organism->getUMLModel()->getBonusInfo("scenario2") == 2) &&
+ (ctx.organism->getUMLModel()->getBonusInfo("scenario3") == 3) &&
+ (ctx.organism->getUMLModel()->getBonusInfo("scenario4") == 3))) {
+ ctx.organism->getUMLModel()->setBonusInfo("hydra", bonus);
return 0;
}
+ /*if (!ctx.m_task_success_complete) {
+ return 0;
+ }*/
m_world->GetStats().HydraAttempt();
@@ -2999,7 +3152,7 @@
if (ctx.organism->getParentXMI() == temp) {
bonus = ctx.organism->getParentBonus("hydra");
- if (bonus) ctx.task_success_complete = true;
+ //if (bonus) ctx.m_task_success_complete = true;
ctx.organism->getUMLModel()->setBonusInfo("hydra", bonus);
return bonus;
}
@@ -3067,12 +3220,12 @@
// if there are no errors, return 0 from hydraulic. otherwise, return non-zero.
if(status != 0) {
// organism->setBonusInfo("hydra", 0.0);
- ctx.task_success_complete = false;
+ ctx.m_task_success_complete = false;
bonus = 0.0;
} else {
m_world->GetStats().HydraPassed();
// organism->setBonusInfo("hydra", 1.0);
- ctx.task_success_complete = true;
+ ctx.m_task_success_complete = true;
bonus = 1.0;
}
@@ -3104,7 +3257,7 @@
if(system("cat pan.out | perl -e 'while(<STDIN>) { if(/errors:\\s(\\d+)/) {exit($1);}}'")!=0) return 0.0;
// if(system("cat pan.out | perl -e 'while(<STDIN>) { if(/unreached/) {exit(1);}}'")!=0) return 0.2;
- std::cout << "I AM HERE" << std::endl;
+// std::cout << "I AM HERE" << std::endl;
std::ostringstream strstrm;
strstrm << "cp tmp.xmi " << m_world->GetStats().GetUpdate() << "." << organism->GetID();
strstrm << ".xml";
@@ -3119,8 +3272,9 @@
// m_world->GetStats().SpinAttempt();
int status=0;
int num_witness = 0;
+ const int max_witness = 5;
- ctx.task_success_complete = false;
+ ctx.m_task_success_complete = false;
std::string cmd = "cp tmp.pr tmp-witness.pr" ;
if(system(cmd.c_str())!=0) return 0.0;
@@ -3142,15 +3296,22 @@
// m_world->GetStats().PanPassed();
- ctx.task_success_complete = num_witness;
- return num_witness;
+ if (num_witness == max_witness) {
+ ctx.m_task_success_complete = true;
+ } else {
+ ctx.m_task_success_complete = false;
+ }
+ return (num_witness/max_witness);
}
double cTaskLib::Task_SpinN1(cTaskContext& ctx) const {
//cOrganism* organism = ctx.organism;
double bonus = 0.0;
- if (!ctx.task_success_complete) return bonus;
+ if (ctx.organism->getUMLModel()->getBonusInfo("hydra") == 0) {
+ return bonus;
+ }
+
if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {
@@ -3161,11 +3322,11 @@
bonus = SpinCoprocess(ctx, "N1");
}
- if (bonus) {
- ctx.task_success_complete = true;
+ /*if (bonus) {
+ ctx.m_task_success_complete = true;
} else {
- ctx.task_success_complete = false;
- }
+ ctx.m_task_success_complete = false;
+ }*/
ctx.organism->getUMLModel()->setBonusInfo("spinn1", bonus);
return bonus;
@@ -3177,7 +3338,10 @@
// cOrganism* organism = ctx.organism;
// double temp1 = 0.0;
double bonus = 0.0;
- if (!ctx.task_success_complete) return bonus;
+ //if (!ctx.m_task_success_complete) return bonus;
+ if (ctx.organism->getUMLModel()->getBonusInfo("hydra") == 0) {
+ return bonus;
+ }
if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {
bonus = ctx.organism->getParentBonus("spinw1");
@@ -3187,18 +3351,77 @@
bonus = SpinWitnessCoprocess(ctx, "W1");
}
- if (bonus) {
- ctx.task_success_complete = true;
+ /*if (bonus) {
+ ctx.m_task_success_complete = true;
} else {
- ctx.task_success_complete = false;
- }
+ ctx.m_task_success_complete = false;
+ }*/
ctx.organism->getUMLModel()->setBonusInfo("spinw1", bonus);
return bonus;
}
+
+double cTaskLib::Task_SpinN2(cTaskContext& ctx) const {
+ //cOrganism* organism = ctx.organism;
+ double bonus = 0.0;
+
+ //if (!ctx.m_task_success_complete) return bonus;
+ if (ctx.organism->getUMLModel()->getBonusInfo("hydra") == 0) {
+ return bonus;
+ }
+
+ if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {
+
+ bonus = ctx.organism->getParentBonus("spinn2");
+// return bonus;
+ } else {
+
+ bonus = SpinCoprocess(ctx, "N2");
+ }
+
+ /*if (bonus) {
+ ctx.m_task_success_complete = true;
+ } else {
+ ctx.m_task_success_complete = false;
+ }*/
+ ctx.organism->getUMLModel()->setBonusInfo("spinn2", bonus);
+
+ return bonus;
+}
+
+
+
+double cTaskLib::Task_SpinW2(cTaskContext& ctx) const {
+// cOrganism* organism = ctx.organism;
+// double temp1 = 0.0;
+ double bonus = 0.0;
+ //if (!ctx.m_task_success_complete) return bonus;
+ if (ctx.organism->getUMLModel()->getBonusInfo("hydra") == 0) {
+ return bonus;
+ }
+
+ if (ctx.organism->getParentXMI() == ctx.organism->getUMLModel()->getXMI()) {
+ bonus = ctx.organism->getParentBonus("spinw2");
+// return bonus;
+ } else {
+
+ bonus = SpinWitnessCoprocess(ctx, "W2");
+ }
+
+ /*if (bonus) {
+ ctx.m_task_success_complete = true;
+ } else {
+ ctx.m_task_success_complete = false;
+ }*/
+ ctx.organism->getUMLModel()->setBonusInfo("spinw2", bonus);
+
+ return bonus;
+}
+
+
double cTaskLib::Task_MultTrans(cTaskContext& ctx) const {
- return (2^ctx.task_success_complete);
+ return (2^ctx.m_task_success_complete);
}
@@ -3211,6 +3434,6 @@
bonus = 1.0;
}
- ctx.task_success_complete = ctx.task_success_complete && bonus;
+ ctx.m_task_success_complete = ctx.m_task_success_complete && bonus;
return bonus;
}
Modified: branches/uml/source/main/cTaskLib.h
===================================================================
--- branches/uml/source/main/cTaskLib.h 2007-07-13 12:27:21 UTC (rev 1797)
+++ branches/uml/source/main/cTaskLib.h 2007-07-13 18:30:21 UTC (rev 1798)
@@ -288,6 +288,9 @@
double Task_Trans9(cTaskContext& ctx) const;
double Task_Trans10(cTaskContext& ctx) const;
double Task_Scenario1(cTaskContext& ctx) const;
+ double Task_Scenario2(cTaskContext& ctx) const;
+ double Task_Scenario3(cTaskContext& ctx) const;
+ double Task_Scenario4(cTaskContext& ctx) const;
double Task_NumStates(cTaskContext& ctx) const;
double Task_NumTrans(cTaskContext& ctx) const;
double Task_PropTrigger(cTaskContext& ctx) const;
@@ -295,7 +298,9 @@
double SpinCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const;
double SpinWitnessCoprocess(cTaskContext& ctx, const std::string& neverclaimFile) const;
double Task_SpinN1(cTaskContext& ctx) const;
+ double Task_SpinN2(cTaskContext& ctx) const;
double Task_SpinW1(cTaskContext& ctx) const;
+ double Task_SpinW2(cTaskContext& ctx) const;
double Task_MultTrans(cTaskContext& ctx) const;
};
More information about the Avida-cvs
mailing list