代码之家  ›  专栏  ›  技术社区  ›  NiPapen

FMUException:加载二进制文件时出错。无法加载DLL:动态链接库(DLL)初始化例程失败

  •  2
  • NiPapen  · 技术社区  · 6 年前

    我使用pyfmi在Python中加载Modelica生成的模型。一旦我加载模型,我想执行优化和参数估计。问题是,对于每个参数估计(优化迭代),FMU通常需要加载,大约需要300-400个字符,但由于二进制加载错误,它不会收敛。我应该在哪里查找源?欢迎任何提示。

    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.
    
    1 回复  |  直到 6 年前
        1
  •  4
  •   Christian Winther    6 年前

    我以前也遇到过类似的问题,Dymola FMUs,我最好的猜测是某些东西没有正确卸载,最终导致问题。

    我建议您将代码更改为:

    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(只需重置它),这也会提高性能。