我正在构建一个用于 sientific 计算的 Python 应用程序。该应用程序是模型预测控制器(MPC),我使用 scipy.optimize.minimize 函数作为优化算法。
solution_guess = minimize(objectiveFunction,
U_guess,
arg_guess,
callback= None,
method = "SLSQP")
其中目标函数是执行我的系统模拟的自制函数。它看起来像这样:
def objectiveFunction(x,*arg):
U_test = x
dt_test = arg[0]
setpoint_test = arg[1]
pred_horizion_length_test = arg[2]
initStateValue_test = arg[3]
# Defining Model Arrays
NS_pred_horizion_test = int(pred_horizion_length_test/dt_test)+1
pred_horizion_array_test = np.linspace(0, pred_horizion_length_test, NS_pred_horizion_test)
SP_array_test = np.zeros(NS_pred_horizion_test) + setpoint_test
Y_array_test = SP_array_test * 0
# Defining parameters for the testing model
timeDelay_test = 50
initDelayValue_test = 0
K_test = 4
Tc1_test = 30
Tc2_test = 60
# Defining Model Object
obj_model_test = model.secDegModel(dt = dt_test,
K = K_test,
Tc1 = Tc1_test,
Tc2 = Tc2_test,
timeDelay = timeDelay_test,
initStateValue = initStateValue_test,
initDelayValue = initDelayValue_test
)
###########################################
#|||||||||||||||||||||||||||||||||||||||||#
# Testing Values for U on Model #
#|||||||||||||||||||||||||||||||||||||||||#
###########################################
# Running simulation of "real" model function
for k in range(NS_pred_horizion_test):
Y_array_test[k] = obj_model_test.run(u_k = U_test)
error = np.sum(abs(SP_array_test-Y_array_test))
return error
我不知道的是如何取回 Y_array_test 数组,以便每次优化完成时都可以绘制它。我尝试使用全局变量,但我没有让它工作,我也不认为它是使用全局变量的良好编码方式。有人知道解决我问题的好方法吗?也许使用回调函数?(如果回调是要走的路,我不完全理解这个方法是如何工作的或者如何以一种很好的方式实现它)