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

使用scipy.optimize.minimize求解优化问题时出现维度不匹配错误

问题排查与解决方案

核心错误原因

  • 初始值维度不符合要求:scipy.optimize.minimize要求输入的初始猜测值x0必须为一维数组,原代码中定义的x0 = np.zeros((14,1))是形状为(14,1)的二维列向量,不符合接口要求。
  • Vout维度不匹配:原代码中Vout被处理为形状为(10,1)的二维数组,当一维的优化变量参与矩阵运算后,得到的结果是一维数组,二者相减会触发维度报错。
  • 约束返回值维度不符合要求:scipy的约束函数要求返回值为一维数组,原代码的等式约束返回值是二维数组,不符合接口规范。

另外补充一个逻辑问题提醒:原代码中的不等式约束写反了方向,fun返回值要求大于等于0,原写法是要求流量大于等于上限值,如果实际需求是限制流量不超过上限,需要调换减号两边的计算项。

修正后的完整代码

# Constantes 

# Constantes de eficiencia de los conversores del EH
n_Q = 0.4
n_W = 0.3
n_AB = 0.8 
n_C = 3  
n_R = 0.7 

# Constantes de máxima capacidad de flujo de energía 
C_max_CHP_g = 400 
C_max_CHP_e = 120 
C_max_CHP_t = 160 
C_max_AB = 400 
C_max_CERG = 300 
C_max_WARG = 300  

# Precio del gas 
P_g = 0.04 #kW/h 

# Librerias necesarias
import numpy as np
import matplotlib.pyplot as plt 
from scipy.optimize import minimize 


# Matrices de incidencia  
A1 = np.array([[0,0,1,0,0,0,0,0,0,0,0,0],
               [0,0,0,0,-1,-1,0,0,0,0,0,0], 
               [0,0,0,0,0,0,-1,-1,0,0,0,0]])   

A2 = np.array([[0,0,0,1,0,0,0,0,0,0,0,0],
               [0,0,0,0,0,0,0,0,-1,-1,0,0]]) 

A3 = np.array([[0,1,0,0,1,0,0,0,0,0,0,0],
               [0,0,0,0,0,0,0,0,0,0,-1,0]]) 

A4 = np.array([[0,0,0,0,0,0,0,1,1,0,0,0],
               [0,0,0,0,0,0,0,0,0,0,0,-1]]) 

# Matrices de carácteristicas 
H1 = np.array([[n_Q,1,0], 
               [n_W,0,1]]) 

H2 = np.array([n_AB,1]) 
H3 = np.array([n_C,1]) 
H4 = np.array([n_R,1]) 

# Matrices de incidencia  
X = np.array([[1,1,0,0,0,0,0,0,0,0,0,0],
              [0,0,1,1,0,0,0,0,0,0,0,0]])  # Entrada 

Y = np.array([[1,0,0,0,0,1,0,0,0,0,0,0],
              [0,0,0,0,0,0,0,0,0,0,1,1], 
              [0,0,0,0,0,0,1,0,0,1,0,0]]) # Salida   

# Matrices de flujo de energía 
Z1 = np.dot(H1,A1)  
Z2 = np.dot(H2,A2)[np.newaxis]  
Z3 = np.dot(H3,A3)[np.newaxis]  
Z4 = np.dot(H4,A4)[np.newaxis]  

# Matriz de flujo de energía del EH 
Z = np.transpose(np.concatenate((Z1.T,Z2.T,Z3.T,Z4.T),axis=1)) 

# Matrices para de acoplamiento (Input-to-Output) 
R = np.concatenate((-np.eye(2),np.zeros((5,2))),axis=0) 
Q = np.concatenate((X,Z),axis=0) 

# Matriz de acoplamiento aumentada (J)
J_1 = np.concatenate((np.zeros((3,2)),Y),axis=1) 
J_2 = np.concatenate((R,Q),axis=1) 
J = np.concatenate((J_1,J_2),axis=0) 

# Vector de maxima capacidad 
C_max = np.array([C_max_CHP_g,C_max_CHP_e,C_max_CHP_t,C_max_AB,C_max_CERG,C_max_WARG]) 

# Demanda 修正为一维数组
Vout = np.array([150,0,400,0,0,0,0,0,0,0])

# Definición de funciones  
def objective_function(V):  
  return 110*V[0] + P_g*V[1]

# Restricciones 调整了不等式约束方向为上限约束
cons=({'type': 'eq',
       'fun': lambda V: np.dot(J,V) - Vout},
      {'type': 'ineq',
       'fun': lambda V: np.sum(C_max[0:2]) - np.sum(np.dot(A1,V[2:]))},
      {'type': 'ineq',
       'fun': lambda V: C_max[3] - np.sum(np.dot(A2,V[2:]))}, 
      {'type': 'ineq',
       'fun': lambda V: C_max[4] - np.sum(np.dot(A3,V[2:]))}, 
      {'type': 'ineq',
       'fun': lambda V: C_max[5] - np.sum(np.dot(A4,V[2:]))}) 

# Condicion inicial 修正为一维数组
x0 = np.zeros(14) 

res = minimize(objective_function,x0,constraints=cons)
print(res)

内容的提问来源于stack exchange,提问作者Julio Ortegón

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:24:03