gpt4 book ai didi

openturns - 场函数元模型 OpenTurns 1.16rc1

转载 作者:行者123 更新时间:2023-12-04 00:53:25 25 4
gpt4 key购买 nike

将 Openturns 从 1.15 更新到 1.16rc1 后,我在构建字段函数的元模型时遇到以下问题:

减少计算负担:

ot.ResourceMap.SetAsUnsignedInteger("FittingTest-KolmogorovSamplingSize", 1)
algo = ot.FunctionalChaosAlgorithm(sample_X, outputSampleChaos)
algo.run()
metaModel = ot.PointToFieldConnection(postProcessing, algo.getResult().getMetaModel())

“FittingTest-KolmogorovSamplingSize”已从 OpenTurns 1.16rc1 中删除,当我尝试将拟合测试替换为:

ot.ResourceMap.SetAsUnsignedInteger("FittingTest-LillieforsMaximumSamplingSize", 10)

或与

ot.ResourceMap.SetAsUnsignedInteger("FittingTest-LillieforsMinimumSamplingSize", 1)

代码卡住了。有解决办法吗?

最佳答案

建议的解决方案只是使用另一种分布来为您的数据建模。您可以使用适当维度的任何其他多元连续分布。 IMO 这不是一个有效的答案,因为分发没有指向您的数据的链接。

经检查,问题似乎与Lilliefors的测试无关。在 OT 1.15 中,我们使用这个测试(错误的名称 Kolmogorov)来自动选择适合输入样本的分布,但我们切换到更复杂的选择算法(参见 MetaModelAlgorithm::BuildDistribution)。它基于使用原始 Kolomgorov 测试的第一遍(因此忽略了参数已被估计的事实),然后使用基于信息的标准来选择最相关的模型(AIC、AICC、BIC,具体取决于“ResourceMap 中的 MetaModelAlgorithm-ModelSelectionCriterion"键。问题是由 Kolmogorov 阶段的 TrapezoidalFactory 类引起的。我将尽快在 OpenTURNS master 中提供修复。与此同时,我已将建议的解决方案调整为更适合您的数据的内容:

degree = 6
dimension_xi_X = 3
dimension_xi_Y = 450
enumerateFunction = ot.HyperbolicAnisotropicEnumerateFunction(dimension_xi_X, 0.8)
basis = ot.OrthogonalProductPolynomialFactory(
[ot.StandardDistributionPolynomialFactory(ot.HistogramFactory().build(sample_X[:,i])) for i in range(dimension_xi_X)], enumerateFunction)
basisSize = enumerateFunction.getStrataCumulatedCardinal(degree)
#basis = ot.OrthogonalProductPolynomialFactory(
# [ot.HermiteFactory()] * dimension_xi_X, enumerateFunction)
#basisSize = 450#enumerateFunction.getStrataCumulatedCardinal(degree)
adaptive = ot.FixedStrategy(basis, basisSize)
projection = ot.LeastSquaresStrategy(
ot.LeastSquaresMetaModelSelectionFactory(ot.LARS(), ot.CorrectedLeaveOneOut()))
ot.ResourceMap.SetAsScalar("LeastSquaresMetaModelSelection-ErrorThreshold", 1.0e-7)
algo_chaos = ot.FunctionalChaosAlgorithm(sample_X,
outputSampleChaos,basis.getMeasure(), adaptive, projection)
algo_chaos.run()
result_chaos = algo_chaos.getResult()
meta_model = result_chaos.getMetaModel()
metaModel = ot.PointToFieldConnection(postProcessing,
algo_chaos.getResult().getMetaModel())

我还实现了 L2 错误的快速粗略估计:

# Meta_model validation
iMax = 5
# Input values
sample_X_validation = ot.Sample(np.array(month_1_parameters_MSE.iloc[:iMax,0:3]))
print("sample size=", sample_X_validation.getSize())
# sample_X = ot.Sample(month_1_parameters_MSE[['Rseries','Rsh','Isc']])

# output values
#month_1_simulated.iloc[0:1].transpose()
Field = ot.Field(mesh,np.array(month_1_simulated.iloc[0:1]).transpose())
sample_Y_validation = ot.ProcessSample(1,Field)
for k in range(1,iMax):
sample_Y_validation.add( np.array(month_1_simulated.iloc[k:k+1]).transpose() )


# In[18]:


graph = sample_Y_validation.drawMarginal(0)
graph.setColors(['red'])
drawables = graph.getDrawables()
graph2 = metaModel(sample_X_validation).drawMarginal(0)
graph2.setColors(['blue'])
drawables = graph2.getDrawables()
graph.add(graph2)
graph.setTitle('Model/Metamodel Validation')
graph.setXTitle(r'$t$')
graph.setYTitle(r'$z$')
drawables = graph.getDrawables()
L2_error = 0.0
for i in range(iMax):
L2_error = (drawables[i].getData()[:,1]-drawables[iMax+i].getData()[:,1]).computeRawMoment(2)[0]
print("L2_error=", L2_error)

您在先前的答案中得到 79.488 的错误,在新提案中得到 1.3994 的错误。这是图形比较。

Comparison between test data & previous answer Comparison between test data & new proposal

关于openturns - 场函数元模型 OpenTurns 1.16rc1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64605271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com