summaryrefslogtreecommitdiffdownload
authorNicolas Brodu <nicolas.brodu@numerimoire.net>2011-06-14 09:58:13 (GMT)
committer Nicolas Brodu <nicolas.brodu@numerimoire.net>2011-06-14 09:58:13 (GMT)
commitc5b7e126268997c7427a043e91f4ca79501d96ab (patch)
treed974d2d827a7b405687f960a83d9740bae490f51
parent53793a68e53ed0a5e117a0ebef3fcf5c82b1b6fe (diff)
downloaddecisional_states-master.tar.gz
small bugs corrected
Diffstat
-rw-r--r--include/decisional_states.hpp12
-rw-r--r--include/decisional_states_joint_data_manager.hpp6
2 files changed, 13 insertions, 5 deletions
diff --git a/include/decisional_states.hpp b/include/decisional_states.hpp
index 60db02f..8162002 100644
--- a/include/decisional_states.hpp
+++ b/include/decisional_states.hpp
@@ -665,6 +665,7 @@ public:
result->count = 1;
if (info && store) {
info->causalState = result;
+ result->members = boost::shared_ptr<std::vector<StateInfo*> >(new std::vector<StateInfo*>);
result->members->push_back(info);
}
return result;
@@ -747,6 +748,7 @@ public:
result->count = 1;
if (info && store) {
info->isoUtilityState = result;
+ result->members = boost::shared_ptr<std::vector<StateInfo*> >(new std::vector<StateInfo*>);
result->members->push_back(info); // so user can access distribution, etc.
}
return result;
@@ -825,6 +827,7 @@ public:
result->count = 1;
if (info && store) {
info->isoPredictionState = result;
+ result->members = boost::shared_ptr<std::vector<StateInfo*> >(new std::vector<StateInfo*>);
result->members->push_back(info); // so user can access distribution, etc.
}
return result;
@@ -980,11 +983,16 @@ public:
do {
for (int ci=0; ci<(int)states.size(); ++ci) {
if (states[ci]->flags<0) continue; // ignore previous roots, seek new ones
+ int ntrans = 0;
for (typename TransitionSet::iterator it = states[ci]->transitions->begin(); it != states[ci]->transitions->end(); ++it) {
// do not count self-refs
- if (it->state!=states[ci].get()) ++it->state->flags;
-
+ if (it->state!=states[ci].get()) {
+ ++it->state->flags;
+ ++ntrans;
+ }
}
+ // terminal nodes are always recurrent
+ if (ntrans==0) states[ci]->flags = 1;
}
// roots are the nodes with no parent
newRootsFound = false;
diff --git a/include/decisional_states_joint_data_manager.hpp b/include/decisional_states_joint_data_manager.hpp
index ac5c536..62c8fc6 100644
--- a/include/decisional_states_joint_data_manager.hpp
+++ b/include/decisional_states_joint_data_manager.hpp
@@ -444,7 +444,7 @@ struct DistDataSet {
it->distribution.aggregate(icv);
}
- std::vector<DataType> missingData;
+ std::vector<boost::shared_ptr<DataType> > missingData;
void prepareSequence(int seqsize) {
dataSequence.resize(seqsize);
@@ -456,8 +456,8 @@ struct DistDataSet {
if (seqnum==-1) {seqnum = dataSequence.size(); dataSequence.resize(seqnum+1);}
// missing data are kept in seq, but the null distribution is not added
if (helpers::IsMissingHelper<typename TypeTraits::JointType,DataType>::isMissing(x) || d.get()==0 || d->sumContribs==0) {
- missingData.push_back(x);
- dataSequence[seqnum] = &missingData.back();
+ missingData.push_back(boost::shared_ptr<DataType>(new DataType(x)));
+ dataSequence[seqnum] = missingData.back().get();
return;
}
typename DistMap::iterator it = distmap.find(x);