[[ノート>ノート/ノート]]~
訪問数 &counter();  最終更新 &lastmod();

***EPMRを読んでみる 〜 membersの型 [#n4f2e9e9]
-変数membersは、EvolutionaryOptimizer.hの70行目で定義されている
     T* members;
つまり、T*型(Tへのポインタ型)の変数である。

-Tはtemplateであり、同ファイル42行目にある
 template < class T >
 class EvolutionaryOptimizer : public IterativeOptimizer< T > {
で持ってくる。つまり、class EvolutionaryOptimizerのインスタンスを作った時に、
その中で与えられるTである。

-EvolutionaryOptimizerにTの実体値を与えているところは
 Epmr.cpp(1348):        return new EvolutionaryOptimizer< Solution >( populationSize,
  CreateGlobalOptimizerメソッドの戻り値として
  (これ以外にインスタンスを作っているところは無さそうだ)

-次に、Solution型は何か? Solution.hにある。~
 Solution.h(80): class Solution {
  クラスであり、コンストラクタSolution、デストラクタ~Solution、その他メソッドがある。~
  内部の(変数)領域は、59-62行目にある
     int targetID;
     double solK;
     double solB;
     std::vector< RigidBody > subSolutions;
  となっており、最後のvector< RigidBody> subSolutionsは、要素がRigidBody型のベクトルを定義している。そこで

-RigidBody型は、やはりSolutions.hにある~
 Solution.h(28): class RigidBody {
  クラスであり、内部の(変数)領域は、33-36行目にある
     Quat4d orientation;
     Vector3d position;
     int modelID;
     int segmentID;
  となっており、それぞれの型は
--Quat4t型: 
 Quat4_.h(342): typedef Quat4<double> Quat4d;
であり、同ファイル31-32行目に
 template<class T>
 class Quat4 : public Tuple4<T> {
--Vector3d型:
 Vector3.h(192): typedef Vector3<double> Vector3d;
であり、同一ファイル31-32行目に
 template<class T>
 class Vector3 : public Tuple3<T>

***EPMRを読んでみる 〜 membersの変遷 [#g088663c]
-宣言は   EvolutionaryOptimizer.h (70)
   T* members;   但しTはSolution型
-EvolutionaryOptimizerのインスタンス化の中で空のものが作られる   EvolutionaryOptimizer.h (85)~
   solution( 0 ), nMembers( populationSize ), members( 0 ), scores( 0 )
-EVのデストラクタで消される   EvolutionaryOptimizer.h(92)
   delete[] members;  
-EVの初期化Initializeメソッドの中で必要個数が作られる  EvolutionaryOptimizer.h (102-103)
    if ( members == 0 ) {
         members = new T[ nMembers ];
-同じくEVの初期化Initializeメソッドの中でCreateの引数として使われる  EvolutionaryOptimizer.h(108)
    creator->Create( members, members + nMembers );
Createは、creatorがRandomSolutionCreatorを指す(Epmr.cpp(1327); CreateGlobalOptimizerの中)ので、~
  RandomSolutionCreator::Createになる (RandomSolutionCreator.h (48))
  RandomSolutionCreator::Createになる (RandomSolutionCreator.h (48))~
  引数(members(=先頭), members+nMembers(=nMembers個作った最後))の先頭から始めて、ランダム値?のSolutionを(引数の指す所に)作る
-EVのStep()の中で、  EvolutionaryOptimizer.h(126)
    *solution = members[ sortedIndices[ 0 ] ];
  つまりmembersは今まで得られたSolutionメンバの表になっていて、そこからsortedIndeces[0]番目を選んでsolutionとする。~
  このsolutionはEvolutionaryOpitmizerクラスの引数に入っていて、たぶん呼び出し側(Epmr)に戻される
-EVのScoreMembersメソッドで   EvolutionaryOptimizer.h(150)
        scores[ sortedIndices[ i ] ] = scorer->Score( members[ sortedIndices[ i ] ] );
-EVのRegenerateメソッドで   EvolutionaryOptimizer.h(158)
        mutator->Mutate( &members[ sortedIndices[ i ] ], firstIndex, this );
-EVのMemberメソッドで   EvolutionaryOptimizer.h(167)
    return members[ sortedIndices[ rank ] ];

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS