本质上,我有一个模型,它具有给定的一组参数,能够计算不同化合物的不同热力学性质,例如液体密度和蒸气压。
当我想通过拟合不同化合物的数据来回归模型参数(例如a、b、c、d、e)时,我通常会做很多顺序操作,我确信我可以轻松提高它们的效率。我正在考虑多目标优化,甚至更好地使用 GPU 或 CPU 的多核。但是我有点迷失从哪里开始阅读文档。
所以在我的目标函数中,我通常有类似的东西:
[fval]= objective_function(a,b,c,d,e)
input_comp1=f(constants,a,b,c,d,e)
input_comp2=f(constants,a,b,c,d,e)
exp_density1=load some text file or so.
exp_density2=load some text file or so.
exp_vaporpressure1=load some text file or so.
exp_vaporpressure2=load some text file or so.
densities_1=density(a,b,c,d,e,input_comp1)
vapor_pressures1=vapor_pressures(a,b,c,d,e,input_comp1)
densities_2=density(a,b,c,d,e,input_comp2)
vapor_pressures=vapor_pressures (a,b,c,d,e,input_comp2)
ARD_d1=expression for deviations between experimental and calculated values for density of comp.1
ARD_d2=...
ARD_p1=...
ARD_p2=...
fval= ARD_d1+ARD_d2+ARD_p1+ARD_p2
然后由 fminsearch 之类的东西进行评估,但我过去也使用过其他人,fminsearch 对我来说效果最好。当我只为一个组件执行此操作时,它的工作速度足以满足我的目的(但我是一个有耐心的人)。但是现在我已经扩展了模型,需要同时从多个组件中回归参数,这变得不可能。
我很确定这种计算方式可以改进,因为我可以同时对不同的化合物进行计算,而不是按顺序进行计算,然后在所有组分的计算完成后评估 fval。但是怎么做?