FMUException:加载二进制文件时出错。无法加载 DLL:动态 link 库 (DLL) 初始化例程失败
FMUException: Error loading the binary. Could not load the DLL: A dynamic link library (DLL) initialization routine failed
我正在使用 pyfmi 在 Python 中加载 Modelica 生成的模型。加载模型后,我想执行优化和参数估计。问题是对于每个参数估计(优化迭代),FMU 通常需要加载它需要大约 300-400 次迭代,但是由于二进制加载它没有收敛 error.Where 我应该寻找灵魂吗?欢迎任何提示。
def fun2optim(theta):## Funtion to optimize with the initial guess of paramameter values theta
model = load_fmu("MOdel_0IV_0curves.fmu")## LOAD THE FMU
res = model.simulate(input=foo(theta),final_time=1)
results_VV=np.array([]) ###SAVE THE OUTPUT IN ARRAY
for i in range(200,400):
out=(res[output_IV[i]])
results=out[0::5] #Dymola FMU has 5 same IV curve points
results_VV=np.append(results_VV,results)
return(results_VV)
def RMSE (theta): ## results_V are the ideal values
tt=sum(np.sqrt((fun2optim(theta)-results_V)**2).mean())
return(tt)
from scipy import optimize
res11=optimize.minimize(RMSE,thetaInit,method='nelder-mead', options={'xtol': 1e-4, 'disp': True})
在 50-60 次迭代后我得到一个错误:
FMUException: Error loading the binary. Could not load the DLL: A dynamic link library (DLL) initialization routine failed.
我之前在使用 Dymola FMU 时遇到过类似的问题,我最好的猜测是某些东西没有正确卸载,最终导致了这个问题。
我建议将您的代码更改为:
model = load_fmu("MOdel_0IV_0curves.fmu")## LOAD THE FMU
def fun2optim(theta):## Funtion to optimize with the initial guess of paramameter values theta
global model
model.reset()
res = model.simulate(input=foo(theta),final_time=1)
results_VV=np.array([]) ###SAVE THE OUTPUT IN ARRAY
for i in range(200,400):
out=(res[output_IV[i]])
results=out[0::5] #Dymola FMU has 5 same IV curve points
results_VV=np.append(results_VV,results)
return(results_VV)
通过这种方式,您不必每次都重新加载 FMU(您只需重置它),这也会带来性能提升。
我正在使用 pyfmi 在 Python 中加载 Modelica 生成的模型。加载模型后,我想执行优化和参数估计。问题是对于每个参数估计(优化迭代),FMU 通常需要加载它需要大约 300-400 次迭代,但是由于二进制加载它没有收敛 error.Where 我应该寻找灵魂吗?欢迎任何提示。
def fun2optim(theta):## Funtion to optimize with the initial guess of paramameter values theta
model = load_fmu("MOdel_0IV_0curves.fmu")## LOAD THE FMU
res = model.simulate(input=foo(theta),final_time=1)
results_VV=np.array([]) ###SAVE THE OUTPUT IN ARRAY
for i in range(200,400):
out=(res[output_IV[i]])
results=out[0::5] #Dymola FMU has 5 same IV curve points
results_VV=np.append(results_VV,results)
return(results_VV)
def RMSE (theta): ## results_V are the ideal values
tt=sum(np.sqrt((fun2optim(theta)-results_V)**2).mean())
return(tt)
from scipy import optimize
res11=optimize.minimize(RMSE,thetaInit,method='nelder-mead', options={'xtol': 1e-4, 'disp': True})
在 50-60 次迭代后我得到一个错误:
FMUException: Error loading the binary. Could not load the DLL: A dynamic link library (DLL) initialization routine failed.
我之前在使用 Dymola FMU 时遇到过类似的问题,我最好的猜测是某些东西没有正确卸载,最终导致了这个问题。
我建议将您的代码更改为:
model = load_fmu("MOdel_0IV_0curves.fmu")## LOAD THE FMU
def fun2optim(theta):## Funtion to optimize with the initial guess of paramameter values theta
global model
model.reset()
res = model.simulate(input=foo(theta),final_time=1)
results_VV=np.array([]) ###SAVE THE OUTPUT IN ARRAY
for i in range(200,400):
out=(res[output_IV[i]])
results=out[0::5] #Dymola FMU has 5 same IV curve points
results_VV=np.append(results_VV,results)
return(results_VV)
通过这种方式,您不必每次都重新加载 FMU(您只需重置它),这也会带来性能提升。