RDF семантическая сеть для социальной робототехники

Я хочу сохранить входящие визуальные данные социального робота в семантическую память как 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 в контексте социальной робототехники?

0

Решение

После добавления 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 является структурой данных с непрерывной памятью, каждый раз, когда вы вставляете / удаляете значение в него, оно может копировать весь массив в новое место. Поэтому рекомендуется использовать связанный список.
  • Если этих записей RDF слишком много, чтобы память вашей программы могла хранить, вы должны настроить поток вывода файла и сохранить их на диске.
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]