Python中使用Minimize的参数优化

2024-05-14 14:35:13 发布

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

我编写了以下两个函数来校准模型:

主要功能是:

def function_Price(para,y,t,T,tau,N,C):  
# y= price array
# C = Auto and cross correlation array
# a= paramters need to be calibrated
    a=para[0:]
    temp=0
    for j in range(N):
        price_j = a[j]*C[j]*P[t:T-tau,j]
        temp=temp+price_j
        Price=temp
        return Price 

目标函数是:

def GError_function_Price(para,y,k,t,T,tau,N,C):
# k is the price need to be fitted
   return sum((function_Price(para,y,t,T,tau,N,C)-k[t+tau:T]) ** 2)

现在,我调用这两个函数来优化模型:

import numpy as np
from scipy.optimize import minimize
 
# Prices (example)
y = np.array([[1,2,3,4,5,4], [4,5,6,7,8,9], [6,7,8,7,8,6], [13,14,15,11,12,19]])

# Correaltion (example)
Corr= np.array([[1,2,3,4,5,4], [4,5,6,7,8,9], [6,7,8,7,8,6], [13,14,15,11,12,19],[1,2,3,4,5,4],[6,7,8,7,8,6]])

# Define 
tau=1
Size = y.shape
N = Size[1]
T = Size[0]
t=0

# initial Values
para=np.zeros(N) 

# Bounds
B = np.zeros(shape=(N,2)) 
for n in range(N):
    B[n][0]= float('-inf')
    B[n][1]= float('inf')

# Calibration 
A = np.zeros(shape=(N,N))  
for i in range (N):
    k=y[:,i] #fitted one
    C=Corr[i,:]
    parag=minimize(GError_function_Price,para,args=(y,Y,t,T,tau,N,C),method='SLSQP',bounds=B)
    A[i,:]=parag.x

一旦我运行了模型,它就会生成一个N乘N的参数优化值数组。但是,除了第一列之外,其余的都保持零。有点不对劲

你能帮我解决这个问题吗?

我知道如何在Matlab中实现它

以下是Matlab代码: 主要功能

function Price=function_Price(para,P,t,T,tau,N,C)  
        a=para(:,:);
        temp=0;
       for j=1:N
        price_j = a(j).*C(j).*P(t:T-tau,j);
        temp=temp+price_j;
       end
      Price=temp;
end

目标函数:

function gerr=GError_function_Price(para,P,Y,t,T,tau,N,C)
gerr=sum((function_Price(para,P,t,T,tau,N,C)-Y(t+tau:T)).^2);
end

现在,我用以下方式调用这两个函数:

P = [1,2,3,4,5,4;4,5,6,7,8,9;6,7,8,7,8,6;13,14,15,11,12,19];
AutoAndCrossCorr= [1,2,3,4,5,4;4,5,6,7,8,9;6,7,8,7,8,6;13,14,15,11,12,19;1,2,3,4,5,4;6,7,8,7,8,6];

tau=1;
Size = size(P);
N =6;
T =4;
t=1;   

for i=1:N
Y=P(:,i); % fitted one
C=AutoAndCrossCorr(i,:);
para=zeros(1,N);
lb= repmat(-inf,N,1);
ub= repmat(inf ,N,1);
parag=fminsearchbnd(@(para)abs(GError_function_Price(para,P,Y,t,T,tau,N,C)),para,lb,ub);
a(i,:)=parag;
end

Tags: 函数forsizenpzerosfunctionarrayprice
1条回答
网友
1楼 · 发布于 2024-05-14 14:35:13

问题似乎是您正在将函数调用的结果传递给minimize,而不是函数本身。参数由args参数传递。因此,不是:

minimize(GError_function_Price(para,y,k,t,T,tau,N,C),para,method='SLSQP',bounds=B)

以下几点应该有效

minimize(GError_function_Price,para,args=(y,k,t,T,tau,N,C),method='SLSQP',bounds=B)

相关问题 更多 >

    热门问题