社交机器人的RDF语义网络

时间:2017-10-15 05:24:36

标签: c++ semantic-web robotics

我想将社交机器人的传入视觉数据以“主题,谓词,对象”的形式保存为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三重存储的例子?

1 个答案:

答案 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
  • 使用subjectobject的最小数据类型(此处我使用unsigned int)。
  • 如果谓词字段应包含一些特定值,则可以使用您自己的std:string替换该重量级enum
  • 您可能已经知道,std::vector是一个连续的内存数据结构,每次向/从中插入/删除值时,它都可能将整个数组复制到新的位置。因此,建议使用链接列表。
  • 如果这些RDF条目太多,以至于程序的内存可以存储,那么您应该设置一个文件输出流并将它们保存在磁盘上。