You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python基于scipy.minimize的参数优化仅首列非零问题求解

问题排查与修复方案

以下是具体错误点和修复逻辑:

  • 最核心错误:function_Price 函数的return语句缩进错误,你把return放在了for循环内部,第一轮循环j=0执行完就直接返回结果,剩下j≥1的参数完全没有参与计算,自然只有第一个参数有值,其余全部为0,和你遇到的现象完全吻合。需要把return放到for循环外,等所有维度计算完成后再返回。
  • 变量名不匹配:function_Price 形参传入的价格数组命名为y,但函数内部引用的时候用了未定义的P,需要统一变量名。
  • 优化调用参数错误:minimize的args参数里使用了未定义的变量Y,你循环中定义的待拟合序列是k,需要替换成对应变量。
  • 补充:你当前用的SLSQP是带约束的优化算法,如果你没有额外约束的话,可以用和Matlab的fminsearch逻辑更接近的Nelder-Mead算法,适配性更好。

修复后代码

主函数

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[:]
    temp = 0
    for j in range(N):
        price_j = a[j] * C[j] * y[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]])

# Correlation (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

# 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] # 待拟合序列
    C = Corr[i, :]
    para = np.zeros(N) # 每次拟合重置初始值
    # 替换错误的Y为k,可根据需求选择算法,SLSQP或者Nelder-Mead
    parag = minimize(GError_function_Price, para, args=(y, k, t, T, tau, N, C), method='SLSQP', bounds=B)
    A[i,:] = parag.x

# 输出结果
print(A)

内容的提问来源于stack exchange,提问作者MMKshawn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 03:24:02