Skip to content

Commit 038f4d4

Browse files
authored
Merge pull request #743 from htm-community/tm_predictivecells
TM.getPredictiveCells improved
2 parents 7e3d439 + ac9c2e4 commit 038f4d4

File tree

2 files changed

+10
-10
lines changed

2 files changed

+10
-10
lines changed

src/htm/algorithms/Connections.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,10 +122,10 @@ Synapse Connections::createSynapse(Segment segment,
122122
synapse = destroyedSynapses_.back();
123123
destroyedSynapses_.pop_back();
124124
} else {
125-
NTA_CHECK(synapses_.size() < std::numeric_limits<Synapse>::max()) << "Add synapse failed: Range of Synapse (data-type) insufficient size."
125+
NTA_ASSERT(synapses_.size() < std::numeric_limits<Synapse>::max()) << "Add synapse failed: Range of Synapse (data-type) insufficient size."
126126
<< synapses_.size() << " < " << (size_t)std::numeric_limits<Synapse>::max();
127127
synapse = static_cast<Synapse>(synapses_.size());
128-
synapses_.push_back(SynapseData());
128+
synapses_.emplace_back(SynapseData());
129129
}
130130

131131
// Fill in the new synapse's data

src/htm/algorithms/TemporalMemory.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
#include <iterator>
3737
#include <string>
3838
#include <vector>
39+
#include <set>
3940

4041

4142
#include <htm/algorithms/TemporalMemory.hpp>
@@ -377,7 +378,7 @@ void TemporalMemory::activateCells(const SDR &activeColumns, const bool learn) {
377378

378379
// for column in activeColumns (the 'sparse' above):
379380
// get its active segments ( >= connectedThr)
380-
// get its matching segs ( >= mmm
381+
// get its matching segs ( >= TODO
381382
std::tie(column,
382383
activeColumnsBegin, activeColumnsEnd,
383384
columnActiveSegmentsBegin, columnActiveSegmentsEnd,
@@ -603,16 +604,15 @@ SDR TemporalMemory::getPredictiveCells() const {
603604
correctDims.push_back(static_cast<CellIdx>(getCellsPerColumn()));
604605
SDR predictive(correctDims);
605606

606-
auto& predictiveCells = predictive.getSparse();
607+
std::set<CellIdx> uniqueCells;
608+
//uniqueCells.reserve(activeSegments_.size());
607609

608-
for (auto segment = activeSegments_.cbegin(); segment != activeSegments_.cend();
609-
segment++) {
610-
const CellIdx cell = connections.cellForSegment(*segment);
611-
if (segment == activeSegments_.begin() || cell != predictiveCells.back()) {
612-
predictiveCells.push_back(cell);
613-
}
610+
for (const auto segment : activeSegments_) {
611+
const CellIdx cell = connections.cellForSegment(segment);
612+
uniqueCells.insert(cell); //set keeps the cells unique
614613
}
615614

615+
vector<CellIdx> predictiveCells(uniqueCells.begin(), uniqueCells.end());
616616
predictive.setSparse(predictiveCells);
617617
return predictive;
618618
}

0 commit comments

Comments
 (0)