SimilarityFilter.h
Go to the documentation of this file.
1#pragma once
2
3#include <deque>
4#include <map>
5#include <unordered_map>
6#include <vector>
7
8// Base Class
9#include "../Filter.h"
10
11#include <chrono>
12
14{
16 {
17 public:
18 static const constexpr char* NAME = "SnapshotSimilarityFilter";
19 static const constexpr char* PARAM_THRESHOLD = "Threshold";
20 static const constexpr char* PARAM_NUM_SNAPSHOTS = "NumberOfSnapshotsToCompare";
21
23
24 virtual bool accept(const armem::wm::EntitySnapshot& e, bool simulatedVersion) override;
25 void configure(const nlohmann::json& json) override;
26
28 std::string getName() override;
29
30 private:
31 struct SimilarityResult
32 {
33 float similarity = 1.0f;
34 float importance = 1.0f;
35 };
36
37 float calculateSnapshotSimilarity(
38 const armem::wm::EntitySnapshot& oldSnapshot,
39 const armem::wm::EntitySnapshot& newSnapshot);
40 SimilarityResult calculateInstanceSimilarity(
41 const aron::data::VariantPtr& oldData,
42 const aron::data::VariantPtr& newData,
43 float parentImportance);
44
45 private:
46 std::map<MemoryID, long> timestampLastCommitInMs;
47 float threshold = 1.0f;
48 std::size_t numSnapshots = 1;
49 FilterStatistics stats;
50 std::unordered_map<std::string, std::deque<armem::wm::EntitySnapshot>> lastAcceptedSnapshots;
51 };
52} // namespace armarx::armem::server::ltm::processor::filter
virtual bool accept(const armem::wm::EntitySnapshot &e, bool simulatedVersion) override
Client-side working memory entity snapshot.
std::shared_ptr< Variant > VariantPtr