6

私は、強化学習法 (Q、sarsa、TD(λ)、Actor-Critic、R など) を使用して、ロボットの感覚運動オンライン学習に関する修士プロジェクトを行っています。私は現在、高レベルの強化学習と低レベルのロボット API 制御の両方が使用されるフレームワークを設計しています。

状態はロボット センサーに依存し、指数関数的に増加する可能性があるため、ヒープに割り当てます。これは多くの問題やバグなどを引き起こす可能性があり、並列化 (つまり、スレッド化) は私が探求したい強化学習の側面であるため、どの種類のスマート ポインターを使用すればよいかまだわかりません。

スマート ポインター用の独自のテンプレート/クラスを設計するには、時間とデバッグが必要ですが、それは私にはありません。それで、私は疑問に思っています、STLを使用する必要がありますauto_ptrか?ベクターでの使用に問題があることがわかりました。使用する必要がありますboost::shared_ptrか? 状態は、多くのクラスとアルゴリズムで共有する必要があります。または、使用する必要がありますboost::ptr_vectorか?状態はベクトル内のタスク コンテナー クラスに存在するため、これで十分でしょうか? 状態は、共有、コピー可能、参照可能、シリアライズ可能、非定数、スレッドセーフである必要があり、削除されません。また、メモリ容量と計算時間も重要です。

このようなタスクに最適なスマート ptr 実装として何をお勧めしますか?

ありがとうございました!


クラス State で boost::ptr_vector を使用してみる必要があるようです。これが非効率的であることが判明した場合は、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

C++ をやっていたときに気に入ったスマートな ptr クラスは見つかりませんでした。最後に自分で書きました。

速度のためのキャッシュ機能があったため、メモリの割り当てと解放を続けていれば、持っていたメモリに固執して再利用できました。また、デフォルトのコンストラクターがなかったため、参照によって関数/メソッドに渡す必要がありました。それ以外の場合、コンパイラーはエラーを表示します。これは、特に大きな画像ファイルを処理するときにメモリの一時コピーを作成しないようにするためでした。

独自のコードを記述するのにそれほど時間はかからず、独自の境界チェック コードを追加することもできます。

于 2011-07-06T22:27:30.570 に答える
1

他の提案は1つを逃しました。参照カウントを保持するために 2 番目の割り当てが必要ないため、boost::intrusive_ptrパフォーマンスが向上します。shared_ptrの欠点intrusive_ptrは、簿記が少し余分に必要であり、 を使用できないことweak_ptrです。

于 2011-07-06T22:15:34.133 に答える