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