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

雅可比矩阵伪逆广播错误求解:带梯度变异的ε约束差分进化实现问题

带梯度变异的ε约束差分进化算法维度不匹配问题修复

根因定位

  • 矩阵乘法运算符误用:numpy中*为逐元素广播乘法,要求运算双方维度可广播,无法实现线性代数中的矩阵乘法逻辑,这是触发维度不匹配报错的直接原因。
  • 雅可比计算逻辑错误:Jacobian函数的外层循环引用了函数外的变量delta_C获取约束数量,会导致雅可比矩阵维度计算异常,需要替换为函数内部计算得到的约束数量。
  • 输出维度适配问题:矩阵乘法得到的扰动向量为二维4×1结构,需要降维为一维数组才能和长度为4的trial向量做运算。

修复代码

修正雅可比计算函数

def Jacobian(v,delta=0.01):
    C = calculate_C(v)
    Jc = np.zeros(shape=(len(C),len(v)))
    # 修正循环边界为当前函数内计算的约束数量
    for i in range(len(C)):
        for j in range(len(v)):
            aux = np.copy(v)
            aux[j] = v[j]+delta
            C_plus = calculate_C(aux)[i]
            aux[j] = v[j]-delta
            C_minus = calculate_C(aux)[i]
            Jc[i,j] = ((C_plus-C_minus)/(2*delta))
    return Jc

修正变异环节代码

trial = np.zeros(4)
inv_Jc = np.linalg.pinv(Jacobian(trial))
delta_C = np.array(calculate_C(trial))
delta_C = delta_C.reshape(len(delta_C),1)
# 替换为矩阵乘法@,并将结果降维为一维数组
trial = trial - (inv_Jc @ delta_C).flatten()

逻辑验证

你的场景下约束总数为2个不等式约束+3个等式约束共5个,试验向量维度为4,因此雅可比矩阵为5×4维度,伪逆后为4×5维度,和5×1的delta_C做矩阵乘法正好得到4×1的扰动向量,降维后和trial维度完全匹配,可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 19:15:07