#4013 Create variation bins for ensemble parameters based on current data

* Rather than having a fixed index.
* This way the variation is more or less always normal distributed.
This commit is contained in:
Gaute Lindkvist
2019-01-29 16:42:04 +01:00
parent 7518a1880a
commit 54b5dc33f4
5 changed files with 124 additions and 81 deletions

View File

@@ -6,7 +6,7 @@
#include <QDebug>
TEST(RimSummaryCaseCollection, logarithmicVariationIndex)
TEST(RimSummaryCaseCollection, EnsembleParameter)
{
std::random_device rd;
std::mt19937 gen(rd());
@@ -14,7 +14,8 @@ TEST(RimSummaryCaseCollection, logarithmicVariationIndex)
std::uniform_real_distribution<double> variationDistribution(0.0, 5000.0);
std::uniform_int_distribution<size_t> countDistribution(1u, 1000u);
size_t N = 1000;
std::map<int, size_t> indexCounts;
std::vector<EnsembleParameter::NameParameterPair> parameters;
for (size_t i = 0; i < N; ++i)
{
EnsembleParameter param;
@@ -34,17 +35,25 @@ TEST(RimSummaryCaseCollection, logarithmicVariationIndex)
param.values.push_back(QVariant(value));
}
param.calculateStdDeviation();
param.minValue = minValue;
param.maxValue = maxValue;
int variationIndex = param.logarithmicVariationIndex();
EXPECT_GE(variationIndex, -1);
EXPECT_LE(variationIndex, 2);
indexCounts[variationIndex]++;
double normStdDev = param.normalizedStdDeviation();
EXPECT_GE(normStdDev, 0.0);
EXPECT_LE(normStdDev, std::sqrt(2.0));
parameters.push_back(std::make_pair(QString("%1").arg(i), param));
}
for (auto countPair : indexCounts)
size_t previousSize = parameters.size();
EnsembleParameter::sortByBinnedVariation(parameters);
size_t currentSize = parameters.size();
EXPECT_EQ(previousSize, currentSize);
int currentVariation = (int)EnsembleParameter::HIGH_VARIATION;
for (const EnsembleParameter::NameParameterPair& nameParamPair : parameters)
{
qDebug() << "Variation index " << countPair.first << " count = " << countPair.second;
EXPECT_GE(nameParamPair.second.variationBin, (int) EnsembleParameter::LOW_VARIATION);
EXPECT_LE(nameParamPair.second.variationBin, (int) EnsembleParameter::HIGH_VARIATION);
EXPECT_LE(nameParamPair.second.variationBin, currentVariation);
currentVariation = nameParamPair.second.variationBin;
}
}