@@ -93,8 +93,7 @@ namespace bayesopt
9393
9494 void PosteriorModel::storeEvaluationMeans ()
9595 {
96- mData .values = vectord (mData .mY .size (), 0.0 );
97- mData .nvalues = vectori (mData .mY .size (), 0 );
96+ mData .values = vecOfvec (mData .mY .size ());
9897 mData .indices .resize (mData .mX .size ());
9998 std::iota (mData .indices .begin (), mData .indices .end (), 0 );
10099 std::sort (mData .indices .begin (), mData .indices .end (), [this ](size_t i, size_t j)
@@ -111,8 +110,8 @@ namespace bayesopt
111110
112111 if ( !mData .indices .empty () )
113112 {
114- mData .values [mData .indices [beginposition]] += mData .mY [mData .indices [beginposition]];
115- ++ mData .nvalues [mData .indices [beginposition]];
113+ mData .values [mData .indices [beginposition]]. resize ( mData .values [mData .indices [beginposition]]. size () + 1 ) ;
114+ mData .values [ mData . indices [beginposition]][ mData . values [ mData . indices [beginposition]]. size () - 1 ] = mData . mY [mData .indices [beginposition]];
116115 }
117116
118117 while ( endposition < mData .indices .size () )
@@ -123,15 +122,23 @@ namespace bayesopt
123122 mData .indices [beginposition] = mData .indices [endposition];
124123 }
125124
126- mData .values [mData .indices [beginposition]] += mData .mY [mData .indices [endposition]] ;
127- ++ mData .nvalues [mData .indices [beginposition]];
125+ mData .values [mData .indices [beginposition]]. resize ( mData .values [mData .indices [beginposition]]. size () + 1 ) ;
126+ mData .values [mData .indices [beginposition]][ mData . values [ mData . indices [beginposition]]. size () - 1 ] = mData . mY [ mData . indices [endposition ]];
128127 ++endposition;
129128 }
130129
131130 mData .indices .resize (beginposition + 1 );
132131
133132 for ( const auto & index : mData .indices )
134- mData .values [index] /= mData .nvalues [index];
133+ {
134+ double sum = 0.0 ;
135+
136+ for ( size_t i = 0 ; i < mData .values [index].size (); ++i )
137+ {
138+ sum += mData .values [index][i];
139+ mData .values [index][i] = sum / (i + 1 );
140+ }
141+ }
135142 }
136143
137144 void PosteriorModel::updateMinMax ()
@@ -148,17 +155,17 @@ namespace bayesopt
148155
149156 for ( const auto & index : mData .indices )
150157 {
151- if ( minmean > mData .values [index] || ( minmean == mData .values [index] && ( minnumb < mData .nvalues [index] || ( minnumb == mData .nvalues [index] && mData .mMinIndex < index ) ) ) )
158+ if ( minmean > mData .values [index][ mData . values [index]. size () - 1 ] || ( minmean == mData .values [index][ mData . values [index]. size () - 1 ] && ( minnumb < mData .values [index]. size () || ( minnumb == mData .values [index]. size () && mData .mMinIndex < index ) ) ) )
152159 {
153- minmean = mData .values [index];
154- minnumb = mData .nvalues [index];
160+ minmean = mData .values [index][ mData . values [index]. size () - 1 ] ;
161+ minnumb = mData .values [index]. size () ;
155162 mData .mMinIndex = index;
156163 }
157164
158- if ( maxmean < mData .values [index] || ( maxmean == mData .values [index] && ( maxnumb < mData .nvalues [index] || ( maxnumb == mData .nvalues [index] && mData .mMaxIndex < index ) ) ) )
165+ if ( maxmean < mData .values [index][ mData . values [index]. size () - 1 ] || ( maxmean == mData .values [index][ mData . values [index]. size () - 1 ] && ( maxnumb < mData .values [index]. size () || ( maxnumb == mData .values [index]. size () && mData .mMaxIndex < index ) ) ) )
159166 {
160- maxmean = mData .values [index];
161- maxnumb = mData .nvalues [index];
167+ maxmean = mData .values [index][ mData . values [index]. size () - 1 ] ;
168+ maxnumb = mData .values [index]. size () ;
162169 mData .mMaxIndex = index;
163170 }
164171 }
@@ -170,10 +177,10 @@ namespace bayesopt
170177
171178 std::sort (mData .indices .begin (), mData .indices .end (), [this ](size_t i, size_t j)
172179 {
173- if ( this ->mData .values [i] != this ->mData .values [j] )
174- return this ->mData .values [i] < this ->mData .values [j];
175- if ( this ->mData .nvalues [i] != this ->mData .nvalues [j] )
176- return this ->mData .nvalues [i] > this ->mData .nvalues [j];
180+ if ( this ->mData .values [i][ this -> mData . values [i]. size () - 1 ] != this ->mData .values [j][ this -> mData . values [j]. size () - 1 ] )
181+ return this ->mData .values [i][ this -> mData . values [i]. size () - 1 ] < this ->mData .values [j][ this -> mData . values [j]. size () - 1 ];
182+ if ( this ->mData .values [i]. size () != this ->mData .values [j]. size () )
183+ return this ->mData .values [i]. size () > this ->mData .values [j]. size () ;
177184 return i > j;
178185 });
179186 assert (mData .indices .empty () || mData .indices [0 ] == mData .mMinIndex );
0 commit comments