Skip to content

Commit d06aa83

Browse files
committed
Get evaluation values
1 parent 344c1e3 commit d06aa83

File tree

3 files changed

+24
-28
lines changed

3 files changed

+24
-28
lines changed

include/dataset.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ namespace bayesopt
6363
vectord mY; ///< Data values
6464
size_t mMinIndex, mMaxIndex; ///< Data optima
6565
vectori indices; ///< Data orders
66+
vectord values; ///< Data averages
67+
vectori nvalues; ///< Data numbers
6668
};
6769

6870

include/posteriormodel.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ namespace bayesopt {
7878
void setSample(const vectord &x, double y);
7979
void addSample(const vectord &x, double y);
8080

81-
void getEvaluationMeans(vectord& values, vectori& nvalues);
81+
void storeEvaluationMeans();
8282
void updateMinMax();
8383
double getValueAtMinimum();
8484
vectord getPointAtMinimum();

src/posteriormodel.cpp

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,10 @@ namespace bayesopt
9191
void PosteriorModel::addSample(const vectord &x, double y)
9292
{ mData.addSample(x,y); mMean.addNewPoint(x); };
9393

94-
void PosteriorModel::getEvaluationMeans(vectord& values, vectori& nvalues)
94+
void PosteriorModel::storeEvaluationMeans()
9595
{
96-
values = vectord(mData.mY.size(), 0.0);
97-
nvalues = vectori(mData.mY.size(), 0);
96+
mData.values = vectord(mData.mY.size(), 0.0);
97+
mData.nvalues = vectori(mData.mY.size(), 0);
9898
mData.indices.resize(mData.mX.size());
9999
std::iota(mData.indices.begin(), mData.indices.end(), 0);
100100
std::sort(mData.indices.begin(), mData.indices.end(), [this](size_t i, size_t j)
@@ -111,8 +111,8 @@ namespace bayesopt
111111

112112
if( !mData.indices.empty() )
113113
{
114-
values[mData.indices[beginposition]] += mData.mY[mData.indices[beginposition]];
115-
++nvalues[mData.indices[beginposition]];
114+
mData.values[mData.indices[beginposition]] += mData.mY[mData.indices[beginposition]];
115+
++mData.nvalues[mData.indices[beginposition]];
116116
}
117117

118118
while( endposition < mData.indices.size() )
@@ -123,23 +123,20 @@ namespace bayesopt
123123
mData.indices[beginposition] = mData.indices[endposition];
124124
}
125125

126-
values[mData.indices[beginposition]] += mData.mY[mData.indices[endposition]];
127-
++nvalues[mData.indices[beginposition]];
126+
mData.values[mData.indices[beginposition]] += mData.mY[mData.indices[endposition]];
127+
++mData.nvalues[mData.indices[beginposition]];
128128
++endposition;
129129
}
130130

131131
mData.indices.resize(beginposition + 1);
132132

133133
for( const auto& index : mData.indices )
134-
values[index] /= nvalues[index];
134+
mData.values[index] /= mData.nvalues[index];
135135
}
136136

137137
void PosteriorModel::updateMinMax()
138138
{
139-
vectord values;
140-
vectori nvalues;
141-
142-
getEvaluationMeans(values, nvalues);
139+
storeEvaluationMeans();
143140

144141
double minmean = std::numeric_limits<double>::infinity();
145142
double maxmean = -std::numeric_limits<double>::infinity();
@@ -151,35 +148,32 @@ namespace bayesopt
151148

152149
for( const auto& index : mData.indices )
153150
{
154-
if( minmean > values[index] || ( minmean == values[index] && ( minnumb < nvalues[index] || ( minnumb == nvalues[index] && mData.mMinIndex < index ) ) ) )
151+
if( minmean > mData.values[index] || ( minmean == mData.values[index] && ( minnumb < mData.nvalues[index] || ( minnumb == mData.nvalues[index] && mData.mMinIndex < index ) ) ) )
155152
{
156-
minmean = values[index];
157-
minnumb = nvalues[index];
153+
minmean = mData.values[index];
154+
minnumb = mData.nvalues[index];
158155
mData.mMinIndex = index;
159156
}
160157

161-
if( maxmean < values[index] || ( maxmean == values[index] && ( maxnumb < nvalues[index] || ( maxnumb == nvalues[index] && mData.mMaxIndex < index ) ) ) )
158+
if( maxmean < mData.values[index] || ( maxmean == mData.values[index] && ( maxnumb < mData.nvalues[index] || ( maxnumb == mData.nvalues[index] && mData.mMaxIndex < index ) ) ) )
162159
{
163-
maxmean = values[index];
164-
maxnumb = nvalues[index];
160+
maxmean = mData.values[index];
161+
maxnumb = mData.nvalues[index];
165162
mData.mMaxIndex = index;
166163
}
167164
}
168165
}
169166

170167
vecOfvec PosteriorModel::getPointsAtMinimum()
171168
{
172-
vectord values;
173-
vectori nvalues;
174-
175-
getEvaluationMeans(values, nvalues);
169+
storeEvaluationMeans();
176170

177-
std::sort(mData.indices.begin(), mData.indices.end(), [&values, &nvalues](size_t i, size_t j)
171+
std::sort(mData.indices.begin(), mData.indices.end(), [this](size_t i, size_t j)
178172
{
179-
if( values[i] != values[j] )
180-
return values[i] < values[j];
181-
if( nvalues[i] != nvalues[j] )
182-
return nvalues[i] > nvalues[j];
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];
183177
return i > j;
184178
});
185179
assert(mData.indices.empty() || mData.indices[0] == mData.mMinIndex);

0 commit comments

Comments
 (0)