C++强化学习和智能指针

Æle*_*lex 6 c++ smart-pointers reinforcement-learning

我正在使用强化学习方法(Q,sarsa,TD(λ),Actor-Critic,R等)进行机器人感知运动员在线学习的硕士项目.我目前正在设计一个框架,在该框架上将使用更高级别的强化学习和更低级别的机器人API控制.

由于状态是依赖于机器人传感器并且可能(将)以指数方式增加,因此我将在堆上分配它们.由于这会产生很多问题,错误等,并且由于并行化(即线程化)是我想要探索的强化学习的一个方面,我还不确定要使用哪种智能指针.

为智能指针设计我自己的模板/类需要时间和调试,这是我没有的.所以,我想知道,我应该使用STL auto_ptr吗?我看到他们在向量中使用了问题.我应该用boost::shared_ptr吗?各州必须在许多类和算法之间共享.或者我应该使用boost::ptr_vector?由于状态将驻留在向量中的任务容器类中,这是否足够?状态必须是共享的,可复制的,可引用的,可序列化的,非常量的,线程安全的并且不会被删除.此外,存储空间和计算时间也很重要.

你推荐什么作为这项任务的最佳智能ptr实现?

谢谢!


看起来我将不得不尝试将boost :: ptr_vector与类State一起使用,如果这证明效率不高,那么使用std :: vector <std :: unique_ptr>并启用0X.谢谢大家的答案和建议!

Luc*_*ton 4

单一所有权指针更难误用,以std::auto_ptr. 您可以考虑使用boost::scoped_ptr,它更安全(但它不能转移所有权,也不能从函数返回)。当涉及到容器时,您可以std::vector使用指针容器,但如果所涉及的类型不是多态使用的,那么不使用智能指针也可以。

共有所有权仍应属于例外情况;不要过度使用boost::shared_ptr