我想评估18个参数(0到1)的模型如何适合一些实验数据。最小化也受到连接18个参数的非常复杂的关系的约束。最终,我可以建立一个由18个已知值变量组成的函数边界(f11,f12,…),我可以在每个点上对其进行评估,以剔除这18个参数的哪些组合是“好的”,然后在这些组合上评估模型函数。对于一组给定的(f11,f12,…)参数,计算“边界”函数比计算“模型”函数快500倍
用一个可笑的粗糙网格,我仍然得到大约10^6分。使用Python2代码在10^4点上计算边界函数大约需要20英寸,因此无法扩展到任何有用的网格(大约10^12点或更多)。我还知道Python在数字处理方面的速度是出了名的慢
问题:
下面是示例代码(由于边界函数的定义很长,实际代码大约有1000行长)。谢谢
# python2 example code with 3 parameters
# real code has 18 parameters
import numpy as np
def boundary(arr):
f11,f12,f13 = arr
return f11*f12+f11*f12*f13-(1-f12)*f13
N = 3
threshold = 0.1
sample_f11 = np.linspace(0,1,N)
sample_f12 = np.linspace(0,1,N)
sample_f13 = np.linspace(0,1,N)
parameters = [(f11, f12, f13) for f11 in sample_f11 for f12 in sample_f12\
for f13 in sample_f13]
good_points = [i for i in parameters if boundary(i) < threshold]
#the real boundary function looks like this:
#def boundary(arr):
# f11,f12,f24,f25,f37,f38,f41,f42,f54,f55,f67,f68,f71,f72,f84,f85, \
# f97,f98 = arr
# return (2*-((f54*f71*f97*(f97-f68*f97+f67*f98)* \
# (f71*(-(-(1-f55)*f84-f54*f85)*f97-(-(1-f55)* \
# f84-f54*f85)*(-f38*f97+f37*f98)+(1-f55-(1-f55)* \
# f84-f54*f85)*(f97-f68*f97+f67*f98)+f42*((-(1-f55)*f84-f54*f85)*f97+ \
# [... 700 more lines]
目前没有回答
相关问题 更多 >
编程相关推荐