Я хочу сохранить входящие визуальные данные социального робота в семантическую память как RDF-тройку в форме «Субъект, предикат, объект». Я не уверен, как именно такая структура данных должна быть запрограммирована в C ++. Моя первая попытка была примерно такой:
class RDFentry {
public:
int subject;
std::string predicate;
int object;
};
std::vector<RDFentry> myrdf = {};
myrdf.push_back({i,"infront",3});
Примером записи может быть: «1 infront 3», сокращенно «пространственное отношение субъекта № 1 находится перед объектом № 3». Моя проблема в том, что на таймфрейме отсутствует поле. Идея хранить не только пространственные отношения, но и временную информацию. Другая проблема состоит в том, что с четвертым полем временного кода количество записей в базе данных RDF взорвется. В обычной игре генерируется 30 кадров в секунду, поэтому после минуты работы программы семантическая память будет заполнена. Как мне решить эти проблемы, есть ли какие-нибудь статьи, в которых приводятся примеры тройного хранения RDF в контексте социальной робототехники?
После добавления time
поле, у нас есть что-то вроде этого:
struct RDFentry {
unsinged int subject;
std::string predicate;
unsinged int object;
unsinged long time;
};
std::vector<RDFentry> myrdf;
myrdf.emplace_back(i, "infront", 3, /*time*/);
Чтобы улучшить использование памяти и производительность, обратите внимание, что:
emplace_back
вместо push_back
,subject
а также object
(здесь я использовал unsigned int
).std:string
с вашим собственным enum
,std::vector
является структурой данных с непрерывной памятью, каждый раз, когда вы вставляете / удаляете значение в него, оно может копировать весь массив в новое место. Поэтому рекомендуется использовать связанный список.Других решений пока нет …