当无法使用scipy优化器计算目标函数应该返回的值时,我可以让目标函数返回的最佳值是什么?

2024-06-16 10:53:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正试图获得一个函数的某些参数,该函数允许对制冷设备进行数学建模,这样就可以计算设备每次模拟的所有点,并且可以获得相对于实际值的最小均方误差​​指某种财产

模拟基于热力学原理,这就是我使用coolprop库的原因。就其本身而言,电厂建模利用使用LSODA方法的scipy解算器,以便能够在下一瞬间知道参数,但在某些情况下,scipy解算器会给出值​​下一个瞬间的,超出值范围的​​coolprop可以计算必要的属性,因此脚本结束

此外,我利用scipy优化器最小化来设置某些参数,以使均方误差最小化,但我对目标函数有问题,因为当无法完成工厂模拟时,为了能够获得设备所有模拟瞬间的均方误差,这些初始参数力求最小化,我尝试返回一个假误差,它是时间的函数,然而,我一直认为这不是最好的解决方案,因为在优化器的初始迭代中,它能够模拟大约100分钟的真实过程,在600分钟的可用过程中,但是,当解算器开始移动初始参数时,解算器仅能达到实际过程的3分钟,然后继续使用其他初始参数进行测试,因为coolprop无法计算特定属性

def objective_function(opt_params,req_params,opt_params_names,iter):
    T_cr_real = req_params[2]
    print_iter(opt_params,opt_params_names,iter[0])
    try:
        T_cr_s = simulation(req_params,opt_params)
        objective_value = mse(T_cr_real,T_cr_s)
        print_succes_iter(opt_params,opt_params_names,objective_value,iter[0])
        Time = req_params[0]
        save_success_iter(opt_params_names,opt_params_names,objective_value,T_cr_s,T_cr_real,Time)
    except: 
        T_cr_s = 1000*iter[0]*np.ones(467)
        objective_value = mse(T_cr_real,T_cr_s)
    iter[0] += 1 
    return objective_value

谢谢


Tags: 函数参数namesvaluescipyparamsreqreal