Pyomo 我有一个函数问题,该函数根据向量上的值向解算器发送正确的方程

Pyomo 我有一个函数问题,该函数根据向量上的值向解算器发送正确的方程,pyomo,Pyomo,该功能正常工作。该函数将回归“knn_Potentia”中的值与同一问题的pass解决方案的“m.u_variable[x]”(Pyomo variable)值进行比较。如果“knn_Potentia”的值高于或与“CP”相同,则发送一个方程,但如果值较低,则发送另一个方程。问题在于,在当前解决方案中,“m.u_变量[x]”的值可能高于“CP”,但函数会将另一个方程发送给解算器,因为该点的“knn_效价”中的值较低。由于这个原因和错误,问题变得不可行。我不知道是否有人知道更好的方法来避免这个错误

该功能正常工作。该函数将回归“knn_Potentia”中的值与同一问题的pass解决方案的“m.u_variable[x]”(Pyomo variable)值进行比较。如果“knn_Potentia”的值高于或与“CP”相同,则发送一个方程,但如果值较低,则发送另一个方程。问题在于,在当前解决方案中,“m.u_变量[x]”的值可能高于“CP”,但函数会将另一个方程发送给解算器,因为该点的“knn_效价”中的值较低。由于这个原因和错误,问题变得不可行。我不知道是否有人知道更好的方法来避免这个错误

这就是功能:

def modelo_pot(m,x):
if (knn_potencia.predict([[float(x)]])[0]-CP) >= 0:
    return  m.daw[x] == (CP-m.u_variable[x])*m.tp_variable[x]    
elif x==0:
    return  m.daw[x] == (CP-m.u_variable[x])*m.tp_variable[x]         
else: 
    exp = e**(-(CP-m.u_variable[x])*(m.t[x]-m.t[m.x_variable.get_lower_element_boundary(x)])/awc0)
    return m.awc[x] == awc0-(awc0-m.awc[m.x_variable.get_lower_element_boundary(x)])*exp

谢谢。

您不能基于模型组件有条件地向解算器发送不同的方程式。当代码执行时,这些都是未知的……代码只是为了构建模型,解算器将仔细研究。这样想吧。。。在已知或探索任何值之前,需要执行所有代码,以干净地向解算器构建模型。