社会机器人

社会机器人

问题描述:

RDF语义网络欲社交机器人的输入视觉数据三重保存到语义记忆为RDF其形式为“主语,谓语,宾语”。我不确定这种数据结构究竟应该用C++编程。我第一次尝试这样的:社会机器人

class RDFentry { 
public: 
    int subject; 
    std::string predicate; 
    int object; 
}; 

std::vector<RDFentry> myrdf = {}; 
myrdf.push_back({i,"infront",3}); 

一个示例项是:简称“盈1 3”为“subect#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
  • 使用最小的数据类型为subjectobject(这里我用unsigned int)。
  • 如果断言场应该举行一些特定的值,你可以用自己的enum替换重量级std:string
  • 正如你可能已经知道,std::vector是一个连续的存储器内数据结构,每次插入的时间/删除一个值到/从它,它可以在整个阵列复制到一个新的地方。所以建议使用链表。
  • 如果那些RDF条目太多,你的程序的内存可以存储,你应该建立一个文件输出流,并将它们保存在磁盘上。