我想将社交机器人的传入视觉数据以“主题,谓词,对象”的形式保存为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”简称为“subect#1空间关系是对象#3的前方”。我的问题是,时间框架中缺少一个字段。这个想法不仅存储空间关系,还存储时间信息。另一个问题是,对于第四个时间码字段,RDF数据库中的条目数将会爆炸。在正常游戏中,每秒生成30帧,因此在程序运行一分钟后,语义内存将会满。我如何解决这些问题,是否有任何论文在社交机器人的背景下提供RDF三重存储的例子?
答案 0 :(得分: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
是一个连续的内存数据结构,每次向/从中插入/删除值时,它都可能将整个数组复制到新的位置。因此,建议使用链接列表。