用于社交机器人的RDF语义网络
RDF semantic network for social 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三重存储的例子?
添加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条目太多,程序的内存可以存储,则应设置文件输出流并将它们保存在磁盘上。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 何时在引用或唯一指针上使用移动语义
- 如何从具有移动语义的类对象中生成共享指针
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- Boost Spirit,获取迭代器内部语义动作
- 通过网络、跨平台传递std::变体是否安全
- 如何在MNIST上提高网络运行的准确性
- Active Directory:从网络服务帐户下运行的Windows服务调用ADsOpenObject时失败
- 可以使用移动语义更改或改进此C++代码吗?
- c++在使用指针时移动语义
- 在C++17中,引用const字符串的语义应该是什么
- OpenCV 4.1.2 - 从网络摄像头获取帧并将其拆分
- 使用OpenCV和覆盆子上的多个网络摄像头拍摄延时摄影,出现多个V4L错误
- Xcode 语义问题引用或以前定义的代码
- 神经网络不学习.卡在50%
- 如何绑定 C++ gRPC 客户端的网络接口
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- 在不知道套接字的情况下关闭网络连接
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 用于社交机器人的RDF语义网络