6

我正在使用强化学习方法(Q、sarsa、TD(λ)、Actor-Critic、R 等)进行关于机器人感觉运动在线学习的硕士项目。我目前正在设计将使用更高级别的强化学习和更低级别的机器人 API 控制的框架。

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

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

对于此类任务,您推荐什么作为最佳智能 ptr 实现?

谢谢!


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

4

3 回答 3

4

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

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

于 2011-07-06T22:05:10.210 回答
1

其他建议错过了一项。boost::intrusive_ptr性能优于shared_ptr因为它不需要第二次分配来保存引用计数。缺点intrusive_ptr是一点点额外的记账,没有使用能力weak_ptr

于 2011-07-06T22:15:34.133 回答
1

我在做 c++ 时从未找到我喜欢的智能 ptr 类。最后我自己写了。

它具有高速缓存功能,因此您可以不断分配和释放内存,它可以挂在它拥有的内存上并重用它。此外,它没有默认构造函数,因此您必须通过引用将其传递给函数/方法,否则编译器会显示错误,因此它不会创建内存的临时副本,尤其是在处理大图像文件时。

编写自己的代码不会花费太长时间,您也可以向其中添加自己的边界检查代码。

于 2011-07-06T22:27:30.570 回答