2017-10-15 40 views
0

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三重存儲的例子?

回答

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)。
  • 如果斷言場應該舉行一些特定的值,你可以用自己的enum替換重量級std:string
  • 正如你可能已經知道,std::vector是一個連續的存儲器內數據結構,每次插入的時間/刪除一個值到/從它,它可以在整個陣列複製到一個新的地方。所以建議使用鏈表。
  • 如果那些RDF條目太多,你的程序的內存可以存儲,你應該建立一個文件輸出流,並將它們保存在磁盤上。