使用scipy.optimize.minimize解决优化问题的问题

2024-05-29 10:56:50 发布

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

我在使用scipy库解决优化问题时遇到了一个“维度”问题,代码如下

# 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])[np.newaxis] 
Vout = Vout.T 

# 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(np.dot(A1,V[2:14])) - np.sum(C_max[0:2])},
      {'type': 'ineq',
       'fun': lambda V: np.sum(np.dot(A2,V[2:14])) - C_max[3]}, 
      {'type': 'ineq',
       'fun': lambda V: np.sum(np.dot(A3,V[2:14])) - C_max[4]}, 
      {'type': 'ineq',
       'fun': lambda V: np.sum(np.dot(A4,V[2:14])) - C_max[5]}) 

# Condicion inicial 
x0 = np.zeros((14,1)) 

minimize(objective_function,x0,constraints=cons)

这是以下错误:ValueError:所有输入数组必须具有相同数量的维度,但索引0处的数组具有2个维度,而索引1处的数组具有1个维度

但是我检查了很多次尺寸,我看不出问题所在,我感谢你的帮助


Tags: lambdaabtypenpdearraydotmax

热门问题