Python scipy最小化类型错误:不支持-:';元组';和';元组';
我正在使用一些SIR模型,并尝试使用scipy最小化函数Python scipy最小化类型错误:不支持-:';元组';和';元组';,python,optimization,scipy,valueerror,minimize,Python,Optimization,Scipy,Valueerror,Minimize,我正在使用一些SIR模型,并尝试使用scipy最小化函数 def SIR_Model(parametros, valores_iniciais, valores_reais): Dias = len(valores_reais)-1 Dia=[0] N=valores_iniciais[0] S=[] E=[] A=[] I=[] H=[] R=[] S.append(valores_iniciais[1])
def SIR_Model(parametros, valores_iniciais, valores_reais):
Dias = len(valores_reais)-1
Dia=[0]
N=valores_iniciais[0]
S=[]
E=[]
A=[]
I=[]
H=[]
R=[]
S.append(valores_iniciais[1])
E.append(valores_iniciais[2])
A.append(valores_iniciais[3])
I.append(valores_iniciais[4])
H.append(valores_iniciais[5])
R.append(valores_iniciais[6])
sigma=valores_iniciais[7]
lambda_model=valores_iniciais[8]
k1=valores_iniciais[9]
k2=valores_iniciais[10]
delta=valores_iniciais[11]
beta1=parametros[0]
beta2=parametros[1]
beta3=parametros[2]
gamma=parametros[3]
for i in range(0,Dias):
Dia.append(i+1)
S.append(S[i]*(1-beta1*A[i]/N-beta2*I[i]/N-beta3*H[i]/N))
E.append(E[i]*(1-sigma)+S[i]/N*(beta1*A[i]+beta2*I[i]+beta3*H[i]))
A.append(A[i]*(1-k1)+(1-gamma)*sigma*E[i])
I.append(sigma*gamma*E[i]-lambda_model*I[i])
H.append(H[i]*(1-k2-delta)+lambda_model*I[i])
R.append(R[i]+k1*A[i]+(k2+delta)*H[i])
df_model=pd.DataFrame(np.column_stack([S, E, A, I, H, R, Dia, valores_reais]), columns=['Susceptible','Exposed','Asymptomatic','Infected','Hospitalized','Removed','Dia', 'Infected Portugal'])
RMSE = ((df_model["Infected"] - df_model["Infected Portugal"]) ** 2).mean() ** .5
R_0 = ((1-gamma)*beta1*S[0])/(k1*N) + (gamma*beta2*S[0])/(lambda_model*N) + (gamma*beta3*S[0])/((k2+delta)*N)
return RMSE, df_model, R_0
使用一些值调用函数,效果很好
e、 g.RMSE_模型、df_模型、R_0_模型=SIR_模型(葡萄牙瓦洛雷斯·伊尼西奥的Parameteros_x0)
当我尝试最小化时,我会得到以下错误:
TypeError:-:“tuple”和“tuple”的操作数类型不受支持
from scipy.optimize import minimize
res = minimize(SIR_Model,x0=parametros, args=(valores_inicio, infected_portugal))
你能帮忙吗?
谢谢函数
SIR\u model
返回一个元组,但scipy.optimize.minimize
希望函数返回一个标量
报告中的描述说:
最小化一个或多个变量的标量函数
返回元组的函数可能在元组可以通过比较排序的条件下工作。在您的例子中,元组包含无法排序的对象
您可能希望包装SIR\u Model
函数,以便它返回标量并将最小化函数应用于包装器
def wrapper(parametros, valores_iniciais, valores_reais):
res = SIR_Model(parametros, valores_iniciais, valores_reais)
return res[0]
函数
SIR\u model
返回一个元组,但scipy.optimize.minimize
期望函数返回一个标量
报告中的描述说:
最小化一个或多个变量的标量函数
返回元组的函数可能在元组可以通过比较排序的条件下工作。在您的例子中,元组包含无法排序的对象
您可能希望包装SIR\u Model
函数,以便它返回标量并将最小化函数应用于包装器
def wrapper(parametros, valores_iniciais, valores_reais):
res = SIR_Model(parametros, valores_iniciais, valores_reais)
return res[0]